Python程序开发竞赛 - 数据清洗模块模拟训练题1

  • ~4.10K 字
  1. 1. 模拟题一:电商订单数据清洗(30分)
    1. 1.1. 【任务说明】
    2. 1.2. 【数据集说明】
    3. 1.3. 【任务要求】
  2. 2. 模拟题二:学生成绩数据清洗(30分)
    1. 2.1. 【任务说明】
    2. 2.2. 【数据集说明】
    3. 2.3. 【任务要求】
  3. 3. 练习题三:多文件数据处理(综合练习)
    1. 3.1. 【任务说明】
    2. 3.2. 【数据集说明】
    3. 3.3. 【任务要求】
  4. 4. 练习题四:中文数字转换为阿拉伯数字(综合练习)
    1. 4.1. 【任务说明】
    2. 4.2. 【数据集说明】
    3. 4.3. 【任务要求】


模拟题一:电商订单数据清洗(30分)

【任务说明】

数据清洗是数据分析过程中很重要的一个环节,没有高质量的数据清洗就没有高质量的数据分析。现有一份某电商平台的用户订单数据,数据存在缺失值、异常值、重复值、格式不统一等问题,请根据任务要求完成数据清洗功能。

【数据集说明】

数据集文件:order_data.csv
数据集包含以下字段:

字段名
说明
示例
订单编号
唯一标识
DD20230101-0001
下单时间
用户下单时间
2023年01月15日 星期日
用户ID
用户唯一标识
U10001
商品名称
购买商品名称
iPhone 14 Pro
商品类别
商品所属类别
手机数码
购买数量
购买件数
2
单价(元)
商品单价
7999.00
订单金额(元)
订单总金额
15998.00
支付方式
支付渠道
微信支付
订单状态
当前状态
已完成
收货地址
配送地址
湖南省长沙市岳麓区…

【任务要求】

请使用 NumPyPandas 按如下要求对数据进行清洗:

  1. 列名修改:将”单价(元)”列名改为”商品单价”,将”订单金额(元)”列名改为”订单总金额”,将”下单时间”列名改为”交易时间”。
  2. 缺失值处理:任何一条数据中只要有一个缺失值就删除该条数据。
  3. 数据类型转换:将”购买数量”列的数据类型转换为 int64,将”商品单价”和”订单总金额”两列的数据类型转换为 float64
  4. 日期处理:交易时间中包含日期和星期几,要求数据最终只保留日期部分(格式如”2023年01月15日”),并将交易日期从字符串类型转换为日期数据类型(datetime64)。
  5. 空值清理:转换日期过程中不符合日期格式的数值会被转换为空值(NaT),需要删除”交易时间”列中为空的行。
  6. 排序与索引:按交易日期进行升序排列,排序后的索引已被打乱,需要重置索引(drop=True)。
  7. 异常值处理:将购买数量为负数或大于100的数据、商品单价为负数的数据、订单总金额为负数的数据进行删除。
  8. 重复值处理:根据”订单编号”列,删除重复的订单数据。
  9. 数据保存:将清洗后的数据保存为 cleaned_order_data.csv 文件(不保存索引)。

模拟题二:学生成绩数据清洗(30分)

【任务说明】

现有一份某高校多个学院的学生考试成绩数据,数据来源于不同教师的手工录入,存在字段格式不统一、数据类型混乱、缺失值、异常值等问题。请根据任务要求完成数据清洗功能。

【数据集说明】

数据集文件:student_score.csv
数据集包含以下字段:

字段名
说明
示例
学号
学生学号
20210101001
姓名
学生姓名
张三
学院
所属学院
信息工程学院
专业
所属专业
软件技术
班级
所属班级
软工2101班
考试日期
考试时间
2023/06/20 周二
科目名称
考试科目
Python程序开发
平时成绩
平时分
85
期中成绩
期中分
78
期末成绩
期末分
92
总评成绩
综合成绩
88.6
等级
成绩等级
良好

【任务要求】

请使用 NumPyPandas 按如下要求对数据进行清洗:

  1. 列名修改:将”考试日期”列名改为”考试时间”,将”科目名称”列名改为”课程名称”,将”等级”列名改为”成绩等级”。
  2. 缺失值处理:检查数据中的缺失值,任何一条数据中只要有一个缺失值就删除该条数据。
  3. 数据类型转换:将”平时成绩”、”期中成绩”、”期末成绩”三列的数据类型转换为 int64,将”总评成绩”列的数据类型转换为 float64
  4. 日期处理:考试时间中包含日期和星期几,要求数据最终只保留日期部分(格式如”2023/06/20”),并将考试日期从字符串类型转换为日期数据类型(datetime64)。
  5. 空值清理:转换日期过程中不符合日期格式的数值会被转换为空值(NaT),需要删除”考试时间”列中为空的行。
  6. 排序与索引:按考试日期进行升序排列,排序后的索引已被打乱,需要重置索引(drop=True)。
  7. 异常值处理:将平时成绩、期中成绩、期末成绩中超出0~100范围的数据进行删除;将总评成绩为负数的数据进行删除。
  8. 重复值处理:根据”学号”和”课程名称”两列,删除重复的考试记录。
  9. 数据保存:将清洗后的数据保存为 cleaned_student_score.csv 文件(不保存索引)。

练习题三:多文件数据处理(综合练习)

【任务说明】

在实际工作中,数据往往分散在多个文件中。现有一家连锁超市2023年1月至6月的月度销售数据,每个月的数据存储在一个单独的CSV文件中。请根据任务要求完成多文件的合并与清洗。

【数据集说明】

共有6个CSV文件:

  • sales_2023_01.csv
  • sales_2023_02.csv
  • sales_2023_03.csv
  • sales_2023_04.csv
  • sales_2023_05.csv
  • sales_2023_06.csv

每个文件包含以下字段:

字段名
说明
示例
日期
销售日期
2023-01-05
门店编号
门店唯一标识
S001
门店名称
门店名称
长沙岳麓店
商品类别
商品分类
食品饮料
商品名称
商品名
可口可乐330ml
销售数量
售出数量
15
销售金额
售出金额
59.85
月份
数据所属月份
一月

【任务要求】

请使用 Pandas 按如下要求完成多文件处理:

  1. 文件读取:使用 glob 模块或 os 模块获取所有CSV文件路径,使用循环依次读取每个月的销售数据。
  2. 数据合并:将6个月的数据纵向合并(concat)为一个完整的DataFrame。
  3. 缺失值处理:删除包含缺失值的行。
  4. 数据类型转换:将”销售数量”列转换为 int64,将”销售金额”列转换为 float64,将”日期”列转换为日期类型(datetime64)。
  5. 异常值处理:删除销售数量为负数或销售金额为负数的数据。
  6. 重复值处理:删除完全重复的行数据。
  7. 数据排序:按日期升序排列,并重置索引(drop=True)。
  8. 数据分组统计:按”门店名称”分组,统计每个门店的总销售数量和总销售金额,将结果保存为 store_summary.csv
  9. 数据保存:将合并清洗后的完整数据保存为 all_sales_data.csv(不保存索引)。

练习题四:中文数字转换为阿拉伯数字(综合练习)

【任务说明】

在某些业务数据中,数字可能以中文形式存在(如”一百二十三”、”三千五百万”等),这给数据分析和计算带来了不便。请编写函数,实现中文数字到阿拉伯数字的转换,并将其应用到数据清洗流程中。

【数据集说明】

数据集文件:chinese_number_data.csv
数据集包含以下字段:

字段名
说明
示例
编号
记录编号
R001
项目名称
项目名
城市道路改造工程
合同金额(中文)
以中文数字表示的金额
三百五十万元
实际支出(中文)
以中文数字表示的支出
二百八十万零五千元
工期(中文)
以中文数字表示的天数
一百二十天
参与人数(中文)
以中文数字表示的人数
四十五人

【任务要求】

请使用 Pandas 和 Python 内置功能按如下要求完成任务:

  1. 编写转换函数:编写一个函数 chinese_to_arabic(text),能够将常见中文数字转换为阿拉伯数字。要求支持:
    • 基本数字:零、一、二、三、四、五、六、七、八、九
    • 单位:十、百、千、万、亿
    • 示例:”一百二十三” → 123,”三千五百万” → 35000000,”四十五” → 45
  2. 数据清洗:读取CSV数据,删除包含缺失值的行。
  3. 应用转换:使用 apply 方法将转换函数应用到”合同金额(中文)”、”实际支出(中文)”、”工期(中文)”、”参与人数(中文)”四列,生成对应的阿拉伯数字列:
    • “合同金额(数字)”:仅转换数字部分(去除”元”字后转换)
    • “实际支出(数字)”:仅转换数字部分(去除”元”字后转换)
    • “工期(数字)”:仅转换数字部分(去除”天”字后转换)
    • “参与人数(数字)”:仅转换数字部分(去除”人”字后转换)
  4. 数据类型转换:将新生成的四列数字列转换为 int64 类型。
  5. 计算验证:新增一列”预算结余(数字)”,计算公式为:合同金额 - 实际支出。
  6. 数据保存:将处理后的数据保存为 cleaned_chinese_number_data.csv(不保存索引)。
分享