“为什么这样完美的分析模型,得出的结论却偏离实际?”这是我身边一些搞数据的同行经常问的问题。
其实说白了,这个问题可能不是出在模型本身,而是在输出模型的“原材料”——数据出了问题。
所以说数据清洗是件不可或缺的过程,把数据清洗做好了,数据质量就上来了,分析结果也就准确了。如果没有数据清洗,那么后续的分析就像在沙子上盖高楼,地基不稳极容易倒塌。
本文就从数据清洗的几个要点入手,来讲讲数据清洗到底需要洗什么。
要点一:了解手头上的数据
在动手清洗之前,最重要的一步是什么?是彻底地了解你手头的数据。
你可能会急着去处理看到的第一个问题,但如果没有全局观的操作,往往是盲目的。
具体要怎么做?
- 看规模: 数据有多少行、多少列?可以先用表格工具看一眼,心里有个底。
- 懂含义: 每一列到底代表什么?是用户ID、订单金额还是注册日期?如果含义不清,后续清洗就失去了方向。
- 预览内容: 随机看一些数据,比如前几行、后几行,或随机抽样,看这些数据是说明什么的。
- 查类型: 每一列的数据类型是什么?是整数、小数、文本还是日期?
说白了,这一步的目的是发现问题所在,比如发现“金额”列的数据类型是“文本”,而不是“数字”那里面很可能混入了非数字字符。
你懂我意思吗?先做好诊断,能为你后面节省大把时间。
要点二:处理缺失值
当我们对数据有了初步了解,最常遇到的第一个大坑就是缺失值。
很多新手的第一反应是:找到它们,然后删掉。这听起来很痛快,但我想告诉你,这往往是下策,因为随意删除会损失信息量,甚至引入偏差。
那么,正确的思路是什么?是判断为什么缺失,再决定如何处理。
- 分析缺失的原因:
- 完全随机缺失: 缺失与否和任何因素都无关。比如,问卷中有人就是忘了填年龄。
- 随机缺失: 缺失与已观察到的其他变量有关。如高收入人群可能更不愿意填写“收入”栏。
- 非随机缺失: 缺失与这个变量本身有关。比如说,对生活不满意的人,可能不填写“满意度”调查。
- 选择合适的处理方式:
- 删除: 仅当缺失量非常小,比如缺失量<5%,且确实是完全随机缺失时,才考虑删除整行。如果某一列大部分都缺失,也可考虑删除整列。
- 填充:
a统计值填充: 对数值型数据,用均值、中位数填充。中位数对异常值不敏感,通常更稳健。
b特定值填充: 对文本型数据,用“未知”、“暂无”等标签填充。
c模型预测填充: 用其他完整的列作为特征,构建模型预测缺失值。此法更复杂,但更科学。
在FineDataLink里,我们可以设置新增字段来对数据进行填充。
我一直强调,处理缺失值的关键在于思考和判断, 这个思考过程本身,就能让你对业务有更深的理解。
要点三:处理重复数据
解决了缺失值,我们接下来要找到重复数据。重复记录会让分析结果失真,比如同一笔订单被记录两次,会导致销售总额虚高。
怎么找到重复值? 可以使用函数识别和删除完全重复的数据。
但要注意: 有些数据看起来重复,但却是有用的。
举个例子,同一个用户在不同时间下了两笔一模一样的订单,这不能直接算重复,因为这可能是用户买了两次同样的东西。
所以,处理重复数据时,一定要结合业务逻辑。 最好的办法是依据唯一标识符,比如订单ID去重,而不是简单地比较所有字段。
要点四:处理格式不一致
如果说前面几步处理的是数据有和无的问题,那么这一步处理的就是数据乱的问题。
同一份数据里,同样的内容可能有多种表达方式,这是最考验细心的地方。
- 文本格式乱象:比如“北京”、“BeiJing”都指同一个地方,英文大小写书写混乱。那么我们可以: 统一进行大小写转换、字符串替换、建立标准字典进行映射。
- 日期格式混乱:比如 “01/01/2023”, “2023年1月1日”表达意思都是一样的,解决方法:可以使用函数强制转换为统一格式。
- 数值格式不统一:比如单位不统一:“1kg” 和 “1000g”。需统一到标准单位。
在这里可以在FineDataLink设置过滤条件,一键处理数据格式不同的问题。
简单来说,格式不一致是数据合并和计算的主要障碍之一。 提前立好规矩,后续工作才能顺畅无阻。
要点五:处理异常值
规矩立好了,我们再来看看那些特立独行的数据——异常值。它们明显偏离大多数数据的正常范围,比如年龄列里的“200岁”,或金额列里的“-100元”。
- 怎么发现:
- 描述性统计: 查看最大值、最小值。
- 可视化: 箱线图、散点图能非常直观地展示出离群点。
- 业务逻辑判断: 比如,客单价正常在100-500元,出现80元订单可能是优惠券,需要根据业务知识判断。
- 如何处理:
- 修正: 判断是录入错误,就修正。
- 删除: 如果确认是无效数据且量少,可删除。
- 保留并标记: 如果无法断定是错误,更稳妥的做法是保留它,并创建一个新字段进行标记,这在后续建模时可能成为有用特征。
这里要注意,异常值不一定是错误,它可能隐藏着重要的业务信号。 粗暴删除可能会让你错过关键发现。
要点六:转换数据类型
现在,数据看起来干净多了,但我们还要确保计算机能正确理解它们,这一步必须明确知道每个数据的类型才能进行计算。
常见问题与解决:
- 数字被存为文本: 比如包含了货币符号或千分位符,需要先移除非数字字符,再转换为数值型。
- 日期被存为文本: 这是最高频的错误之一。必须用函数强制转换,否则无法计算日期差、无法按时间排序。
我们可以利用FineDataLink,使用“数据转换”中的“SAP ERP输入”就能进行数据类型转换。
说白了,这一步是后续所有数学运算的基石,必须确保准确无误。
要点七:验证数据关系与逻辑一致性
这是最体现专业度的最后一步:逻辑一致性验证。你要检查数据内部是否符合常理和业务规则。
- 跨字段逻辑检查:比如“省份”对应的是省,而不是城市
- 唯一性约束检查: 主键(如用户ID)是否真的唯一?
- 数据范围检查: 性别是否只有预设选项?
这里可以编写简单的断言语句来自动化这些检查。如果没有通过检查,就说明你的清洗过程还有漏洞。
总结
以上就是数据清洗的七个核心要点,相信你看了这篇文章,对数据清洗的过程有了一个整体的把握,或许你会问:数据清洗的步骤怎么多,要每一步都做吗?
用过来人的经验告诉你,不仅要做,还要认真把这几个步骤做好,这可远比追求复杂的模型更重要。
最主要的是,高质量的数据清洗直接决定了你的分析结论是否准确、可靠,并且还能为你后续的任务中节省出大把时间。