当前位置: 首页 > news >正文

数据清洗:缺失值、异常值与重复数据处理全解析

数据清洗全解析:从脏数据到高质量数据的实战指南

1. 引言

在数据分析和机器学习的工作流程中,数据清洗往往是最耗时、最容易被忽视,但也是最关键的一步。有人调侃说:“数据科学家 80% 的时间在清洗数据,20% 的时间在抱怨数据。”这句话虽然夸张,却点出了现实。

脏数据如果不经过清洗,模型就可能被误导,最终得到“垃圾进、垃圾出(Garbage in, Garbage out)”的结果。本文将全面介绍数据清洗的核心任务、常见方法、Python 实现、以及结合实际业务场景的案例,让你真正掌握从原始数据到高质量数据的转化过程。


2. 数据清洗的核心任务

数据清洗的目标是 识别并修复原始数据中的质量问题,主要包括以下几个方面:

  • 缺失值:数据为空或不存在。
  • 异常值:明显不符合常理的极端值。
  • 重复数据:同一条信息被多次记录。
  • 不一致数据:单位、编码、命名等不统一。
  • 特殊符号:文本或数值中混入干扰符号。

接下来,我们逐个拆解,并结合 Python 示例和业务场景讲解。


3. 缺失值处理

3.1 产生原因

  • 信息无法获取(如客户没有填写手机号)。
  • 人为遗漏(录入错误)。
  • 属性本身不存在(某些交易没有优惠券信息)。

3.2 常见处理方法

  1. 删除记录

    • 适用场景:数据量充足,缺失比例较小。
    data.dropna()  # 删除所有含缺失值的行
    
  2. 数据插补

    • 均值/中位数/众数填补
    • 最近邻插补(KNN Imputation)
    • 回归插补
    • 插值法(适合时间序列)
    data['age'].fillna(data['age'].median(), inplace=True)
    
  3. 保留不处理

    • 部分算法(如 XGBoost、LightGBM)原生支持缺失值。

3.3 案例:电商评分缺失

在电商评论中,部分用户只写了文字评价,却没有打分。若直接删除这些记录,可能丢掉大量有效文本。通常做法是:

  • 数值型评分用均值填充
  • 文本保留用于 NLP 分析

这样既保证了模型完整性,又保留了用户反馈。


4. 异常值处理

4.1 检测方法

  • 简单统计量:年龄小于 0 岁或大于 200 岁。
  • 3σ 原则:适合正态分布数据。
  • 箱线图(IQR):常用方法。
Q1 = data['salary'].quantile(0.25)
Q3 = data['salary'].quantile(0.75)
IQR = Q3 - Q1
data = data[~((data['salary'] < (Q1 - 1.5*IQR)) | (data['salary'] > (Q3 + 1.5*IQR)))]

4.2 处理方法

  • 删除记录
  • 当作缺失值处理
  • 平均值修正
  • 保留(当异常值本身有业务意义时)

4.3 案例:金融交易异常

在金融反欺诈中,某客户日常消费 500 元,突然出现一笔 50 万元的交易。

  • 如果直接删除,可能错过欺诈信号;
  • 如果标记为异常,并交由风险模型处理,则能有效防范风险。

所以,异常值是否保留,需要结合业务场景判断。


5. 重复数据处理

5.1 检测与处理

  • 哈希比对或逐行比较

  • Pandas 实现:

    data.drop_duplicates(inplace=True)
    

5.2 案例:用户注册重复

某电商平台发现用户表中有同一手机号对应多条记录,原因是用户多次注册。

  • 可以保留最后一次注册信息;
  • 或通过业务逻辑合并历史订单。

6. 不一致数据处理

6.1 常见问题

  • 单位不统一(重量 KG vs 斤)。
  • 编码不一致(地区代码差异)。
  • 命名冲突(“北京大学” vs “北大”)。

6.2 解决方法

  • 标准化转换(如统一换算为 KG)。
  • 规则映射(如地区代码表)。
  • 实体识别(如 NLP 实体消歧)。

6.3 案例:医疗数据不一致

在医院数据中,有的病人性别记录为“男/女”,有的为“1/0”。
统一映射规则:{'男':1, '女':0},避免模型混乱。


7. 特殊符号处理

7.1 常见问题

  • 文本含有干扰符号:¥100, #好评#, ***
  • 数值列被误读成字符串:"1,000"

7.2 处理方法

  • 正则表达式清洗

    import re
    data['price'] = data['price'].apply(lambda x: re.sub(r'[^\d.]', '', str(x)))
    

7.3 案例:社交媒体评论

微博评论中,“好好好好好”并不算有效评价。通常做法是:

  • 压缩重复字符 → “好”。
  • 过滤掉无意义评论 → “顶”“沙发”。

8. 数据清洗流程

  1. 质量分析:用直方图、散点图检查分布。
  2. 规则制定:如年龄 > 199 岁视为异常。
  3. 分批处理:大数据集用 Pandas chunksize 逐块清洗。
  4. 结果验证:对比清洗前后分布,避免引入偏差。

9. 高级清洗技术

9.1 文本数据清洗

  • 去重
  • 连续重复字符压缩
  • 短句过滤
  • 正则提取结构化信息

9.2 自动化清洗流水线

from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import FunctionTransformerdef remove_outliers(x):# 示例函数:去除极端值return x[(x > x.quantile(0.05)) & (x < x.quantile(0.95))]pipeline = Pipeline([('imputer', SimpleImputer(strategy='median')),('outlier', FunctionTransformer(remove_outliers))
])

9.3 数据质量监控

  • 设置规则:缺失率 < 5%,异常率 < 2%。
  • 使用 Great Expectations 进行自动化检测和报警。

10. 业务应用案例

10.1 电商评论清洗

  • 删除无意义评论:"好好好好"
  • 填补缺失评分
  • 检测异常点赞模式(水军识别)

10.2 金融数据清洗

  • 修复交易时间戳乱序
  • 处理股票价格异常跳空
  • 补全客户征信数据

10.3 医疗数据清洗

  • 标准化诊断编码(ICD-10)
  • 合并患者多院区就诊记录
  • 去除误录入的药品剂量(如“10000mg”)

11. 注意事项

  1. 保留原始数据副本,避免不可逆损失。
  2. 重大清洗决策需业务确认(如删除 30% 异常值)。
  3. 记录清洗日志,便于回溯。
  4. 避免过度清洗,不要把异常信号当噪音全部抹掉。

12. 总结

数据清洗是数据分析与建模的地基工程。如果不打好地基,再精美的房子也会塌。本文从缺失值、异常值、重复、不一致、特殊符号等常见问题出发,结合 Python 代码和实际案例,系统性地阐述了数据清洗的思路与方法。

在实战中,你需要根据 业务逻辑 + 数据分布 来制定清洗规则,既保证数据质量,又避免信息损失。只有把脏数据清理干净,我们才能真正进入建模和分析的核心环节。


文章转载自:

http://yKrwm1Bt.qjtbt.cn
http://oDYdyPLe.qjtbt.cn
http://OYxvChul.qjtbt.cn
http://Hub2IF7i.qjtbt.cn
http://L6raM4EH.qjtbt.cn
http://0xt4LrmI.qjtbt.cn
http://HKbhzRrN.qjtbt.cn
http://L6MXaI3e.qjtbt.cn
http://VRfzGcyi.qjtbt.cn
http://pWn9eDE8.qjtbt.cn
http://J79AytUt.qjtbt.cn
http://t3SvkKHS.qjtbt.cn
http://avrJRzS6.qjtbt.cn
http://jJhXaU28.qjtbt.cn
http://X3dJUOw3.qjtbt.cn
http://eRjGA26G.qjtbt.cn
http://bQb2q34V.qjtbt.cn
http://Ltw3lXke.qjtbt.cn
http://l2ODzmWk.qjtbt.cn
http://CuYSP1OE.qjtbt.cn
http://vNdt8msi.qjtbt.cn
http://2kjKyjTt.qjtbt.cn
http://yjl2Yvsa.qjtbt.cn
http://h0aCsPUM.qjtbt.cn
http://NbjEmhqH.qjtbt.cn
http://u6V0n5Vi.qjtbt.cn
http://8mz3RVzA.qjtbt.cn
http://VUDReApR.qjtbt.cn
http://66BAafeY.qjtbt.cn
http://zTTU04s7.qjtbt.cn
http://www.dtcms.com/a/379353.html

相关文章:

  • 审计过程中常见的文档缺失问题如何避免
  • 图像投影(透视)变换
  • Spring Cloud Gateway:下一代API网关的深度解析与实战指南
  • springboot 启动流程及 ConfigurationClassPostProcessor解析
  • git中rebase和merge的区别
  • 66-python中的文件操作
  • 【PostgreSQL内核学习 —— (SeqScan算子)】
  • 资源图分配算法
  • SpringBoot 中单独一个类中运行main方法报错:找不到或无法加载主类
  • 2025全球VC均热板竞争格局与核心供应链分析
  • 用“折叠与展开”动态管理超长上下文:一种 Token 高效的外部存储操作机制
  • 深度解析指纹模块选型与落地实践
  • 从用户体验到交易闭环的全程保障!互联网行业可观测性体系建设白皮书发布
  • grafana启用未签名插件
  • MySQL 数据类型与运算符详解
  • 编程实战:类C语法的编译型脚本解释器(五)变量表
  • 原生js拖拽
  • 数据结构--Map和Set
  • P1122 最大子树和
  • 【3DV 进阶-3】Hunyuan3D2.1 训练代码详细理解之-Flow matching 训练 loss 详解
  • Python写算法基础
  • 数据结构 优先级队列(堆)
  • FunASR GPU 环境 Docker 构建完整教程(基于 CUDA 11.8)
  • 探讨:线程循环与激活(C++11)
  • 拆解格行随身WiFi多网协同模块:智能切网+马维尔芯片,如何实现5秒跨网?
  • 游泳溺水检测识别数据集:8k图像,2类,yolo标注
  • ARM裸机开发:链接脚本、进阶Makefile(bsp)、编译过程、beep实验
  • 开始 ComfyUI 的 AI 绘图之旅-Flux.1图生图之局部重绘(Inpaint)和扩图(Outpaint)(九)
  • 2025.9.11day1QT
  • ubuntu24.04+5070ti训练yolo模型(1)