数据挖掘而之数据清洗


数据清洗, 是整个数据分析过程中不可缺少的一个环节,其结果质量直接关系到模型效果和最终结论。在实际操作中,数据清洗通常会占据分析过程的50%—80%的时间。国外有些学术机构会专门研究如何做数据清洗,相关的书籍也不少。

  

  (美亚搜data cleaning的结果,可以看到这书还挺贵)

  我将在这篇文章中,尝试非常浅层次的梳理一下数据清洗过程,供各位参考。

  照例,先上图:

  

  预处理阶段

  预处理阶段主要做两件事情:

  一是将数据导入处理工具。通常来说,建议使用数据库,单机跑数搭建MySQL环境即可。如果数据量大(千万级以上),可以使用文本文件存储+Python操作的方式。

  二是看数据。这里包含两个部分:一是看元数据,包括字段解释、数据来源、代码表等等一切描述数据的信息;二是抽取一部分数据,使用人工查看方式,对数据本身有一个直观的了解,并且初步发现一些问题,为之后的处理做准备。

  第一步:缺失值清洗

  缺失值是最常见的数据问题,处理缺失值也有很多方法,我建议按照以下四个步骤进行:

  1、确定缺失值范围:对每个字段都计算其缺失值比例,然后按照缺失比例和字段重要性,分别制定策略,可用下图表示:

  

  2、去除不需要的字段:这一步很简单,直接删掉即可……但强烈建议清洗每做一步都备份一下,或者在小规模数据上试验成功再处理全量数据,不然删错了会追悔莫及(多说一句,写SQL的时候delete一定要配where!)。

  3、填充缺失内容:某些缺失值可以进行填充,方法有以下三种:

  1. 以业务知识或经验推测填充缺失值
  2. 以同一指标的计算结果(均值、中位数、众数等)填充缺失值
  3. 以不同指标的计算结果填充缺失值

  前两种方法比较好理解。关于第三种方法,举个最简单的例子:年龄字段缺失,但是有屏蔽后六位的身份证号,so……

  4、重新取数:如果某些指标非常重要又缺失率高,那就需要和取数人员或业务人员了解,是否有其他渠道可以取到相关数据。

  以上,简单的梳理了缺失值清洗的步骤,但其中有一些内容远比我说的复杂,比如填充缺失值。很多讲统计方法或统计工具的书籍会提到相关方法,有兴趣的各位可以自行深入了解。

  第二步:格式内容清洗

  如果数据是由系统日志而来,那么通常在格式和内容方面,会与元数据的描述一致。而如果数据是由人工收集或用户填写而来,则有很大可能性在格式和内容上存在一些问题,简单来说,格式内容问题有以下几类:

  1、时间、日期、数值、全半角等显示格式不一致

  这种问题通常与输入端有关,在整合多来源数据时也有可能遇到,将其处理成一致的某种格式即可。

  2、内容中有不该存在的字符

  某些内容可能只包括一部分字符,比如身份证号是数字+字母,中国人姓名是汉字(赵C这种情况还是少数)。最典型的就是头、尾、中间的空格,也可能出现姓名中存在数字符号、身份证号中出现汉字等问题。这种情况下,需要以半自动校验半人工方式来找出可能存在的问题,并去除不需要的字符。

  3、内容与该字段应有内容不符

  姓名写了性别,身份证号写了手机号等等,均属这种问题。 但该问题特殊性在于:并不能简单的以删除来处理,因为成因有可能是人工填写错误,也有可能是前端没有校验,还有可能是导入数据时部分或全部存在列没有对齐的问题,因此要详细识别问题类型。

  格式内容问题是比较细节的问题,但很多分析失误都是栽在这个坑上,比如跨表关联或VLOOKUP失败(多个空格导致工具认为“陈丹奕”和“陈 丹奕”不是一个人)、统计值不全(数字里掺个字母当然求和时结果有问题)、模型输出失败或效果不好(数据对错列了,把日期和年龄混了,so……)。因此,请各位务必注意这部分清洗工作,尤其是在处理的数据是人工收集而来,或者你确定产品前端校验设计不太好的时候……

  第三步:逻辑错误清洗

  这部分的工作是去掉一些使用简单逻辑推理就可以直接发现问题的数据,防止分析结果走偏。主要包含以下几个步骤:

  1、去重

  有的分析师喜欢把去重放在第一步,但我强烈建议把去重放在格式内容清洗之后,原因已经说过了(多个空格导致工具认为“陈丹奕”和“陈 丹奕”不是一个人,去重失败)。而且,并不是所有的重复都能这么简单的去掉……

  我曾经做过电话销售相关的数据分析,发现销售们为了抢单简直无所不用其极……举例,一家公司叫做“ABC管家有限公司“,在销售A手里,然后销售B为了抢这个客户,在系统里录入一个”ABC官家有限公司“。你看,不仔细看你都看不出两者的区别,而且就算看出来了,你能保证没有”ABC官家有限公司“这种东西的存在么……这种时候,要么去抱RD大腿要求人家给你写模糊匹配算法,要么肉眼看吧。

  上边这个还不是最狠的,请看下图:

  

  你用的系统里很有可能两条路都叫八里庄路,敢直接去重不?(附送去重小tips:两个八里庄路的门牌号范围不一样)

  当然,如果数据不是人工录入的,那么简单去重即可。

  2、去除不合理值

  一句话就能说清楚:有人填表时候瞎填,年龄200岁,年收入100000万(估计是没看见”万“字),这种的就要么删掉,要么按缺失值处理。这种值如何发现?提示:可用但不限于箱形图(Box-plot).

  3、修正矛盾内容

  有些字段是可以互相验证的,举例:身份证号是1101031980XXXXXXXX,然后年龄填18岁,我们虽然理解人家永远18岁的想法,但得知真实年龄可以给用户提供更好的服务啊(又瞎扯……)。在这种时候,需要根据字段的数据来源,来判定哪个字段提供的信息更为可靠,去除或重构不可靠的字段。

  逻辑错误除了以上列举的情况,还有很多未列举的情况,在实际操作中要酌情处理。另外,这一步骤在之后的数据分析建模过程中有可能重复,因为即使问题很简单,也并非所有问题都能够一次找出,我们能做的是使用工具和方法,尽量减少问题出现的可能性,使分析过程更为高效。

  第四步:非需求数据清洗

  这一步说起来非常简单:把不要的字段删了。

  但实际操作起来,有很多问题,例如:

  把看上去不需要但实际上对业务很重要的字段删了;

  某个字段觉得有用,但又没想好怎么用,不知道是否该删;

  一时看走眼,删错字段了。

  前两种情况我给的建议是:如果数据量没有大到不删字段就没办法处理的程度,那么能不删的字段尽量不删。第三种情况,请勤备份数据……

  第五步:关联性验证

  如果你的数据有多个来源,那么有必要进行关联性验证。例如,你有汽车的线下购买信息,也有电话客服问卷信息,两者通过姓名和手机号关联,那么要看一下,同一个人线下登记的车辆信息和线上问卷问出来的车辆信息是不是同一辆,如果不是(别笑,业务流程设计不好是有可能出现这种问题的!),那么需要调整或去除数据。

  严格意义上来说,这已经脱离数据清洗的范畴了,而且关联数据变动在数据库模型中就应该涉及。但我还是希望提醒大家,多个来源的数据整合是非常复杂的工作,一定要注意数据之间的关联性,尽量在分析过程中不要出现数据之间互相矛盾,而你却毫无察觉的情况。

  以上,就是我对数据清洗过程的一个简单梳理。由于能力所限,难免挂一漏万,请各位不吝赐教,感谢。

  文章来源36大数据,www.36dsj.com ,微信号dashuju36 ,36大数据是一个专注大数据创业、大数据技术与分析、大数据商业与应用的网站。分享大数据的干货教程和大数据应用案例,提供大数据分析工具和资料下载,解决大数据产业链上的创业、技术、分析、商业、应用等问题,为大数据产业链上的公司和数据行业从业人员提供支持与服务。

转自:http://it.sohu.com/20160327/n442421732.shtml

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据挖掘》实验报告 目录 1。关联规则的基本概念和方法 1 1.1数据挖掘 1 1.1。1数据挖掘的概念 1 1.1.2数据挖掘的方法与技术 1 1.2关联规则 3 1.2.1关联规则的概念 3 1.2。2关联规则的实现--Apriori算法 4 2.用Matlab实现关联规则 6 2.1Matlab概述 6 2.2基于Matlab的Apriori算法 7 3.用java实现关联规则 11 3。1java界面描述 11 3.2java关键代码描述 14 4、实验总结 19 4.1实验的不足和改进 19 4.2实验心得 20 1。关联规则的基本概念和方法 1.1数据挖掘 1.1。1数据挖掘的概念 计算机技术和通信技术的迅猛发展将人类社会带入到了信息时代。在最近十几年里, 数据库中存储的数据急剧增大。数据挖掘就是信息技术自然进化的结果。数据挖掘可以 从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中,提取隐含在其中的 ,人们事先不知道的但又是潜在有用的信息和知识的过程。 许多人将数据挖掘视为另一个流行词汇数据中的知识发现(KDD)的同义词,而另一些人 只是把数据挖掘视为知识发现过程的一个基本步骤。知识发现过程如下: ·数据清理(消除噪声和删除不一致的数据) ·数据集成(多种数据源可以组合在一起) ·数据转换(从数据库中提取和分析任务相关的数据) ·数据变换(从汇总或聚集操作,把数据变换和统一成适合挖掘的形式) ·数据挖掘(基本步骤,使用智能方法提取数据模式) ·模式评估(根据某种兴趣度度量,识别代表知识的真正有趣的模式) ·知识表示(使用可视化和知识表示技术,向用户提供挖掘的知识). 1.1。2数据挖掘的方法与技术 数据挖掘吸纳了诸如数据库和数据仓库技术、统计学、机器学习、高性能计算、模式 识别、神经网络、数据可视化、信息检索、图像和信号处理以及空间数据分析技术的集 成等许多应用领域的大量技术。数据挖掘主要包括以下方法。 神经网络方法:神经网络由于本身良好的鲁棒性、自组织自适应性、并行处理、分布 存储和高度容错等特性非常适合解决数据挖掘的问题,因此近年来越来越受到人们的关 注。典型的神经网络模型主要分3大类:以感知机、bp反向传播模型、函数型网络为代表 的,用于分类、预测和模式识别的前馈式神经网络模型;以hopfield的离散模型和连续 模型为代表的,分别用于联想记忆和优化计算的反馈式神经网络模型;以art模型、koh olon模型为代表的,用于聚类的自组织映射方法.神经网络方法的缺点是"黑箱"性,人们 难以理解网络的学习和决策过程. 遗传算法:遗传算法是一种基于生物自然选择与遗传机理的随机搜索算法,是一种仿 生全局优化方法。遗传算法具有的隐含并行性、易于和其它模型结合等性质使得它在数 据挖掘中被加以应用。sunil已成功地开发了一个基于遗传算法的数据挖掘工具,利用该 工具对两个飞机失事的真实数据库进行了数据挖掘实验,结果表明遗传算法是进行数据挖 掘的有效方法之一。遗传算法的应用还体现在与神经网络、粗糙集等技术的结合上。如 利用遗传算法优化神经网络结构,在不增加错误率的前提下,删除多余的连接和隐层单 元;用遗传算法和bp算法结合训练神经网络,然后从网络提取规则等。但遗传算法的算法 较复杂,收敛于局部极小的较早收敛问题尚未解决。 决策树方法:决策树是一种常用于预测模型的算法,它通过将大量数据有目的分类,从 中找到一些有价值的,潜在的信息。它的主要优点是描述简单,分类速度快,特别适合大 规模的数据处理。 粗糙集方法:粗糙集理论是一种研究不精确、不确定知识的数学工具。粗糙集方法有 几个优点:不需要给出额外信息;简化输入信息的表达空间;算法简单,易于操作。粗糙 集处理的对象是类似二维关系表的信息表。目前成熟的关系数据库管理系统和新发展起 来的数据仓库管理系统,为粗糙集的数据挖掘奠定了坚实的基础。但粗糙集的数学基础 是集合论,难以直接处理连续的属性。而现实信息表中连续属性是普遍存在的.因此连续 属性的离散化是制约粗糙集理论实用化的难点. 覆盖正例排斥反例方法:它是利用覆盖所有正例、排斥所有反例的思想来寻找规则. 首先在正例集合中任选一个种子,到反例集合中逐个比较.与字段取值构成的选择子相容 则舍去,相反则保留。按此思想循环所有正例种子,将得到正例的规则(选择子的合取式 )。比较典型的算法有michalski的aq11方法、洪家荣改进的aq15方法以及他的ae5方法。 统计分析方法:在数据库字段项之间存在两种关系:函数关系(能用函数公式表示的 确定性关系)和相关关系(不能用函数公式表示,但仍是相关确定性关系),对它们的分析 可采用统计学方法,即利用统计学原理对数据库中的信息进行分析。可进行常用统计(求 大量数据中的最大值、最小值、总
数据挖掘实验报告 ——加权K-近邻法 1. 数据源说明 1. 数据理解 数据来自于天猫对顾客的BuyOrNot(买与不买),BuyDNactDN(消费活跃度),ActDNTotal DN(活跃度),BuyBBrand(成交有效度),BuyHit(活动有效度)这五个变量的统计。 数据分成两类数据,一类作为训练数据集,一类为测试数据集。 2.数据清理 现实世界的数据一般是不完整的、有噪声的和不一致的。数据清理例程试图填充缺失 的值,光滑噪声并识别离群点,并纠正数据中的不一致。 a) 缺失值:当数据中存在缺失值是,忽略该元组 b) 噪声数据:本文暂没考虑。 2. 基于变量重要性的加权K-近邻法[1] 由于我们计算K- 近邻法默认输入变量在距离测度中有"同等重要"的贡献,但情况并不总是如此。我们知 道不同的变量对我们所要预测的变量的作用是不一定一样的,所以找出对输出变量分类 预测有意义的重要变量对数据预测具有重要作用。同时也可以减少那些对输出变量分类 预测无意义的输入变量,减少模型的变量。为此,采用基于变量重要性的K- 近邻法,计算加权距离,给重要的变量赋予较高的权重,不重要的变量赋予较低的权重 是必要的。 (1)算法思路: 我们引进为第i个输入变量的权重,是输入变量重要性(也称特征重要性),F I函数,定义为:。其中为第i个输入变量的特征重要性,这里, 依第i个输入变量对预测误差的影响定义。设输入变量集合包含p个变量:。剔除第 i个变量后计算输入变量的误判率,记为。若第i个变量对预测有重要作用, 剔除变量后的预测误差应较大。于是,第i个变量的重要性定义为:。可见, 变量越重要,在计算距离时的权重越高。 (2)算法步骤: step.1---求解出错判率最低的K值 step.2---求解出第i个变量的 (3)算法源代码 library("class") Tmall_train<-read.csv("D:\\Documents\\Rword\\第一章\\Train_tmall.csv") Tmall_test<-read.csv("D:\\Documents\\Rword\\第一章\\天猫_Test_1.csv") par(mfrow=c(2,2)) set.seed(123456) errRatio<-vector() for(i in 1:30){ KnnFit<-knn(train=Tmall_train[,-1],test=Tmall_test[,- 1],cl=Tmall_train[,1],k=i,prob=FALSE) CT<-table(Tmall_test[,1],KnnFit) errRatio<-c(errRatio,(1-sum(diag(CT))/sum(CT))*100) } plot(errRatio,type="l",xlab="近邻个数k",ylab="错判率(%)",main="近邻数K与错判 率") 从右边近邻数K与错判率的图可明显看出,近邻个数为7时,误判率和稳健性最好 errDelteX<-errRatio[7] for(i in -2:-5){ fit<-knn(train=Tmall_train[,c(-1,i)],test=Tmall_test[,c(- 1,i)],cl=Tmall_train[,1],k=7) CT<-table(Tmall_test[,1],fit) errDelteX<-c(errDelteX,(1-sum(diag(CT))/sum(CT))*100) } plot(errDelteX,type ="l",xlab="剔除变量",ylab="剔除错判率(%)",main="剔除变量与剔除错判率",cex.ma in=0.8) xTitle=c("1:全体变量","2:消费活跃度","3:活跃度","4:成交有效度","5:活动有效度 ") legend("topright",legend=xTitle,title="变量说明",lty=1,cex=0.6) FI<-errDelteX[-1]+1/4 wi<-FI/sum(FI) Glabs<- paste(c("度","活跃度","成交有效度","活动有效度"),round(wi,2),sep=":") pie(wi,labels = Glabs,clockwise = T,main="输入变量权重",cex.main=0.8) 从上面两个图我们可以明显得出,消费活跃度、成交有效度及活动有效度在预测消费 者买与不买中占的权重比较大,其中消费者消费活跃度在预测消费者买与不买的重要性 最大,达到45%,是预测消费者消费的一个关键变量。 三、基于观测相似性的加权K-近邻法[2] (1)核心思想: K- 近邻法预测时,默认

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值