模拟题一:电商订单数据清洗(30分)
【任务说明】
数据清洗是数据分析过程中很重要的一个环节,没有高质量的数据清洗就没有高质量的数据分析。现有一份某电商平台的用户订单数据,数据存在缺失值、异常值、重复值、格式不统一等问题,请根据任务要求完成数据清洗功能。
【数据集说明】
数据集文件:order_data.csv
数据集包含以下字段:
| 字段名 |
说明 |
示例 |
|---|---|---|
| 订单编号 |
唯一标识 |
DD20230101-0001 |
| 下单时间 |
用户下单时间 |
2023年01月15日 星期日 |
| 用户ID |
用户唯一标识 |
U10001 |
| 商品名称 |
购买商品名称 |
iPhone 14 Pro |
| 商品类别 |
商品所属类别 |
手机数码 |
| 购买数量 |
购买件数 |
2 |
| 单价(元) |
商品单价 |
7999.00 |
| 订单金额(元) |
订单总金额 |
15998.00 |
| 支付方式 |
支付渠道 |
微信支付 |
| 订单状态 |
当前状态 |
已完成 |
| 收货地址 |
配送地址 |
湖南省长沙市岳麓区… |
【任务要求】
请使用 NumPy 和 Pandas 按如下要求对数据进行清洗:
- 列名修改:将”单价(元)”列名改为”商品单价”,将”订单金额(元)”列名改为”订单总金额”,将”下单时间”列名改为”交易时间”。
- 缺失值处理:任何一条数据中只要有一个缺失值就删除该条数据。
- 数据类型转换:将”购买数量”列的数据类型转换为
int64,将”商品单价”和”订单总金额”两列的数据类型转换为float64。 - 日期处理:交易时间中包含日期和星期几,要求数据最终只保留日期部分(格式如”2023年01月15日”),并将交易日期从字符串类型转换为日期数据类型(datetime64)。
- 空值清理:转换日期过程中不符合日期格式的数值会被转换为空值(NaT),需要删除”交易时间”列中为空的行。
- 排序与索引:按交易日期进行升序排列,排序后的索引已被打乱,需要重置索引(drop=True)。
- 异常值处理:将购买数量为负数或大于100的数据、商品单价为负数的数据、订单总金额为负数的数据进行删除。
- 重复值处理:根据”订单编号”列,删除重复的订单数据。
- 数据保存:将清洗后的数据保存为
cleaned_order_data.csv文件(不保存索引)。
模拟题二:学生成绩数据清洗(30分)
【任务说明】
现有一份某高校多个学院的学生考试成绩数据,数据来源于不同教师的手工录入,存在字段格式不统一、数据类型混乱、缺失值、异常值等问题。请根据任务要求完成数据清洗功能。
【数据集说明】
数据集文件:student_score.csv
数据集包含以下字段:
| 字段名 |
说明 |
示例 |
|---|---|---|
| 学号 |
学生学号 |
20210101001 |
| 姓名 |
学生姓名 |
张三 |
| 学院 |
所属学院 |
信息工程学院 |
| 专业 |
所属专业 |
软件技术 |
| 班级 |
所属班级 |
软工2101班 |
| 考试日期 |
考试时间 |
2023/06/20 周二 |
| 科目名称 |
考试科目 |
Python程序开发 |
| 平时成绩 |
平时分 |
85 |
| 期中成绩 |
期中分 |
78 |
| 期末成绩 |
期末分 |
92 |
| 总评成绩 |
综合成绩 |
88.6 |
| 等级 |
成绩等级 |
良好 |
【任务要求】
请使用 NumPy 和 Pandas 按如下要求对数据进行清洗:
- 列名修改:将”考试日期”列名改为”考试时间”,将”科目名称”列名改为”课程名称”,将”等级”列名改为”成绩等级”。
- 缺失值处理:检查数据中的缺失值,任何一条数据中只要有一个缺失值就删除该条数据。
- 数据类型转换:将”平时成绩”、”期中成绩”、”期末成绩”三列的数据类型转换为
int64,将”总评成绩”列的数据类型转换为float64。 - 日期处理:考试时间中包含日期和星期几,要求数据最终只保留日期部分(格式如”2023/06/20”),并将考试日期从字符串类型转换为日期数据类型(datetime64)。
- 空值清理:转换日期过程中不符合日期格式的数值会被转换为空值(NaT),需要删除”考试时间”列中为空的行。
- 排序与索引:按考试日期进行升序排列,排序后的索引已被打乱,需要重置索引(drop=True)。
- 异常值处理:将平时成绩、期中成绩、期末成绩中超出0~100范围的数据进行删除;将总评成绩为负数的数据进行删除。
- 重复值处理:根据”学号”和”课程名称”两列,删除重复的考试记录。
- 数据保存:将清洗后的数据保存为
cleaned_student_score.csv文件(不保存索引)。
练习题三:多文件数据处理(综合练习)
【任务说明】
在实际工作中,数据往往分散在多个文件中。现有一家连锁超市2023年1月至6月的月度销售数据,每个月的数据存储在一个单独的CSV文件中。请根据任务要求完成多文件的合并与清洗。
【数据集说明】
共有6个CSV文件:
sales_2023_01.csvsales_2023_02.csvsales_2023_03.csvsales_2023_04.csvsales_2023_05.csvsales_2023_06.csv
每个文件包含以下字段:
| 字段名 |
说明 |
示例 |
|---|---|---|
| 日期 |
销售日期 |
2023-01-05 |
| 门店编号 |
门店唯一标识 |
S001 |
| 门店名称 |
门店名称 |
长沙岳麓店 |
| 商品类别 |
商品分类 |
食品饮料 |
| 商品名称 |
商品名 |
可口可乐330ml |
| 销售数量 |
售出数量 |
15 |
| 销售金额 |
售出金额 |
59.85 |
| 月份 |
数据所属月份 |
一月 |
【任务要求】
请使用 Pandas 按如下要求完成多文件处理:
- 文件读取:使用
glob模块或os模块获取所有CSV文件路径,使用循环依次读取每个月的销售数据。 - 数据合并:将6个月的数据纵向合并(concat)为一个完整的DataFrame。
- 缺失值处理:删除包含缺失值的行。
- 数据类型转换:将”销售数量”列转换为
int64,将”销售金额”列转换为float64,将”日期”列转换为日期类型(datetime64)。 - 异常值处理:删除销售数量为负数或销售金额为负数的数据。
- 重复值处理:删除完全重复的行数据。
- 数据排序:按日期升序排列,并重置索引(drop=True)。
- 数据分组统计:按”门店名称”分组,统计每个门店的总销售数量和总销售金额,将结果保存为
store_summary.csv。 - 数据保存:将合并清洗后的完整数据保存为
all_sales_data.csv(不保存索引)。
练习题四:中文数字转换为阿拉伯数字(综合练习)
【任务说明】
在某些业务数据中,数字可能以中文形式存在(如”一百二十三”、”三千五百万”等),这给数据分析和计算带来了不便。请编写函数,实现中文数字到阿拉伯数字的转换,并将其应用到数据清洗流程中。
【数据集说明】
数据集文件:chinese_number_data.csv
数据集包含以下字段:
| 字段名 |
说明 |
示例 |
|---|---|---|
| 编号 |
记录编号 |
R001 |
| 项目名称 |
项目名 |
城市道路改造工程 |
| 合同金额(中文) |
以中文数字表示的金额 |
三百五十万元 |
| 实际支出(中文) |
以中文数字表示的支出 |
二百八十万零五千元 |
| 工期(中文) |
以中文数字表示的天数 |
一百二十天 |
| 参与人数(中文) |
以中文数字表示的人数 |
四十五人 |
【任务要求】
请使用 Pandas 和 Python 内置功能按如下要求完成任务:
- 编写转换函数:编写一个函数
chinese_to_arabic(text),能够将常见中文数字转换为阿拉伯数字。要求支持:- 基本数字:零、一、二、三、四、五、六、七、八、九
- 单位:十、百、千、万、亿
- 示例:”一百二十三” → 123,”三千五百万” → 35000000,”四十五” → 45
- 数据清洗:读取CSV数据,删除包含缺失值的行。
- 应用转换:使用
apply方法将转换函数应用到”合同金额(中文)”、”实际支出(中文)”、”工期(中文)”、”参与人数(中文)”四列,生成对应的阿拉伯数字列:- “合同金额(数字)”:仅转换数字部分(去除”元”字后转换)
- “实际支出(数字)”:仅转换数字部分(去除”元”字后转换)
- “工期(数字)”:仅转换数字部分(去除”天”字后转换)
- “参与人数(数字)”:仅转换数字部分(去除”人”字后转换)
- 数据类型转换:将新生成的四列数字列转换为
int64类型。 - 计算验证:新增一列”预算结余(数字)”,计算公式为:合同金额 - 实际支出。
- 数据保存:将处理后的数据保存为
cleaned_chinese_number_data.csv(不保存索引)。