数据预处理_数据清理

一、概述前端

实际的数据库极易受噪声、缺失值和不一致数据的侵扰,由于数据库太大,而且多半来自多个异种数据源。低质量的数据将会致使低质量的挖掘结果。有大量的数据预处理技术:
- - 数据清理:能够用来清楚数据中的噪声,纠正不一致。
- - 数据集成:将数据由多个数据源合并成一个一致的数据存储,如数据仓库。
- - 数据归约:能够经过如汇集、删除冗余特征或聚类来下降数据的规模。
- - 数据变换:(例如,规范化)能够用来把数据压缩到较小的区间,如0.0到1.0。算法

这能够提升设计距离度量的挖掘算法的准确率和效率。这些技术不是排斥的,能够一块儿使用。数据库

1.一、数据质量 数据若是能知足其应用的要求,那么它是高质量的。数据质量涉及许多因素,包括:准确率、完整性、一致性、时效性、可信性和可解释性。markdown

二、数据清理网络

现实世界的数据通常是不完整的、有噪声的和不一致的。数据清理例程试图填充缺失的值、光滑噪声并识别离群点、纠正数据中的不一致。ide

2.一、缺失值函数

如何处理缺失的属性?咱们来看看下面的方法:
1- - - 忽略元组:当缺乏类标号时一般这样作(假设挖掘任务设计分类)。除非元组有多个属性缺乏值,不然更改方法不是颇有效。当每一个属性缺失值的百分比变化很大时,他的性能特别差。采用忽略元组,你不能使用该元组的剩余属性值。这些数据可能对手头的任务是有用的。
2- - - 人工填写缺失值:通常来讲,该方法很费事,而且当数据集很大、缺失不少值时该方法可能行不通。
3- - - 使用一个全局填充缺失值:将缺失的属性值用同一个常量(如:“Unknow”或-∞)替换。若是确实的值都如“Unknow”替换,则挖掘程序可能误认为他们造成了一个有趣的概念,由于他们都具备相同的值 – “Unknow”。所以,尽管该方法简单,可是并不十分可靠。
4- - - 使用属性的中心度量(如均值或中位数)填充缺失值:对于正常的(对称的)数据分布而言,可使用均值,而倾斜数据分布应该使用中位数。
5- - - 使用与给定元组属同一类的全部样本的属性均值或中位数:
6- - - 使用最可靠的值填充缺失值:能够用回归、贝叶斯形式化方法的基于推理的工具或决策树概括肯定。工具

方法3~方法6使数据有偏,可能填入的数据不许确。然而,方法6是最流行的策略。与其余方法(可能方法2除外)相比,它使用已有数据的大部分信息来预测缺失值。性能

须要注意的是,在某些状况下,缺失值并不意味着数据有错误。理想状况下,每一个属性都应当有一个或多个空值条件的规则。这些规则能够说明是否容许空值,而且/或者说明这样的空值应该如何处理或转换。若是在业务处理的稍后步骤提供值,字段也可能故意留下空白。所以,尽管在获得数据后,咱们能够尽咱们所能来清理数据,但好的数据库和数据输入设计将有助于在第一现场把缺失值或者错误的数量降至最低。大数据

2.二、噪声数据
噪声(noise)是被测量的变量的随机偏差或方差。咱们可使用基本的数据统计描述技术(例如,盒图或者散点图)和数据可视化方法来识别可能表明噪声的离群点。

1- - - 分箱(bining):分箱方法经过考察数据的“近邻”(即周围的值)来光滑有序的数据值。这些有序的值被分布到一些“捅”或箱中。因为分箱方法考察近邻的值,所以它进行局部的光滑。
这里写图片描述

如上图所示,数据首先排序并被划分到大小为3的等频的箱中。对于用箱均值光滑,箱中每个值都被替换为箱中的均值。相似的,可使用用箱中位数光滑或者用箱边界光滑等等。

2- - - 回归(regression):能够用一个函数拟合数据来光滑数据。这种技术称之为回归。线性回归涉及找出拟合两个属性(或变量)的“最佳”直线,使得一个属性能够用来预测另外一个。多元线性回归是线性回归的扩充,其中涉及的属性多余两个,而且数据拟合到一个多维曲面。

3- - - 离群点分析(outlier analysis):能够经过如聚类来检测离群点。聚类将相似的值组织成群或“簇”。直观地,落在簇集合以外的值被视为离群点。
这里写图片描述

2.三、数据清理做为一个过程

数据清理过程第一步是误差检测(discrepancy detection)。致使误差的因素可能有多种,包括具备不少可选字段的设计糟糕的输入表单、人为的输入错误、有意的错误(例如,不肯意泄露我的隐私),以及数据退化(例如,过期的地址)。误差也可能源于不一致的数据表示和编码的不一导致用。记录数据的设备的错误和系统错误是另外一种误差源。当数据(不适当地)用于不一样于当初的目的时,也可能出现错误。数据集成也可能致使不一致(例如,当给定的属性在不一样的数据库中具备不一样的名称时)。

那么,如何进行误差检测呢?首先,咱们明确一个概念,”关于数据的数据“称做元数据。例如,每一个属性的数据类型是定义域是什么?每一个属性可接受的值是什么?对于把握数据趋势和识别异常,数据的基本统计描述是有用的。例如,找出均值、中位数和众数。数据是对称的仍是倾斜的?值域是什么?全部的值都在指望的区间内吗?每一个属性的标准差是多少?远离给定属性均值超过两个标准差的值可能标记为可能的离群点。属性之间存在已知的依赖吗?在这一步,能够编写程序或使用稍后咱们讨论到的工具。由此,你可能发现噪声、离群点和须要考察的不寻常的值。

1- - - 编码格式:警戒编码使用的不一致和数据表示的不一致问题(例如,日期“2015/12/08”和”08/12/2015”);
2- - - 字段过载:开发者将新属性的定义挤进已经定义的属性的未使用(位)部分(例如,使用一个属性未使用的位,该属性取值已经使用了32位中的31位)。

1- - - :惟一性规则:给定属性的每一个值都必须不一样于该属性的其余值。
2- - - :连续性规则:属性的最低值和最高值之间没有缺失的值,而且全部的值还必须是惟一的(例如,检验数).
3- - - :空值规则:说明空白、问号、特殊符号或指示空值条件的其余串的使用(例如,一个给定属性的值何处不能用),以及如何处理这样的值。

1- - - 数据清洗工具(data scrubbing tools):使用简单的领域知识(邮政地址知识和拼写检查),检查并纠正数据中的错误。在清理多个数据源的数据时,这些工具依赖分析和模糊匹配技术。
2- - - 数据审计工具(data auditing tools):经过分析数据发现规则和联系,并检测违反这些条件的数据来发现误差。
3- - - 数据迁移工具(data migration tools):容许说明简单的变换,如将串”gender”用“sex”替换。
4- - -ETL(extraction/transformation/loading,提取/变换/装入)工具:容许用户经过图形用户界面说明变换。
一般,这些工具只支持有限的变换,所以咱们可能须要为数据清理过程的这一步编写定制的程序。

误差检测和数据变换(纠正误差) 迭代执行这两步过程。一般,须要屡次迭代才能使用户满意。

新的数据清理方法强调增强交互性。例如,Potter’s Wheel是一种公开的数据清理工具,它集成了误差检测和数据变换。



预处理阶段
预处理阶段主要作两件事情:
一是将数据导入处理工具。一般来讲,建议使用数据库,单机跑数搭建MySQL环境便可。若是数据量大(千万级以上),可使用文本文件存储+Python操做的方式。
二是看数据。这里包含两个部分:一是看元数据,包括字段解释、数据来源、代码表等等一切描述数据的信息;二是抽取一部分数据,使用人工查看方式,对数据自己有一个直观的了解,而且初步发现一些问题,为以后的处理作准备。
第一步:缺失值清洗
缺失值是最多见的数据问题,处理缺失值也有不少方法,我建议按照如下四个步骤进行:
一、肯定缺失值范围:对每一个字段都计算其缺失值比例,而后按照缺失比例和字段重要性,分别制定策略,可用下图表示:
二、去除不须要的字段:这一步很简单,直接删掉便可……但强烈建议清洗每作一步都备份一下,或者在小规模数据上试验成功再处理全量数据,否则删错了会追悔莫及(多说一句,写SQL的时候delete必定要配where!)。
三、填充缺失内容:某些缺失值能够进行填充,方法有如下三种:
  • 以业务知识或经验推测填充缺失值
  • 以同一指标的计算结果(均值、中位数、众数等)填充缺失值
  • 以不一样指标的计算结果填充缺失值

前两种方法比较好理解。关于第三种方法,举个最简单的例子:年龄字段缺失,可是有屏蔽后六位的身份证号,so……
四、从新取数:若是某些指标很是重要又缺失率高,那就须要和取数人员或业务人员了解,是否有其余渠道能够取到相关数据。

以上,简单的梳理了缺失值清洗的步骤,但其中有一些内容远比我说的复杂,好比填充缺失值。不少讲统计方法或统计工具的书籍会提到相关方法,有兴趣的各位能够自行深刻了解。
第二步:格式内容清洗
若是数据是由系统日志而来,那么一般在格式和内容方面,会与元数据的描述一致。而若是数据是由人工收集或用户填写而来,则有很大可能性在格式和内容上存在一些问题,简单来讲,格式内容问题有如下几类:
一、时间、日期、数值、全半角等显示格式不一致
这种问题一般与输入端有关,在整合多来源数据时也有可能遇到,将其处理成一致的某种格式便可。
二、内容中有不应存在的字符
某些内容可能只包括一部分字符,好比身份证号是数字+字母,中国人姓名是汉字(赵C这种状况仍是少数)。最典型的就是头、尾、中间的空格,也可能出现姓名中存在数字符号、身份证号中出现汉字等问题。这种状况下,须要以半自动校验半人工方式来找出可能存在的问题,并去除不须要的字符。
三、内容与该字段应有内容不符
姓名写了性别,身份证号写了手机号等等,均属这种问题。 但该问题特殊性在于:并不能简单的以删除来处理,由于成因有多是人工填写错误,也有多是前端没有校验,还有多是导入数据时部分或所有存在列没有对齐的问题,所以要详细识别问题类型。
格式内容问题是比较细节的问题,但不少分析失误都是栽在这个坑上,好比跨表关联或VLOOKUP失败(多个空格致使工具认为“陈丹奕”和“陈 丹奕”不是一我的)、统计值不全(数字里掺个字母固然求和时结果有问题)、模型输出失败或效果很差(数据对错列了,把日期和年龄混了,so……)。所以,请各位务必注意这部分清洗工做,尤为是在处理的数据是人工收集而来,或者你肯定产品前端校验设计不太好的时候……
第三步:逻辑错误清洗
这部分的工做是去掉一些使用简单逻辑推理就能够直接发现问题的数据,防止分析结果走偏。主要包含如下几个步骤:
一、去重
有的分析师喜欢把去重放在第一步,但我强烈建议把去重放在格式内容清洗以后,缘由已经说过了(多个空格致使工具认为“陈丹奕”和“陈 丹奕”不是一我的,去重失败)。并且,并非全部的重复都能这么简单的去掉……
我曾经作过电话销售相关的数据分析,发现销售们为了抢单简直无所不用其极……举例,一家公司叫作“ABC管家有限公司“,在销售A手里,而后销售B为了抢这个客户,在系统里录入一个”ABC官家有限公司“。你看,不仔细看你都看不出二者的区别,并且就算看出来了,你能保证没有”ABC官家有限公司“这种东西的存在么……这种时候,要么去抱RD大腿要求人家给你写模糊匹配算法,要么肉眼看吧。
上边这个还不是最狠的,请看下图:
你用的系统里颇有可能两条路都叫八里庄路,敢直接去重不?(附送去重小tips:两个八里庄路的门牌号范围不同)
固然,若是数据不是人工录入的,那么简单去重便可。
二、去除不合理值
一句话就能说清楚:有人填表时候瞎填,年龄200岁,年收入100000万(估计是没看见”万“字),这种的就要么删掉,要么按缺失值处理。这种值如何发现?提示:可用但不限于箱形图(Box-plot).
三、修正矛盾内容
有些字段是能够互相验证的,举例:身份证号是1101031980XXXXXXXX,而后年龄填18岁,咱们虽然理解人家永远18岁的想法,但得知真实年龄能够给用户提供更好的服务啊(又瞎扯……)。在这种时候,须要根据字段的数据来源,来断定哪一个字段提供的信息更为可靠,去除或重构不可靠的字段。
逻辑错误除了以上列举的状况,还有不少未列举的状况,在实际操做中要酌情处理。另外,这一步骤在以后的数据分析建模过程当中有可能重复,由于即便问题很简单,也并不是全部问题都可以一次找出,咱们能作的是使用工具和方法,尽可能减小问题出现的可能性,使分析过程更为高效。

第四步:非需求数据清洗
这一步提及来很是简单:把不要的字段删了。
但实际操做起来,有不少问题,例如:
  • 把看上去不须要但实际上对业务很重要的字段删了;
  • 某个字段以为有用,但又没想好怎么用,不知道是否该删;
  • 一时看走眼,删错字段了。

前两种状况我给的建议是:若是数据量没有大到不删字段就没办法处理的程度,那么能不删的字段尽可能不删。第三种状况,请勤备份数据……
第五步:关联性验证
若是你的数据有多个来源,那么有必要进行关联性验证。例如,你有汽车的线下购买信息,也有电话客服问卷信息,二者经过姓名和手机号关联,那么要看一下,同一我的线下登记的车辆信息和线上问卷问出来的车辆信息是否是同一辆,若是不是(别笑,业务流程设计很差是有可能出现这种问题的!),那么须要调整或去除数据。
严格意义上来讲,这已经脱离数据清洗的范畴了,并且关联数据变更在数据库模型中就应该涉及。但我仍是但愿提醒你们,多个来源的数据整合是很是复杂的工做,必定要注意数据之间的关联性,尽可能在分析过程当中不要出现数据之间互相矛盾,而你却毫无察觉的状况。
以上,就是我对数据清洗过程的一个简单梳理。因为能力所限,不免挂一漏万,请各位不吝赐教,感谢。

2、数据分析以前的各项准备工做

数据分析团队各成员肯定以后,将进行下一项工做,就是找到有价值的数据进行分析了。数据是分析的基础,所以数据的质量、数据的相关度、数据的维度等会影响数据分析的结果影,其中GIGO(垃圾进垃圾出)对于数据分析结果影响最大。

1数据源选择

数据分析团队面对大量的数据源,各个数据源之间交叉联系,各个数据域之间具备逻辑关系,各个产品统计口径不一样,不一样的时间段数值不一样等。这一系列问题多会影响数据分析结果,所以肯定数据源选择和数据整理相当重要。

DBA能够基于数据分析须要,找到相关数据,创建一张数据宽表,将数据仓库的数据引入到这张宽表当中,基于必定的逻辑关系进行汇总计算。这张宽表做为数据分析的基础,而后再依据数据分析须要衍生出一些不一样的表单,为数据分析提供干净全面的数据源。宽表一方面是用于集中相关分析数据,一方面是提升效率,不须要每次分析时都查询其余的数据表,影响数据仓库效率。

2数据抽样选择

简单的数据分析能够调用全体数据进行分析,数据抽样主要用于建模分析,抽样需考虑样本具备表明性,覆盖各类客户类型,抽样的时间也很重要,越近的时间窗口越有利于分析和预测。在进行分层抽样时,须要保证分红出来的样本比例同原始数据基本一致。

3数据类型选择

数据类型分为连续型和离散型,建模分析时须要肯定数据类型。进行业务收入趋势分析、销售额预测分析、RFM分析时,通常采用连续型变量。信用评级、分类预测时通常采用离散变量。

4缺失值处理

数据分析过程当中会面对不少缺失值,其产生缘由不一样,有的是因为隐私的缘由,故意隐去。有的是变量自己就没有数值,有的是数据合并时不当操做产生的数据缺失。

缺失值处理能够采用替代法(估值法),利用已知经验值代替缺失值,维持缺失值不变和删除缺失值等方法。具体方法将参考变量和自变量的关系以及样本量的多少来决定。

5异常值检测和处理

异常值对于某些数据分析结果影响很大,例如聚类分析、线性回归(逻辑回归)。可是对决策树、神经网络、SVM支持向量机影响较小。

通常异常值是指明显偏离观测值的平均值,例如年龄为200岁,平均收入为10万元时,有个异常值为300万元。第一个异常值为无效异常值,须要删掉,可是第二个异常值可能属于有效异常值,能够根据经验来决定是否保留或删掉。

6数据标准化

数据标准化的目的是将不一样性质、不一样量级的数据进行指数化处理,调整到能够类比的范围。例如在创建逻辑回归模型时,性别的取值是0或以,可是收入取值可能就是0-100万,跨度较大,须要进行标准化。

通常能够采用最佳/最大标准化(Min-Max标准化法)将数值定在0和1之间,便于计算。Z分数法和小数定标标准化法也能够采用。

7数据粗分类(Categorization)处理

归类和分类的目的是减小样本的变量,常有的方法由等间距分类,等频数分类。能够依据经验将自变量分红几类,分类的方法能够不一样,建议采用卡方检验来决定采用哪一种分类方法。连续型变量能够用WOE变化方法来简化模型,但下降了模型的可解释性。

8变量选择

数据分析过程当中会面对成百上千的变量,通常状况下只有少数变量同目标变量有关,有助于提升预测精度。一般建模分析时,有意义的变量不会超过10-15个,称他们为强相关变量(聪明变量)。能够利用变量过滤器的方法来选择变量。常见的变量过滤器应用场景以下。

 


3、数据分析过程

1向业务部门进行调研,了解业务须要解决的问题,将业务问题映射成数据分析工做和任务

2调研企业内外部数据,找到分析须要的数据,将数据汇聚到一个特定的区域,数据集市或数据仓库,探索性分析

3数据清洗,包括检查数据的一致性,处理异常值和缺失值,删除重复数据等

4数据转换,例如数据分箱(Binning),将字符型变量转化为数字型变量,按照数据所需维度进行汇总

5创建模型,按照业务需求创建不一样模型(例如客户流失预警、欺诈检测、购物篮分析、营销响应等)

6模型结果解释和评估,业务专家进行业务解释和结果评价

4、大数据分析场景和模型应用

数据分析建模须要先明确业务需求,而后选择是描述型分析仍是预测型分析。若是分析的目的是描述客户行为模式,就采用描述型数据分析,描述型分析就考虑关联规则、序列规则、聚类等模型。

预测型数据分析就是量化将来一段时间内,某个事件的发生几率。有两大预测分析模型,分类预测和回归预测。常见的分类预测模型中,目标变量一般都是二元分类变量例如欺诈与否,流失与否,信用好坏等。回归预测模型中,目标变量一般都是连续型变量,常见的有股票价格预测、违约损失率预测(LGD)等。

生存分析聚焦于将事件的结果和出现这一结果所经历的时间进行分析,源于医疗领域,研究患者治疗后的存活时间。生存分析可也能够用于预测客户流失时间,客户下次购买时间,客户违约时间,客户提早偿还贷款时间,客户下次访问网站时间等。

常见的数据分析应用场景以下

1市场营销

营销响应分析建模(逻辑回归,决策树)

净提高度分析建模(关联规则)

客户保有分析建模(卡普兰梅尔分析,神经网络)

购物蓝分析(关联分析Apriori)

自动推荐系统(协同过滤推荐,基于内容推荐,基于人口统计推荐,基于知识推荐,组合推荐,关联规则)

客户细分(聚类)

流失预测(逻辑回归)

2风险管理

客户信用风险评分(SVM,决策树,神经网络)

市场风险评分建模(逻辑回归和决策树)

运营风险评分建模(SVM)

欺诈检测(决策树,聚类,社交网络)

5、数据模型评价的方法

1AUC值判别法
AUC小于0.7识别能力很弱 AUC在0.7-0.8之间识别能力可接受 AUC在0.8-0.9之间识别能力卓越 AUC大于0.9模型出现意外 2KS判别法 KS值大于0.2就表示具备较好的可预测性 本文大部份内容来源于BartBaesens所著《AnalysisinaBigDataWorld:TheEssentialGuidetoDataScienceanditsApplications》。中文书名为《大数据分析数据科学应用场景与实践精髓》柯晓燕张纪元翻译