如何系统化清理数据以提高数据质量?

  清理数据是数据预处理的关键步骤,目的是提高数据质量,确保后续分析和建模的准确性。以下是系统化的清理流程及方法,结合常见场景和注意事项:


1. 理解数据(探索性分析)

  • 目标:初步了解数据结构、分布和潜在问题。
  • 方法
    • 查看数据概览:使用 df.head()df.info()(Python/pandas)查看字段类型、缺失情况。
    • 统计描述df.describe() 分析数值型数据的分布(均值、标准差、极值)。
    • 可视化检查:直方图、箱线图(检测异常值)、热力图(缺失值分布)。

2. 处理缺失值

  • 常见原因:数据未采集、传输错误、人为遗漏。
  • 处理方法
    • 直接删除
      • 删除缺失率高的列(如缺失 >70%):df.drop(columns=['列名'])
      • 删除含缺失值的行:df.dropna()(慎用,避免丢失过多数据)。
    • 填充缺失值
      • 固定值填充:用0、均值、中位数、众数填充。
        df['列名'].fillna(df['列名'].mean(), inplace=True)
      • 前后值填充:时间序列数据常用 ffillbfill
      • 模型预测填充:使用KNN、随机森林等算法预测缺失值(如sklearnKNNImputer)。
    • 标记缺失值:将缺失作为一个特殊类别(如“Unknown”)。

3. 处理重复数据

  • 检查重复df.duplicated() 识别完全重复的行。
  • 处理方式
    • 删除重复值:df.drop_duplicates()
    • 注意:确认是否因数据采集错误导致重复(如订单重复提交)。

4. 处理异常值(离群值)

  • 检测方法
    • 统计方法
      • Z-Score:绝对值 >3 视为异常。
      • IQR法:超过 [Q1-1.5IQR, Q3+1.5IQR] 的范围。
    • 可视化:箱线图、散点图。
  • 处理策略
    • 删除df = df[(df['列名'] < upper_bound) & (df['列名'] > lower_bound)]
    • 替换:用中位数或分箱处理(如将年龄分为“0-18, 19-30”等区间)。
    • 保留:在欺诈检测等领域,异常值可能是关键信息。

5. 数据格式化与标准化

  • 统一格式
    • 日期格式:转换为 datetime 类型(pd.to_datetime())。
    • 文本格式:统一大小写、去除空格、单位统一(如“kg”转“千克”)。
  • 标准化/归一化(适用于机器学习):
    • 标准化(Z-Score)(x - mean)/std,适用于数据方差较大时。
    • 归一化(Min-Max):缩放到 [0,1],适合图像处理等场景。
    • 工具:sklearn.preprocessing.StandardScalerMinMaxScaler

6. 文本数据清洗

  • 常见操作
    • 去除特殊字符:使用正则表达式剔除URL、标点等。
      df['text'] = df['text'].str.replace(r'[^\w\s]', '', regex=True)
    • 停用词过滤:移除“的”、“是”等无意义词(中文可用jieba分词 + 停用词表)。
    • 分词与词干化:英文可用NLTK的PorterStemmer,中文用jieba

7. 验证数据逻辑

  • 业务规则校验
    • 数值范围:如年龄不应 >150。
    • 时间逻辑:订单日期不能晚于发货日期。
    • 外键约束:用户ID需在用户表中存在。
  • 处理方法:编写条件语句筛选错误数据,或使用断言(assert)检查。

8. 自动化工具推荐

  • 数据处理库
    • Python:pandasnumpy(基础处理),pyjanitor(简化清洗代码)。
    • 大数据:PySpark(分布式处理)。
  • 数据质量工具
    • Great Expectations:定义数据质量规则并自动验证。
    • OpenRefine:交互式清洗工具(适合非编程用户)。

9. 迭代与验证

  • 交叉检查:清理后重新运行 df.info()、可视化,确认无残留问题。
  • 业务方确认:关键字段(如金额、日期)需与业务团队核对逻辑。

示例场景

  假设清理电商订单数据:

  1. 缺失值:填充“用户所在城市”为“未知”。
  2. 异常值:删除“订单金额”为负数的记录。
  3. 重复值:保留最新订单,删除重复订单ID。
  4. 格式化:将“下单时间”从字符串转为 datetime 类型。

注意事项

  • 保留原始数据:清理前备份,避免不可逆操作。
  • 权衡利弊:处理缺失/异常时需考虑数据量损失与业务需求。
  • 文档记录:记录清理逻辑,便于后续追溯。

  通过系统化清理,数据将更干净、一致,为后续分析和建模奠定可靠基础。

留言与评论(共有 0 条评论)
   
验证码: