数据清洗入门:从一份混乱走势表说起
上周帮朋友看一份电商日销表,三千多行,想拉个走势图。结果Excel一画,曲线像心电图,中间还断了两截。仔细看,问题不在分析工具,在数据本身:有几天销量是空的,有几天数字后面跟着“约”字,还有一天写着“618大促,含预售”。这不是个例。很多人做数据观察,第一步就卡在“表能不能直接用”上。数据清洗,说白了就是回答这个问题。
先看缺失。那份表里,四月有六天销量为空。朋友说那几天后台在维护,没采集。空着看似无害,但一旦算周均值,分母就少算了六天,走势会被拉高。更隐蔽的是用0填充——销量为0和没记录是两回事。我的习惯是:先标缺失比例。单列缺失超过15%,就得问来源;低于5%,可以按前后三天均值补,但要在表里留一列标记“已补”,方便回头查。
再看异常值。同一份表,5月12日销量是平日的四十倍。朋友第一反应是爆单,查了才知道是运营把“加购数”误填进了“销量”列。异常值不一定要删,但一定要解释。常用的判断是看偏离中位数的倍数,超过三倍就拎出来单独看。还有一类异常是格式异常,比如“1,234”和“1234”混排,导入时一个变文本一个变数字,走势图直接裂开。清洗时统一成数值型,这是最基础的一步。
口径不一更麻烦。那份表里,有的行是“支付订单”,有的行是“创建订单”,混在一起算日销,走势自然忽高忽低。数据清洗里有个笨办法但有效:把所有列名和取值列一遍,看看同一个指标有没有两种叫法。比如“销售额”和“成交额”,如果定义不同,就得拆成两列。这一步花时间,但省下来的返工更多。我见过一个团队,因为没对齐口径,做了三个月的预测模型,最后发现训练集和测试集根本不是一回事。
清洗的顺序也有讲究。一般先处理结构问题,比如合并单元格、多表头;再处理内容问题,比如缺失、异常、重复;最后做一致性检查,比如日期格式、单位统一。顺序反了会白干。举个例子,如果先补了缺失值,后来才发现那几行是重复记录,补进去的数就得重来。我自己的习惯是:清洗前先复制一份原始表,所有操作在新表上做,每一步留一列备注。这样出了问题能回滚,也方便别人复核。
有人觉得清洗是脏活,不如直接上模型。但数据观察做久了会发现,清洗本身就在产出判断。比如你发现某列缺失集中在周末,那可能不是采集故障,而是业务节奏问题;异常值集中在促销日,那说明数据没坏,是真实波动。这些判断会直接影响后续的走势解读和预测方向。一份清洗干净的表,画出来的趋势线往往比复杂模型更说明问题。
入门阶段,不用追求一步到位。先把缺失、异常、口径这三关过了,表就能看。工具上,Excel的筛选和分列够用,Python的pandas也就几行代码。关键是养成习惯:拿到数据先别急着算,花十分钟看看它长什么样。数据清洗不是终点,它是让观察站得住脚的那一步。下次你拉走势图之前,不妨先问一句:这张表,洗干净了吗?