第1章-数据探索(1)-数据预处理

简介

在我们了解了业务背景,确定了需求和分析目标以后,我们接下来要面对的,就是数据的探索了。不论数据的形式是直接连到数据库、还是导出的csv、txt、json等格式,当我们把数据加载到我们的分析利器(excel/spss/r/python/matlab)之后,不需要太多时间,我们就能了解到数据的概貌了,比如维度是N * M,以及各个字段的含义等等。

然而,接下来要做的事情,就不是“不需要太多时间”能够解决的了。数据建模之前(数据挖掘、机器学习等)超过一半的时间,都是在进行数据探索。毕竟这几个领域中都流传着一句话“rubbish in rubbish out”。所以,这样做也是值得的。

个人的理解,数据探索分为两个大部分:

  • 1,数据的预处理
  • 2,数据的统计分析

本文主要先讲一下数据的预处理问题。

正文

数据预处理的主要内容包括

  1. 数据清洗,处理“脏乱差”的数据
  2. 数据集成,把不同来源、格式、特点性质的数据合并到一起
  3. 数据变换,处理数值计算、属性的映射以及维度空间的变换
  4. 数据规约,在尽可能保持数据原貌的前提下,最大限度地精简数据量

数据预处理的顺序

  1. 数据清洗与数据集成并没有严格意义上的先后顺序,究竟是先集成再清洗、还是先清洗再集成可以依照实际情况而定。因为数据集成以后,可能还会涉及到数据清洗的部分环节。
  2. 数据变换与数据规约一般在数据清洗以及集成以后,且两者在处理过程中也是相辅相成的,有的数据规约方法也需要以数据变换为前提。

一,数据清洗,清洗了什么?

从五个方面来进行数据的清洗,个人总结抽象概况为SINCE原则
(看了很多市场营销的书,歪果仁都愿意把一些原则弄成个易记的单词,于是此处提升一下B格).

 1,Simple  简单的:去除冗余与重复
  • 重复即100%的冗余,一般删除即可
  • 而冗余需要提取主要信息,去除次要信息
  • 有些情况还会需要信息融合

举个栗子:

有一个公司引入了供应链金融,于是一个人想要买东西,申请不同渠道的消费贷款时,就会得到不同渠道反馈的对该消费者评级。

假设有甲金融机构,乙金融机构,丙金融机构,
甲反馈结果是对用户进行 A,B,C的评级;
乙反馈结果是对用户进行 0~700分的评级;
丙反馈结果是对用户进行 优秀,良,中,差的评级;

显然,从信息上看,这三个结果的价值是趋同的,合并成一个维度会比留着三个要精简。由于每个渠道的评级结果不同,最终,我们可能合并结果时,就变成了二元变量了,即,好与其他,坏与其他。

 2,Integral  完整的:缺失值的处理
  • 缺失值的处理,需要认真对待

缺失的数据如果占总体比较少,是最好操作的了,可以直接删除。
然而,现实情况下,往往缺失的数据占比很多,缺失的原因又千奇百怪,又的甚至无法知道原因。所以,缺失的处理是非常复杂的,需要单独摘出一章,将在第六章给出对应的方法。

 3,Normal  标准的
  • 名称、类型、单位、格式、长度、缩写、等要符合统一的标准
  • 范围要在业务或常识的标准的值域内
  • 数据大都需要进行标准化处理消除量纲的影响
  • 分类变量虚拟化
  • 连续变量离散化

举个栗子:

日期,有的用’Mon’,有的用’Monday’,有的用’M’,就需要统一。

年龄出现了负数,就需要处理。

  • 分类变量虚拟化 dummy

假设收入与教育和性别有关,则性别在此处需要进行处理。
female=1表示女性,0表示非女性
w a g e = β 0 + ξ 0 ⋅ f e m a l e + β 1 e d u c + u wage=β_0+ξ_0·female+β_1educ+u wage=β0+ξ0female+β1educ+u

ξ 0 ξ_0 ξ0仅表示了女性对工资的边际影响,实际上男性的影响与截距项合并了。

实际上ξ0的影响结果是性别之间产生的对模型的截距迁移

其实还有另一种处理方式:两个分类就产生两个虚拟变量

w a g e = β 0 + ξ 0 ⋅ f e m a l e + ξ 1 ⋅ m a l e + β 1 e d u c + u wage=β_0+ξ_0·female+ξ_1·male+β_1educ+u wage=β0+ξ0female+ξ1male+β1educ+u
假设有5组数据,2组男性、3组女性

w a g e = β X + u wage=βX+u wage=βX+u,其中 X X X如下表述
(2) X = { 1 1 0 e d u c 1 1 1 0 e d u c 2 1 1 0 e d u c 3 1 0 1 e d u c 4 1 0 1 e d u c 5 } = ( x 1 , x 2 , x 3 , x 4 ) X=\left\{ \begin{matrix} 1 & 1 & 0 & educ_1 \\ 1 & 1 & 0 & educ_2 \\ 1 & 1 & 0 & educ_3 \\ 1 & 0 & 1 & educ_4 \\ 1 & 0 & 1 & educ_5 \end{matrix} \right\} \tag{2}=(x_1,x_2,x_3,x_4) X=111111110000011educ1educ2educ3educ4educ5=(x1,x2,x3,x4)(2)

对于所有的样本值 x 1 = x 2 + x 3 = 1 x_1=x_2+x_3=1 x1=x2+x3=1
所以截距项与两个虚拟变量产生了完全的共线性问题

综上:一般虚拟变量如果有m个类别,且模型有截距项的时候,只需引入m-1个虚拟变量。
  • 连续变量离散化

非监督离散化,通常是等宽的,但是易受到离群点的影响,此时等宽或等频更可取;有时甚至可以使用kmeans等聚类方法
在这里插入图片描述

 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个变量),我们的变量构成空间将越来越大。这个空间内的样本数量是不变的,这就意味着,样本的分布越来越稀疏。

我们取得的目前的样本,仅相当于在这个空间中的一个超平面上的样本点,然而随着空间维度的增加,这个超平面的情况又如何能够代表总体空间中的情况呢?

所以,数据处理阶段我们需要降维(参见第五章),模型生成阶段我们需要筛选特征子集(参见第四章)

主成分分析是最常用的手段,还有一些其他的算法可以帮助我们挑选特征,我们可以参考第五章的内容。

下一节:第1章-数据探索(2)-数据预处理之Python实现

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值