📚 数据清洗与特征工程 实战·第一课

🧼 数据清洗概述 ✨ 定义 · 重要性 · 常见问题

📖 1. 数据清洗的定义

核心概念 数据清洗(Data Cleaning)是指检测、纠正或删除数据集中不准确、不完整、不合理或重复的记录,使数据干净、一致、可用的过程。它是数据预处理的关键步骤,也是特征工程的基石。

原始数据 数据清洗 干净数据

简单来说:垃圾进,垃圾出 —— 没有高质量的数据清洗,再优秀的模型也无法产生可靠的结果。

⭐ 2. 数据清洗的重要性

数据清洗直接影响数据分析与机器学习的质量。以下是清洗带来的核心价值:

  • 提升模型准确率 — 消除噪声和异常,使模型学习到真实模式。
  • 避免偏差与错误 — 不一致数据会导致统计谬误,清洗后结论更可靠。
  • 节省存储与计算 — 去除重复值、无效记录,加速训练。
  • 增强数据可解释性 — 干净的数据更容易可视化与洞察。
维度清洗前清洗后
准确率78% (含缺失/异常)94% (清洗后)
训练时间45秒 (含重复)28秒 (去重后)
可解释性混乱,难以理解清晰,趋势明显

⚠️ 3. 常见数据质量问题

数据清洗主要针对以下四类问题:缺失值 异常值 重复值 不一致数据

缺失值 NaN / NULL 异常值 离群点 重复值 重复记录 不一致 格式/单位冲突
问题类型描述常见场景清洗策略
缺失值 数据集中某些字段为空或不存在 用户未填写年龄、传感器丢包 删除、均值/中位数填充、插值
异常值 数值明显偏离正常分布 收入为负数、年龄200岁 截断、分箱、盖帽法、模型检测
重复值 完全相同的记录出现多次 系统重复导入、用户多次提交 去重(drop_duplicates)
不一致数据 格式、单位、命名不统一 日期格式混用、性别“男/M/1” 标准化、映射、正则转换

🐍 Python 快速处理示例:

# 缺失值处理
df.dropna(subset=['age'])                # 删除缺失行
df['age'].fillna(df['age'].median())     # 中位数填充

# 异常值处理 (IQR)
Q1, Q3 = df['price'].quantile([0.25, 0.75])
iqr = Q3 - Q1
df = df[(df['price'] >= Q1 - 1.5*iqr) & (df['price'] <= Q3 + 1.5*iqr)]

# 重复值处理
df.drop_duplicates(inplace=True)

# 不一致数据 (性别映射)
gender_map = {'男': 'M', 'male': 'M', '女': 'F', 'female': 'F'}
df['gender'] = df['gender'].map(gender_map).fillna('其他')
            

🔄 数据清洗流程一览

缺失值 异常值 重复值 不一致数据

⬆️ 四大问题按顺序清洗,最终获得高质量数据集 ⬆️