综合

数据清洗的基本流程

时间:2010-12-5 17:23:32  作者:热点   来源:综合  查看:  评论:0
内容摘要:数据清洗这事儿,说白了就是给数据“排雷”。上周我刚处理完一批客户订单,两万行记录里,光是重复的邮箱就占了百分之三——有人把“gmail”拼成“gmial”,有人注册时手滑多打了个点,还有人干脆用公司名

数据清洗这事儿,数据说白了就是清洗给数据“排雷”。上周我刚处理完一批客户订单,本流两万行记录里,数据光是清洗重复的邮箱就占了百分之三——有人把“gmail”拼成“gmial”,有人注册时手滑多打了个点,本流还有人干脆用公司名当邮箱。数据这些脏数据要是清洗直接进分析模型,预测结果能偏到姥姥家去。本流

清洗的数据第一步,永远是清洗先摸清家底。我会先把数据导进工具里,本流看一眼字段类型、数据缺失值比例、清洗唯一值数量。本流比如那个订单表,“客户姓名”字段居然有17种空值写法——空字符串、NULL、“未知”、“N/A”,甚至还有个“不知道”。这哪是数据,分明是考古现场。摸清这些“地层”结构,才能决定下一步怎么挖。

接着处理缺失值,这里头门道挺多。数值型字段,我一般先看分布——如果偏态严重,用中位数填补比平均数靠谱得多。上个月分析用户活跃度,有三分之一的“使用时长”是空的,我一看直方图,好家伙,长尾拖得跟彗星似的,果断用中位数填。但分类字段就不一样了,比如“支付方式”缺失,我宁可单独标一个“未知”类别,也不瞎猜——你永远不知道用户到底用的啥,瞎填等于给自己埋雷。

重复数据是另一座大山。别以为完全重复才算重复,真正的坑是“看起来不一样其实一样”。同一个客户,一条记录写“北京朝阳区”,另一条写“北京市朝阳区”,还有一条干脆只写了“朝阳”。我写了个模糊匹配脚本,把地址标准化后再比对,这才揪出三百多条隐藏的重复记录。清洗完那一刻,感觉像给乱糟糟的房间做了次彻底收纳,每个数据点都有了自己的位置。

格式统一也够磨人的。日期格式五花八门:2024/1/1、2024-01-01、01-Jan-2024,还有中文的“2024年1月1日”。我见过最离谱的是“1/1/2024 上午10:30”,时间还混着中文。统一成ISO标准格式后,排序、聚合、时间序列分析才跑得动。**你要是跳过这步,后面做趋势分析时,数据会按字符串排,1月10日能排到1月2日前面去,画面太美我不敢看。

**

逻辑校验是我最喜欢的一步,因为总能发现些哭笑不得的事。比如有客户的“下单日期”比“注册日期”还早两年——穿越来的订单?还有“年龄”填了180岁的,这老寿星怕是得成精。这些明显违反业务常识的记录,要么删除,要么退回业务方核实。我一般会写几条简单的规则:金额必须大于0、日期不能晚于今天、主键不能重复。跑一遍脚本,异常值就全浮出水面了。

最后一步是留痕。清洗前备份原表,清洗后生成一份报告,记录删了多少行、改了哪些字段、用了什么规则。这不是做给领导看的——三个月后你忘了当时为啥删掉那批“异常值”,回头数据对不上账,哭都来不及。我习惯把清洗脚本存成文件,注释写到能看懂自己写的代码为止。毕竟,数据清洗是门手艺活,工具会更新,但思路和方法论是通用的。下次拿到脏数据,别急着哭,先按这个流程走一遍,你会发现,大部分问题其实都在预料之内。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap