自学教程 学编程从这里开始

数据清洗

数据清洗是数据理解之后、特征工程之前的步骤。原始数据往往存在噪声、缺失、错误、冗余等问题,数据清洗就是按照业务规则,修正或者剔除这些有问题的数据,提升数据集质量,保证后续模型训练稳定、结果可靠。

一、数据清洗主要工作内容

  1. 处理缺失值

    缺失值是最常见的数据问题。不能直接固定一种处理方式,要结合缺失比例和业务含义选择方案:
  • 删除:缺失占比很高,且该字段不是核心特征;或者样本缺失关键标签;
  • 填充数值型:均值、中位数;
  • 填充分类型:众数,或者新增一个“未知”类别;
  • 高级方式:模型预测填充。

注意:随机删除大量样本会改变数据分布,容易引入偏差。

  1. 处理重复数据

    重复分为整行重复、关键字段重复。
  • 完全重复样本:直接去重;
  • 关键字段重复但其他字段不一致:结合业务规则判断保留哪一条,或者标记待核实。
  1. 处理异常值

    异常值是明显脱离正常取值范围的数据。

    常用识别方法:箱线图、3σ原则。

    处理方式:
  • 核查:确认是不是业务真实发生的数据(不要盲目删除);
  • 修正:录入错误的数据进行更正;
  • 截断/缩尾:限制数值上下限;
  • 删除:确认是错误数据时剔除。
  1. 修正格式与逻辑错误
  • 统一字段格式:日期、大小写、单位统一;
  • 校验逻辑矛盾:比如年龄负数、收入为负、时间先后颠倒;
  • 统一文本编码、去除多余空格、特殊符号。
  1. 剔除无关冗余数据

    删除和预测目标无关、完全不具备区分能力的字段,例如唯一ID、日志流水号等无关字段,减少干扰。

二、代码示例(Pandas)

import pandas as pd

df = pd.read_csv("data.csv")

# 1. 查看重复行
print("重复行数:", df.duplicated().sum())
# 删除重复行
df = df.drop_duplicates()

# 2. 缺失值处理
# 中位数填充数值列
df["age"] = df["age"].fillna(df["age"].median())
# 众数填充分类列
df["gender"] = df["gender"].fillna(df["gender"].mode()[0])

# 3. 异常值简单过滤示例(年龄大于120视为异常)
df = df[df["age"] <= 120]

# 4. 文本清洗,去除首尾空格
df["name"] = df["name"].str.strip()

# 5. 重置索引(删除行之后索引会不连续)
df = df.reset_index(drop=True)

三、数据清洗原则

  1. 可追溯:每一步清洗操作最好记录下来,方便复现和排查;
  2. 业务优先:优先看业务含义,而不是单纯依靠统计规则删数据;
  3. 最小改动:能修复就不删除,尽量保留原始样本信息;
  4. 不要泄露测试集信息:清洗规则只从训练集总结,再应用到验证集、测试集。

四、常见误区

  1. 看到缺失值、异常值直接删除;
  2. 清洗训练集和测试集分开写两套逻辑,造成分布不一致;
  3. 清洗过度,把真实但是少数的有效样本当成噪声删掉。

小结

数据清洗的目标:让数据准确、一致、可用。
高质量的数据,远比复杂模型更影响最终效果。

思考题:如果某特征缺失率达到 60%,我们优先考虑填充还是直接删除该字段?

0 条笔记