数据清洗流程梳理
【摘要】 数据清洗是AI训练中确保数据质量的核心环节,其目标是通过系统化流程识别并修正脏数据(如重复、缺失、错误、噪声样本)。以下是分步骤的详细流程,结合工具与案例说明: 一、数据质量评估:明确清洗目标数据探查(Data Profiling)统计指标分析:计算每列的缺失值比例、唯一值数量、数据类型分布(如数值型、类别型)。工具:Pandas的describe()、info(),或使用Great Exp...
数据清洗是AI训练中确保数据质量的核心环节,其目标是通过系统化流程识别并修正脏数据(如重复、缺失、错误、噪声样本)。以下是分步骤的详细流程,结合工具与案例说明:
一、数据质量评估:明确清洗目标
-
数据探查(Data Profiling)
- 统计指标分析:计算每列的缺失值比例、唯一值数量、数据类型分布(如数值型、类别型)。
- 工具:Pandas的
describe()、info(),或使用Great Expectations生成数据质量报告。 - 示例:发现某列“年龄”中存在负数或超过150岁的异常值。
- 工具:Pandas的
- 可视化分析:通过直方图、箱线图、散点图识别分布异常(如数值型数据的偏态、类别型数据的长尾)。
- 工具:Matplotlib、Seaborn、Plotly。
- 示例:图像数据中发现大量全黑或全白样本(可能为采集错误)。
- 统计指标分析:计算每列的缺失值比例、唯一值数量、数据类型分布(如数值型、类别型)。
-
定义清洗规则
- 业务规则:根据任务需求制定规则(如分类任务中,标签需属于预定义类别集合)。
- 统计规则:设定阈值(如缺失值比例>30%的列直接删除)。
- 示例:在医疗数据中,规定“血压”值必须在60-200 mmHg范围内,否则视为异常。
二、缺失值处理:填补或删除
-
缺失值统计
- 计算每列缺失值数量及比例(如
df.isnull().sum())。 - 区分随机缺失(MAR)与非随机缺失(MNAR):
- MAR:缺失与数据本身无关(如用户未填写可选字段)。
- MNAR:缺失与数据相关(如高收入人群不愿透露薪资)。
- 计算每列缺失值数量及比例(如
-
处理策略选择
- 删除:
- 删除整行:若缺失值比例高(如>50%)且行数充足。
- 删除整列:若列缺失值比例高(如>70%)或对任务无关(如ID列)。
- 填补:
- 数值型:均值、中位数、众数填补(如用年龄中位数填补缺失年龄)。
- 类别型:众数或新增“未知”类别填补(如用“其他”填补缺失职业)。
- 时间序列:前向填充(FFill)或后向填充(BFill)。
- 模型预测:用KNN、随机森林等模型预测缺失值(适用于复杂关系)。
- 示例:在房价预测中,用同区域房屋面积的中位数填补缺失的“面积”字段。
- 删除:
三、重复值处理:去重与合并
-
重复值检测
- 完全重复:所有字段值相同(如
df.duplicated())。 - 部分重复:关键字段相同(如用户ID相同但其他字段不同)。
- 近似重复:通过文本相似度(如Jaccard、Levenshtein距离)或图像哈希(如pHash)检测。
- 工具:
Dedupe(文本去重)、ImageHash(图像去重)。
- 工具:
- 完全重复:所有字段值相同(如
-
处理策略
- 删除:保留一条记录,删除其余重复项。
- 合并:对部分重复记录,合并关键字段(如取平均值、多数投票)。
- 示例:在电商评论数据中,合并用户ID相同但评论时间不同的多条记录,保留最新评论。
四、异常值处理:识别与修正
-
异常值检测方法
- 统计方法:
- Z-score:适用于正态分布数据,保留
|Z| < 3的样本。 - IQR(四分位距):计算
Q1 - 1.5*IQR和Q3 + 1.5*IQR为边界,超出范围为异常。 - 示例:在收入数据中,用IQR检测到部分样本收入超过100万(远高于99%分位数)。
- Z-score:适用于正态分布数据,保留
- 机器学习方法:
- 孤立森林(Isolation Forest):适用于高维数据,检测离群点。
- DBSCAN聚类:将密度低的点视为异常。
- 业务规则:根据领域知识设定阈值(如年龄>120岁为异常)。
- 统计方法:
-
处理策略
- 修正:用合理值替换(如用中位数替换异常收入)。
- 删除:若异常值比例低(如<1%)且影响模型,可直接删除。
- 保留:若异常值是真实场景(如金融欺诈数据中的极端值),需保留并单独建模。
- 示例:在气象数据中,将温度传感器故障导致的-999℃替换为前一小时的观测值。
五、格式标准化:统一数据规范
-
数据类型转换
- 将字符串类型的数字转换为数值型(如
"123"→123)。 - 将日期字符串转换为标准格式(如
"2023-01-01"→datetime(2023,1,1))。 - 工具:Pandas的
astype()、to_datetime()。
- 将字符串类型的数字转换为数值型(如
-
单位统一
- 数值单位:如将“米”转换为“厘米”(如身高从1.75m → 175cm)。
- 文本编码:统一字符集(如UTF-8),避免乱码。
- 示例:在能源数据中,将所有功率单位统一为“千瓦”(kW)。
-
文本规范化
- 大小写统一:全部转为小写或大写(如
"Apple"→"apple")。 - 去除空格/特殊字符:如
" Hello! "→"hello"。 - 分词与词干提取:对文本数据进行分词(如英文用NLTK,中文用Jieba)。
- 示例:在搜索查询数据中,将
" iPhone 13 "清理为"iphone 13"。
- 大小写统一:全部转为小写或大写(如
六、数据一致性校验:跨字段逻辑检查
-
跨字段约束验证
- 范围约束:如“年龄”需在0-120之间,“体重”需>0。
- 依赖关系:如“已婚”状态需对应“配偶姓名”非空。
- 唯一性约束:如用户ID、订单号需唯一。
- 示例:在订单数据中,检查“订单金额”是否与“商品数量×单价”一致。
-
处理策略
- 修正:根据逻辑关系修正错误(如用“商品数量×单价”覆盖“订单金额”)。
- 标记:对无法自动修正的数据标记为“需人工审核”。
- 示例:在用户注册数据中,若“出生日期”与“年龄”矛盾(如出生日期为2020年但年龄为30岁),则标记为异常。
七、数据清洗后验证:确保质量达标
-
抽样检查
- 随机抽取5%-10%的数据,人工验证清洗效果(如标注错误率应<1%)。
- 工具:使用
Label Studio或自定义脚本生成验证报告。
-
统计指标复核
- 检查缺失值、重复值、异常值比例是否降至可接受范围(如缺失值<5%)。
- 对比清洗前后数据分布(如直方图、箱线图),确保未过度修正。
-
下游任务验证
- 用清洗后的数据训练简单模型(如线性回归、决策树),验证性能提升(如准确率提升5%以上)。
- 若性能未提升,需重新检查清洗规则(如是否误删了有效数据)。
八、数据清洗流程自动化(可选)
-
脚本化清洗
- 用Python/Pandas编写清洗脚本,封装为函数或类(如
class DataCleaner)。 - 示例代码:
import pandas as pd def clean_data(df): # 处理缺失值 df.fillna(df.median(), inplace=True) # 数值列用中位数填补 # 处理重复值 df.drop_duplicates(inplace=True) # 处理异常值(IQR方法) Q1 = df.quantile(0.25) Q3 = df.quantile(0.75) IQR = Q3 - Q1 df = df[~((df < (Q1 - 1.5 * IQR)) | (df > (Q3 + 1.5 * IQR))).any(axis=1)] return df
- 用Python/Pandas编写清洗脚本,封装为函数或类(如
-
工作流工具
- 使用
Airflow或Kubeflow Pipelines编排清洗任务,支持定时运行与错误重试。 - 示例:每日自动爬取数据后,触发清洗流程并存储至数据库。
- 使用
九、数据清洗案例:电商用户行为数据
-
原始数据问题
- 缺失值:30%的“用户年龄”字段为空。
- 重复值:5%的订单记录因系统故障重复生成。
- 异常值:“购买金额”中出现负数(退款未正确标记)。
- 格式问题:“购买时间”字段混用
YYYY-MM-DD和MM/DD/YYYY格式。
-
清洗步骤
- 缺失值:用同用户群(如同城市、同性别)的年龄中位数填补。
- 重复值:根据“订单ID+用户ID”去重,保留最新记录。
- 异常值:将负金额标记为“退款”,并从“购买金额”中排除。
- 格式问题:统一转换为
datetime类型,并提取“小时”字段用于分析购买时段。
-
效果验证
- 清洗后数据量减少8%(删除重复与异常),关键字段缺失率降至2%。
- 用清洗后数据训练推荐模型,点击率提升12%。
总结:数据清洗核心原则
- 先探查后清洗:通过统计与可视化全面了解数据问题。
- 自动化与人工结合:用脚本处理大规模数据,人工复核关键样本。
- 可追溯性:记录清洗规则与操作日志,便于问题回溯。
- 迭代优化:根据模型反馈持续调整清洗策略(如新增异常检测规则)。
通过系统化清洗流程,可显著提升数据质量,为AI模型训练提供可靠基础。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)