简介
在我们了解了业务背景,确定了需求和分析目标以后,我们接下来要面对的,就是数据的探索了。不论数据的形式是直接连到数据库、还是导出的csv、txt、json等格式,当我们把数据加载到我们的分析利器(excel/spss/r/python/matlab)之后,不需要太多时间,我们就能了解到数据的概貌了,比如维度是N * M,以及各个字段的含义等等。
然而,接下来要做的事情,就不是“不需要太多时间”能够解决的了。数据建模之前(数据挖掘、机器学习等)超过一半的时间,都是在进行数据探索。毕竟这几个领域中都流传着一句话“rubbish in rubbish out”。所以,这样做也是值得的。
个人的理解,数据探索分为两个大部分:
- 1,数据的预处理
- 2,数据的统计分析
本文主要先讲一下数据的预处理问题。
正文
数据预处理的主要内容包括
- 数据清洗,处理“脏乱差”的数据
- 数据集成,把不同来源、格式、特点性质的数据合并到一起
- 数据变换,处理数值计算、属性的映射以及维度空间的变换
- 数据规约,在尽可能保持数据原貌的前提下,最大限度地精简数据量
数据预处理的顺序
- 数据清洗与数据集成并没有严格意义上的先后顺序,究竟是先集成再清洗、还是先清洗再集成可以依照实际情况而定。因为数据集成以后,可能还会涉及到数据清洗的部分环节。
- 数据变换与数据规约一般在数据清洗以及集成以后,且两者在处理过程中也是相辅相成的,有的数据规约方法也需要以数据变换为前提。
一,数据清洗,清洗了什么?
从五个方面来进行数据的清洗,个人总结抽象概况为SINCE原则
(看了很多市场营销的书,歪果仁都愿意把一些原则弄成个易记的单词,于是此处提升一下B格).
1,Simple 简单的:去除冗余与重复
- 重复即100%的冗余,一般删除即可
- 而冗余需要提取主要信息,去除次要信息
- 有些情况还会需要信息融合
举个栗子:
有一个公司引入了供应链金融,于是一个人想要买东西,申请不同渠道的消费贷款时,就会得到不同渠道反馈的对该消费者评级。
假设有甲金融机构,乙金融机构,丙金融机构,
甲反馈结果是对用户进行 A,B,C的评级;
乙反馈结果是对用户进行 0~700分的评级;
丙反馈结果是对用户进行 优秀,良,中,差的评级;
显然,从信息上看,这三个结果的价值是趋同的,合并成一个维度会比留着三个要精简。由于每个渠道的评级结果不同,最终,我们可能合并结果时,就变成了二元变量了,即,好与其他,坏与其他。
2,Integral 完整的:缺失值的处理
- 缺失值的处理,需要认真对待
缺失的数据如果占总体比较少,是最好操作的了,可以直接删除。
然而,现实情况下,往往缺失的数据占比很多,缺失的原因又千奇百怪,又的甚至无法知道原因。所以,缺失的处理是非常复杂的,需要单独摘出一章,将在第六章给出对应的方法。
3,Normal 标准的
- 名称、类型、单位、格式、长度、缩写、等要符合统一的标准
- 范围要在业务或常识的标准的值域内
- 最终的数据大都需要进行标准化处理
举个栗子:
日期,有的用’Mon’,有的用’Monday’,有的用’M’,就需要统一。
年龄出现了负数,就需要处理。
最后,在把数据放进模型之前,需要进行标准化的处理,排除量纲的影响,离散变量还要变成dummy化进行处理。
4,Consistent 一致性:不同数据源的数据出现差异,以哪个为准;指标不同,含义相同,或反过来,以哪个为准。
- 有冲突的情况下,需要修正逻辑与口径
这一点,就需要介入人们的主观判断,哪个数据源是最靠谱的,就以哪个为准。
举个栗子:
数据源A中,标记手机号0061的用户为男性,18岁;
而数据源B中,标记手机号0061的用户为女性,36岁;
到底以哪个为准,就需要查找具体的原因了。
5,Effective 有效的:处理错误与异常
- 错误:拼写、属性、编码、格式以及依赖关系不匹配等错误
- 异常:噪音 vs 异常值 vs 离群点
数据操作的过程中,大都需要人为的介入,只有有人参与,就容易出错。
比如一张门店的表里面有城市编码从 1-10,而城市编码名称的映射表中,只有2-11,那么这种匹配就出现了错误。
关于异常,最简单的方式是通过箱线图判断得到。
超过上下分位数 ± IQR1.5倍的点,一般即认为是异常的。
二,数据集成
在把各数据源合并到一起的时候,也容易出现两个问题
- 1,属性冗余,就如简单原则中举的例子一样。
- 2,数据实体出现冲突,就如在一致性原则中的例子一样。
三,数据变换
原始数据是可以被加工成更有意义的数据的,加工后的指标可以与目标值进行分析,看看哪种方式更有效。具体变换的方式有下面四点:
- 1,维度,是否需要降维,与数据规约相同
- 2,属性,数值型属性是否需要拆分成离散的更好
- 3,函数变换,x与y之间的关系是否有,x与log(y)之间的关系更明显
- 4,聚合,原始数据与其对应的频率、频次、求和、平均等聚合指标相比哪种更有效
四,数据规约
个人理解,规约需要重点解决的其实是"维度灾难"问题。
想象一下,我们的样本数量是有限的,当我们不断的扩充维度(对于离散变量dummy化以后就相当于增加了n-1个变量),我们的变量构成空间将越来越大。这个空间内的样本数量是不变的,这就意味着,样本的分布越来越稀疏。
我们取得的目前的样本,仅相当于在这个空间中的一个超平面上的样本点,然而随着空间维度的增加,这个超平面的情况又如何能够代表总体空间中的情况呢?
所以,数据处理阶段我们需要降维(参见第五章),模型生成阶段我们需要筛选特征子集(参见第四章)
主成分分析是最常用的手段,还有一些其他的算法可以帮助我们挑选特征,我们可以参考第五章的内容。