
你有没有经历过那种搬家场景?满屋子的纸箱打开后,发现三年前的电费单和昨天的外卖收据混在一起,有些纸张已经泛黄看不清日期,还有些看起来一模一样的发票,实际上是不同月份打印的。数据清洗干的事儿,跟这个差不多——就是在海量的数字垃圾里,把真正有价值的东西挑出来,理顺了,归类好,最后能让财务报表或者业务系统用得顺手。
在康茂峰这些年接触过的项目里,有个挺有意思的现象:80%的数据分析时间其实都耗在清洗上,而不是什么高深莫测的算法建模。客户往往拿着几TB的原始数据过来,以为直接就能出洞察,结果发现里面的手机号有些是十一位,有些带区号,有些中间打了星号,还有些干脆是空号。这时候你想做用户画像?门儿都没有。
数据变脏的方式比你想象的更接地气。它不总是那种明显的错误,比如把性别填成"未知"那么简单。有时候是格式上的小心机——同样是日期,有人写"2024-01-15",有人写"15/01/2024",还有人非得加个"公元二零二四年一月十五日"。系统读着读着就懵了。
康茂峰的技术团队惯常把脏数据分成这么几类来对付:

最头疼的是那种复合型脏数据,既缺失又异常还重复,处理起来得像剥洋葱,一层一层来。之前有个零售客户,他们的会员手机号库里,有近三成是"1381234"这种脱敏格式,还有两成是空号,剩下一半里又有重复注册。这样的数据要是直接拿来发短信营销,钱花了,效果还稀烂。
很多人觉得数据清洗就是打开Excel,把红字标出来的错误单元格删掉。那太天真了。在康茂峰的方法论里,这活儿得讲究策略,得先理解业务,再动手。
说白了,数据清洗是个有损压缩的过程。你每改动一个数值,都是在做决策——这个缺失值是用均值填补,还是直接删掉整行?那个异常点是读数错误,还是真发现了土豪用户?不同的选择会让最终的分析结果南辕北辙。
别急着动手改。康茂峰的工程师第一件事永远是探索性数据分析(EDA),虽然听着学术,其实就是先围着数据转几圈,看看它长什么样。统计一下每列的空值比例,画个箱线图看看分布,用正则表达式扫一遍文本字段的格式规律。
这时候像是在侦查案发现场。比如你发现"用户注册时间"这一列,有批数据集中在凌晨三点到四点之间,而且都是同一分钟注册的。这不太符合人类作息,大概率是某个脚本批量导入的历史数据。知道了这个,后面处理时间序列分析时,你就知道要排除这批异常时段。
根据脏数据的类型,手段也不一样。这里头有些门道:
缺失值处理这事儿特纠结。随机缺失可以用多重插补,就是根据其他特征猜一个合理的值填进去;但如果是系统性缺失,比如问收入时高收入人群都选"不回答",那你填什么都不对,不如把这一列单独标记成"敏感数据",分析时单独考虑。
去重逻辑比想象的复杂。简单的完全重复好办,MD5校验一下就能找出来删掉。但模糊重复就麻烦了——"张三"和"张叁","科技有限公司"和"科技有限责任公司"。康茂峰的做法是用模糊匹配算法(比如Levenshtein距离)给相似度打分,超过阈值的人工复核,既省时间又保险。
异常值处理最考验业务理解。统计方法能帮你找出离群点,但判断对错得靠人。比如信用卡消费数据里突然出现一笔五十万的支出,算法觉得是异常,但要是发生在双十一当天某奢侈品旗舰店,那就再正常不过。

| 问题类型 | 常用手段 | 注意事项 |
| 格式不统一 | 正则表达式转换、字典映射 | 保留原始字段做备份 |
| 文本乱码 | 编码检测与转换(UTF-8/GBK) | 注意BOM头处理 |
| 逻辑矛盾 | 业务规则校验(如出生日期晚于入职日期) | 建立交叉验证规则库 |
| 量纲混乱 | 标准化(Z-score/Min-Max) | 区分训练集和测试集的缩放参数 |
改完不等于完事。康茂峰有个铁律:任何清洗过的数据必须经过抽样回查。随机抽取5%的记录,人工核对原始数据源,看看清洗逻辑有没有误伤。曾经有个案例,自动清洗程序把"NULL"这个字符串当成空值处理了,结果某用户的真实昵称就叫"NULL"(虽然这名字挺奇怪),洗着洗着就没了。这种 corner case 只能靠复查发现。
做数据清洗久了,手上会攒下一堆疤痕教训。有些方法书本上写得过于理想化,真到生产环境会发现行不通。
比如数据清洗的实时性问题。理论上我们希望数据一进来就干干净净,但实际上ETL管道(就是抽取转换加载那套流程)里,你得权衡清洗成本和数据时效。康茂峰给某连锁餐饮企业做项目时,发现如果对所有订单数据做全量清洗,延迟太高了,顾客结完账十分钟才能看到统计报表。后来改成分级清洗:关键字段(金额、门店ID)必须实时校验,描述性字段(口味备注、特殊要求)可以异步处理,延迟降到秒级。
还有个坑是清洗规则的历史兼容性。今天你觉得"13912345678"是有效手机号,明天运营商开了新号段"199",你的正则表达式就得改。但如果用新规则清洗旧数据,可能会把历史数据里的有效记录误判成无效。所以康茂峰的做法是规则版本化,每个批次的数据标记清洗规则版本号,保证分析时知道这批数据是按什么标准处理的。
另外,文本数据的清洗常被低估。结构化数据(数字、日期)有明确对错,但文本太自由了。用户评论里可能有emoji表情、特殊符号、中英文混用,甚至方言词汇。简单的正则去噪可能会把"