3、数据预处理实战:清洗、去重、缺失值处理、异常值检测,以及标准化和归一化的具体方法
在形象数据实战项目中,数据预处理往往占据整个分析流程 60% 以上的时间。原始数据通常来自多个渠道(问卷、传感器、业务系统、爬虫),不可避免地存在格式不一致、重复记录、字段缺失、极端离群值以及量纲差异等问题。若直接将这些“脏数据”送入模型或可视化看板,轻则导致统计指标失真,重则使聚类、回归等算法完全失效。本章将围绕数据清洗、去重、缺失值处理、异常值检测、标准化与归一化五个核心环节,结合形象数据(如身高、体重、体脂率、肤色RGB值、穿搭风格评分等)展开实战拆解。
3.1 数据清洗:从“能用”到“好用”的第一道关口
核心原理
数据清洗的目标是修正原始数据中的格式错误、单位不统一、编码混乱、文本杂质等问题。形象数据中常见的问题包括:身高字段混入“175cm”“1.75m”“175”等多种写法;肤色RGB值出现“255,255,255”与“#FFFFFF”混存;穿搭评分字段包含“好”“8分”“8.5”等非结构化文本。清洗的本质是建立统一的数据字典和格式规范,让后续处理能够基于一致的数据类型和语义进行。
判断方法与操作流程
- 字段类型检查:使用
df.dtypes或info()查看各列类型,将“身高”转为 float,“性别”转为 category,“评分”转为 int 或 float。 - 单位统一:建立单位映射表,如将“m”统一转为“cm”,将“kg”与“斤”统一为“kg”。
- 文本清洗:去除首尾空格、全角半角转换、正则表达式提取关键数字(如从“身高175cm”中提取175)。
- 格式标准化:日期统一为 YYYY-MM-DD,颜色值统一为 RGB 三元组或 HEX 字符串。
案例拆解:形象评分表清洗
某时尚品牌收集了 5000 条用户穿搭评分数据,原始“评分”列包含“8分”“8.5”“很好”“A”“9”等混合值。通过正则提取数字部分,将“很好”映射为 9(基于预设规则),将“A”映射为 10,最终统一为 0-10 的浮点数。清洗后数据量从 5000 条变为 4982 条(18 条因无法解析被剔除),评分分布更接近正态。
3.2 去重:识别并消除“看似不同实则相同”的记录
核心原理
去重分为完全去重(所有字段完全相同)和部分去重(基于关键字段判断重复)。形象数据中,同一用户可能因多次提交产生多条记录,或不同渠道导入的数据存在冗余。去重的关键在于定义“重复”的判定规则,避免误删有效数据。
判断方法与操作流程
| 去重类型 | 判定字段 | 适用场景 | 保留策略 |
|---|---|---|---|
| 完全去重 | 所有字段 | 系统重复导出 | 保留第一条 |
| 关键字段去重 | 用户ID + 日期 | 同一用户同日多次提交 | 保留最新或评分最高 |
| 模糊去重 | 姓名 + 手机号(相似度) | 不同渠道录入差异 | 人工审核或保留置信度高者 |
# Python示例:基于用户ID和日期去重,保留最新记录
df = df.sort_values('submit_time').drop_duplicates(
subset=['user_id', 'record_date'], keep='last'
)
案例拆解:多渠道数据合并去重
某形象分析项目合并了线上问卷(3200条)和线下门店采集(1800条),发现 600 条疑似重复。通过比对“手机号+姓名”完全匹配,确认 450 条重复;另有 150 条手机号相同但姓名不同,经人工抽样发现是夫妻共用手机号,属于有效数据。最终保留 4550 条唯一记录,去重率 9%。
3.3 缺失值处理:不盲目填充,也不轻易删除
核心原理
缺失值处理需先判断缺失机制:完全随机缺失(MCAR)、随机缺失(MAR)、非随机缺失(MNAR)。形象数据中,体脂率字段常因设备故障缺失,肤色值可能因用户拒绝填写而缺失。处理策略取决于缺失比例、字段重要性和业务含义。
判断方法与操作流程
- 缺失比例 < 5%:可直接删除缺失记录,或使用均值/中位数填充。
- 缺失比例 5%-20%:使用回归插补、KNN插补或多重插补。
- 缺失比例 > 20%:考虑删除该字段,或将其转化为“是否缺失”的二元特征。
- 业务规则填充:如“穿搭风格”缺失时,可根据“场合”字段推断。
案例拆解:体脂率缺失的三种处理对比
某健康形象数据集包含 10000 条记录,体脂率缺失 12%。分别采用均值填充、中位数填充和 KNN 插补(k=5),对比填充后数据的标准差和分布形态。结果显示:均值填充使标准差从 5.2 降至 3.8,分布明显收窄;中位数填充对偏态分布更稳健;KNN 插补保留了原始分布形态,但计算成本较高。最终选择 KNN 插补,并在后续建模中验证了其效果最优。
3.4 异常值检测:区分“噪声”与“真实信号”
核心原理
异常值检测的目标是识别显著偏离正常范围的数据点。形象数据中,身高 250cm、BMI 值 45、肤色 RGB 值为负等明显异常,通常源于录入错误或测量故障。但某些“异常”可能是真实存在的极端个体(如职业篮球运动员身高 220cm),需结合业务场景判断。
判断方法与操作流程
| 方法 | 原理 | 适用场景 | 阈值 |
|---|---|---|---|
| 3σ 原则 | 超出均值±3倍标准差 | 近似正态分布 | 99.7% 置信区间 |
| IQR 箱线图 | 超出 Q1-1.5×IQR 或 Q3+1.5×IQR | 偏态分布 | 1.5 倍四分位距 |
| Z-score | 标准化后值 > 3 | 标准化后数据 | 3 |
| 业务规则 | 超出物理/逻辑范围 | 身高、体重等 | 自定义 |
案例拆解:身高异常值的处理闭环
某服装定制平台收集用户身高数据,发现 12 条记录超过 230cm。初步判定为异常,但进一步核查发现其中 3 条来自职业篮球运动员,属于真实数据。处理策略:将 9 条明显录入错误(如 1750cm)删除,3 条真实极端值保留但单独标记。后续建模时,分别测试“保留”与“剔除”两种方案,发现保留极端值使回归模型 R² 从 0.82 降至 0.79,但业务上更合理,最终选择保留并增加样本量。
3.5 标准化与归一化:消除量纲影响的关键步骤
核心原理
标准化(Z-score)和归一化(Min-Max)是两种最常用的数据缩放方法。标准化将数据转换为均值为 0、标准差为 1 的分布,适合数据近似正态或存在离群点的场景;归一化将数据线性映射到 [0,1] 区间,适合有明确上下界的数据。选择哪种方法取决于后续算法的假设:SVM、K-Means、PCA 等距离类算法对尺度敏感,通常需要标准化;神经网络和深度学习则常用归一化加速收敛。
具体方法与公式
# 标准化 (Z-score)
x_std = (x - mean) / std
# 归一化 (Min-Max)
x_norm = (x - min) / (max - min)
# 稳健标准化(使用中位数和IQR)
x_robust = (x - median) / IQR
案例拆解:形象特征融合前的缩放对比
某形象评分系统需要融合身高(150-200cm)、体重(40-120kg)、肤色亮度(0-255)和穿搭评分(0-10)四个特征。直接使用原始值计算欧氏距离时,身高和体重主导了距离计算,肤色和评分几乎被忽略。经过 Min-Max 归一化后,四个特征权重均衡,聚类结果从 3 个簇变为 5 个更有意义的簇。进一步对比标准化,发现由于肤色亮度分布偏态,标准化后仍存在离群点影响,最终选择 Min-Max 归一化。
3.6 预处理流程的完整复盘与质量验证
核心原理
数据预处理不是一次性操作,而是一个需要迭代验证的过程。预处理完成后,应通过数据质量报告、分布对比、模型效果对比等方式验证预处理的有效性。同时,建立可复用的预处理流水线(Pipeline),确保新数据进入时能自动应用相同的处理逻辑。
质量验证清单
- 清洗后各字段类型是否符合预期?
- 去重后记录数与业务预期是否一致?
- 缺失值填充后分布是否发生显著变化?
- 异常值处理后模型性能是否提升?
- 标准化/归一化后特征方差是否合理?
案例拆解:预处理前后模型效果对比
某形象推荐系统使用逻辑回归预测用户偏好,预处理前准确率为 68%,F1 分数为 0.61。经过完整预处理(清洗、去重、KNN 缺失值填充、IQR 异常值标记、Min-Max 归一化)后,准确率提升至 79%,F1 分数提升至 0.74。进一步分析发现,主要提升来自缺失值填充和归一化,而异常值处理对结果影响较小。