内容简介:数据预处理一方面是为了提高数据的质量,另一方面也是为了适应所做数据分析的软件或者方法。在做数据分析时,我想许多数据分析师会像《R语言实战第二版》的作者卡巴科弗那样发出感叹:“数据分析师在数据预处理上花费了60%的时间……”
数据预处理一方面是为了提高数据的质量,另一方面也是为了适应所做数据分析的软件或者方法。
在做数据分析时,我想许多数据分析师会像《R语言实战第二版》的作者卡巴科弗那样发出感叹:“数据分析师在数据预处理上花费了60%的时间……”
是的,我们所知道的建模,评估模型等数据分析工作所花费的时间远远没有数据预处理的多。这件事虽然麻烦多事但却“功在千秋”,如果在做数据分析时前期的数据预处理做的很好,那后面的步骤会说话的话,相信我,它们一定会感谢你的。这就跟减肥一样,过程艰难,但人家创造101的杨超越不也下定决心唱出一句:“燃烧我的卡路里,你是最棒的”嘛。
数据预处理一方面是为了提高数据的质量,另一方面也是为了适应所做数据分析的软件或者方法。一般来说,数据预处理步骤有数据清洗、数据集成、数据变换、数据规约,每个大步骤又有一些小的细分点。当然了,这四个大步骤在做数据预处理时未必都要执行。
一、数据清洗
数据清洗,顾名思义,“黑”的变成“白”的,“脏”的数据变成“干净”的,脏数据表现在形式上和内容上的脏。
- 形式上的脏,如:缺失值、带有特殊符号的;
- 内容上的脏,如:异常值。
1. 缺失值
缺失值包括缺失值的识别和缺失值的处理。
在R里缺失值的识别使用函数is.na()判别,函数complete.cases()识别样本数据是否完整。
缺失值处理常用的方法有: 删除、替换和插补。
- 删除法 : 删除法根据删除的不同角度又可以分为删除观测样本和变量,删除观测样本(行删除法),在R里na.omit()函数可以删除所含缺失值的行。这就相当于减少样本量来换取信息的完整度,但当变量有较大缺失并且对研究目标影响不大时,可考虑删除变量R里使用语句mydata[,-p]来完成。mydata表示所删数据集的名字,p是该删除变量的列数,-表示删除。
- 替换法 : 替换法顾名思义对缺失值进行替换,根据变量的不同又有不同的替换规则,缺失值的所在变量是数值型用该变量下其他数的均值来替换缺失值;变量为非数值变量时则用该变量下其他观测值的中位数或众数替换。
- 插补法 : 插补法分为回归插补和多重插补。回归插补指的是将插补的变量当作因变量y,其他变量看错自变量,利用回归模型进行拟合,在R里使用lm()回归函数对缺失值进行插补;多重插补是指从一个包含缺失值的数据集中生成一组完整的数据,多次进行,产生缺失值的一个随机样本,在R里mice()包可以进行多重插补。
2. 异常值
异常值跟缺失值一样包括 异常值的识别和异常值 的处理。
- 异常值的识别通常用单变量散点图或箱形图来处理,在R里dotchart()是绘制单变量散点图的函数,boxplot()函数绘制箱现图;在图形中,把远离正常范围的点当作异常值。
- 异常值的的处理有删除含有异常值的观测(直接删除,当样本少时直接删除会造成样本量不足,改变变量的分布)、当作缺失值(利用现有的信息,对其当缺失值填补)、平均值修正(用前后两个观测值的均值修正该异常值)、不处理。在进行异常值处理时要先复习异常值出现的可能原因,再判断异常值是否应该舍弃。
二、数据集成
所谓数据集成就是将多个数据源合并放到一个数据存储中,当然如果所分析的数据原本就在一个数据存储里就不需要数据的集成了(多合一)。
数据集成的实现是将两个数据框以关键字为依据,在R里用merge()函数实现,语句为merge(dataframe1, dataframe2,by=”关键字“”),默认按升序排列。
在进行数据集成时可能会出现如下问题:
- 同名异义,数据源A中某属性名字和数据源B中某属性名字相同,但所表示的实体不一样,不能作为关键字;
- 异名同义,即两个数据源某个属性名字不一样但所代表的实体一样,可作为关键字;
- 数据集成往往造成数据冗余,可能是同一属性多次出现,也可能是属性名字不一致导致的重复,对于重复属性一个先做相关分析检测,如果有再将其删除。
三、数据变换
数据变换就是转化成适当的形式,来满足软件或分析理论的需要。
1. 简单函数变换
简单函数变换用来将不具有正态分布的数据变成有正态分布的数据,常用的有平方、开方、取对数、差分等。如在时间序列里常对数据对数或差分运算,将非平稳序列转化成平稳序列。
2. 规范化
规范化就是剔除掉变量量纲上的影响,比如:直接比较身高和体重的差异,单位的不同和取值范围的不同让这件事不能直接比较。
- 最小-最大规范化: 也叫离差标准化,对数据进行线性变换,将其范围变成[0,1]
- 零-均值规范化: 也叫标准差标准化,处理后的数据均值等于0,标准差为1
- 小数定标规范化: 移动属性值的小数位数,将属性值映射到[-1,1]
3. 连续属性离散化
将连续属性变量转化成分类属性,就是连续属性离散化,特别是某些分类算法要求数据是分类属性,如:ID3算法。
常用的离散化方法有如下几种:
- 等宽法: 将属性的值域分成具有相同宽度的区间,类似制作频率分布表;
- 等频法: 将相同的记录放到每个区间;
- 一维聚类: 两个步骤,首先将连续属性的值用聚类算法,然后将聚类得到的集合合并到一个连续性值并做同一标记。
四、数据规约
数据规约能够降低无效错误的数据对建模的影响、缩减时间、降低存储数据的空间。
1. 属性规约
属性规约是寻找最小的属性子集并确定子集概率分布接近原来数据的概率分布。
- 合并属性: 将一些旧的属性合并一个新的属性;
- 逐步向前选择: 从一个空属性集开始,每次在原来属性集合选一个当前最优属性添加到当前子集中,一直到无法选择最优属性或满足一个约束值为止;
- 逐步先后选择: 从一个空属性集开始,每次在原来属性集合选一个当前最差属性并剔除当前子集中,一直到无法选择最差属性或满足一个约束值为止;
- 决策树归纳: 没有出现在这个决策树上的属性从初始集合中删除,获得一个较优的属性子集;
- 主成份分析: 用较少的变量去解释原始数据中大部分变量(用相关性高的变量转化成彼此相互独立或不相关的变量)。
2. 数值规约
通过减少数据量,包括有参数和无参数方法,有参数如线性回归和多元回归,无参数法如直方图、抽样等。
本文由 @CDA数据分析师 原创发布于人人都是产品经理。未经许可,禁止转载
题图由作者提供
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 黑客常提到的“webshell”究竟是什么?
- 《新版阿里巴巴 Java 开发手册》提到的三目运算符的空指针问题到底是个怎么回事?
- 自然语言处理之数据预处理
- PaddlePaddle之数据预处理
- 特征工程之数据预处理(上)
- 特征工程之数据预处理(下)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Big Java Late Objects
Horstmann, Cay S. / 2012-2 / 896.00元
The introductory programming course is difficult. Many students fail to succeed or have trouble in the course because they don't understand the material and do not practice programming sufficiently. ......一起来看看 《Big Java Late Objects》 这本书的介绍吧!