译注:那些高大上的算法实际上并不是数据科学家最耗时的地方。数据分析90%的时间都在数据预处理上面(英文对应说法叫Data munging/wrangling)。
☛** 1. 什么是数据预处理?**
数据预处理指的是如下过程:
采集原始数据
理解原始数据
清洗原始数据
为余下的数据分析或建模做准备
虽然它看起来和数据科学中夺人眼球的地方无关,然而这一步做好了,对后面的建模和数据解读的重要性比用什么算法甚至还重要。
☛2. 先说原则(First thing first)
如果你拿到一个新数据集并打算模拟其中蕴藏的规律,你很容易直接开干,在上面跑算法,然而要克服这种冲动。第一步应该是理解数据本身,先从单变量统计分布的假设开始,如果效果不佳,再逐渐增加分析的复杂度。诸如中位数和箱线图这样的重要统计方法会让你轻松得到关于这些数据的一个大概的分布,这有助于你理解那些在真正分析前要修复的潜在问题。
☛3. 数据类型(Data types)
正确理解你的数据类型是什么和它们应该是什么,这两点相当重要。你可能个人对一些数据特征比较敏感(如账号)。当你认为它是字符的时候,它其实有可能是应该是数值类型,这不一定是说账号002比之账号101和账号001更加相关的情形。类似地,字符类型的数据如果被转换成按序数排列(ordinal scale),你可能会发现隐含其中的顺序规律。举例来说,调研结果一般有“同意”、“中立”、“反对”,这里面有隐藏顺序。最后,如果数据中有日期相关的信息,你就偷着乐吧!能处理和日期相关的时间特征是一项关键技能,它能为你打开通往所有规律的大门。再一次地,这归结为要去理解数据的来龙去脉(context)和探索你手头有的数据。
☛4. 数据缺失(Missing data)
在真实世界中,拥有完整无缺失的数据是黑天鹅事件。数据集的元素缺失会有各种可能性:不适用,没有采集,数据处理中操作失误... 处理数据缺失的第一步是找出缺失的原因,这样才能恰当处理。有时,你的最优选择就是无视缺失的数据;如果这样做,你就得当心给数据分析/模型中引入偏差(bias)的风险。比较推荐的做法是修复缺失的数据点,插入(impute)一些合适的数值(对于连续型数据,中位数就是一个保守的选择)或创造一些特殊值。
☛5. 高基数(High cardinality)
译注:Cardinality此处特指一个有限数据集的元素个数,不混淆时也可简单理解为数据集的大小。
有些范畴的数据源具备我们称为高基数的特征-大量离散数值(邮政编码或占有率)。高基数变量在你分析建模时会很棘手,因为你要冒着小样本集合上过拟合(overfit)的风险。对于数据背后的业务理解会非常重要,这对如何打包(group up)数据会有启迪。例如:如果你知道英国地理边界你将能更好地界定地区的邮政编码。以下图(译注:诺丁汉地区邮政编码图)为例:纯粹基于邮政编码,你会将NG20和NG23放一起,然而从地理上来说NG23和LN6在一起更合适。当然,你并不会总是深刻理解数据背后的信息,这时候就要去寻求更多数据驱动(data-driven)的方法去聚合数据,如聚类(clustering)。
☛6. 异常数据点(Outliers)
不是每个数据点都吻合标准的正态分布(standard Normal distribution)。有时你的数据会包含潜在样本偏差导致的极端数值(extreme values)。以收入为例,如果样本中有几个亿万富翁,均值的偏差会很大(因此看中位数和百分比要比均值靠谱)。理解数据的正常范围和恰当选择上下边界对于数据模拟很重要。
以上我强调了几点在数据预处理需要重点考虑的几个方面。当然这些并不能穷尽数据预处理的所有方面,但关键在于:如果你不能彻底搞懂你的数据,如何相信你分析出来的结论呢?