共计 2666 个字符,预计需要花费 7 分钟才能阅读完成。
数据荡涤,是整个数据分析过程中不可短少的一个环节,其后果品质间接关系到模型成果和最终论断。在实际操作中,数据荡涤通常会占据剖析过程的 50%—80% 的工夫。国外有些学术机构会专门钻研如何做数据荡涤,相干的书籍也不少。
我将在这篇文章中,尝试十分浅层次的梳理一下数据荡涤过程,供各位参考。
照例,先上图:
预处理阶段
预处理阶段次要做两件事件:
一是将数据导入解决工具。通常来说,倡议应用数据库,单机跑数搭建 MySQL 环境即可。如果数据量大(千万级以上),能够应用文本文件存储 +Python 操作的形式。
二是看数据。这里蕴含两个局部:一是看元数据,包含字段解释、数据起源、代码表等等所有形容数据的信息;二是抽取一部分数据,应用人工查看形式,对数据自身有一个直观的理解,并且初步发现一些问题,为之后的解决做筹备。
第一步:缺失值荡涤
缺失值是最常见的数据问题,解决缺失值也有很多办法,我倡议依照以下四个步骤进行:
1、确定缺失值范畴:对每个字段都计算其缺失值比例,而后依照缺失比例和字段重要性,别离制订策略,可用下图示意:
2、去除不须要的字段:这一步很简略,间接删掉即可……但强烈建议荡涤每做一步都备份一下,或者在小规模数据上试验胜利再解决全量数据,不然删错了会追悔莫及(多说一句,写 SQL 的时候 delete 肯定要配 where!)。
3、填充缺失内容:某些缺失值能够进行填充,办法有以下三种:
以业务知识或教训揣测填充缺失值
以同一指标的计算结果(均值、中位数、众数等)填充缺失值
以不同指标的计算结果填充缺失值
前两种办法比拟好了解。对于第三种办法,举个最简略的例子:年龄字段缺失,然而有屏蔽后六位的身份证号,so……
4、从新取数:如果某些指标十分重要又缺失率高,那就须要和取数人员或业务人员理解,是否有其余渠道能够取到相干数据。
以上,简略的梳理了缺失值荡涤的步骤,但其中有一些内容远比我说的简单,比方填充缺失值。很多讲统计办法或统计工具的书籍会提到相干办法,有趣味的各位能够自行深刻理解。
第二步:格局内容荡涤
如果数据是由系统日志而来,那么通常在格局和内容方面,会与元数据的形容统一。而如果数据是由人工收集或用户填写而来,则有很大可能性在格局和内容上存在一些问题,简略来说,格局内容问题有以下几类:
1、工夫、日期、数值、全半角等显示格局不统一
这种问题通常与输出端无关,在整合多起源数据时也有可能遇到,将其解决成统一的某种格局即可。
2、内容中有不该存在的字符
某些内容可能只包含一部分字符,比方身份证号是数字 + 字母,中国人姓名是汉字(赵 C 这种状况还是多数)。最典型的就是头、尾、两头的空格,也可能呈现姓名中存在数字符号、身份证号中呈现汉字等问题。这种状况下,须要以半自动校验半人工形式来找出可能存在的问题,并去除不须要的字符。
3、内容与该字段应有内容不符
姓名写了性别,身份证号写了手机号等等,均属这种问题。但该问题特殊性在于:并不能简略的以删除来解决,因为成因有可能是人工填写谬误,也有可能是前端没有校验,还有可能是导入数据时局部或全副存在列没有对齐的问题,因而要具体辨认问题类型。大数据培训
格局内容问题是比拟细节的问题,但很多剖析失误都是栽在这个坑上,比方跨表关联或 VLOOKUP 失败(多个空格导致工具认为“陈丹奕”和“陈 丹奕”不是一个人)、统计值不全(数字里掺个字母当然求和时后果有问题)、模型输入失败或成果不好(数据对错列了,把日期和年龄混了,so……)。因而,请各位务必留神这部分荡涤工作,尤其是在解决的数据是人工收集而来,或者你确定产品前端校验设计不太好的时候……
第三步:逻辑谬误荡涤
这部分的工作是去掉一些应用简略逻辑推理就能够间接发现问题的数据,避免剖析后果走偏。次要蕴含以下几个步骤:
1、去重
有的分析师喜爱把去重放在第一步,但我强烈建议把去重放在格局内容荡涤之后,起因曾经说过了(多个空格导致工具认为“陈丹奕”和“陈 丹奕”不是一个人,去重失败)。而且,并不是所有的反复都能这么简略的去掉……
我已经做过电话销售相干的数据分析,发现销售们为了抢单几乎无所不用其极……举例,一家公司叫做“ABC 管家有限公司“,在销售 A 手里,而后销售 B 为了抢这个客户,在零碎里录入一个”ABC 官家有限公司“。你看,不认真看你都看不出两者的区别,而且就算看进去了,你能保障没有”ABC 官家有限公司“这种货色的存在么……这种时候,要么去抱 RD 大腿要求人家给你写含糊匹配算法,要么肉眼看吧。
当然,如果数据不是人工录入的,那么简略去重即可。
2、去除不合理值
一句话就能说分明:有人填表时候瞎填,年龄 200 岁,年收入 100000 万(预计是没看见”万“字),这种的就要么删掉,要么按缺失值解决。这种值如何发现?提醒:可用但不限于箱形图(Box-plot).
3、修改矛盾内容
有些字段是能够相互验证的,举例:身份证号是 1101031980XXXXXXXX,而后年龄填 18 岁,咱们尽管了解人家永远 18 岁的想法,但得悉实在年龄能够给用户提供更好的服务啊(又瞎扯……)。在这种时候,须要依据字段的数据起源,来断定哪个字段提供的信息更为牢靠,去除或重构不牢靠的字段。
逻辑谬误除了以上列举的状况,还有很多未列举的状况,在实际操作中要酌情处理。另外,这一步骤在之后的数据分析建模过程中有可能反复,因为即便问题很简略,也并非所有问题都可能一次找出,咱们能做的是应用工具和办法,尽量减少问题呈现的可能性,使剖析过程更为高效。
第四步:非需要数据荡涤
这一步说起来非常简单:把不要的字段删了。
但实际操作起来,有很多问题,例如:
把看上去不须要但实际上对业务很重要的字段删了;
某个字段感觉有用,但又没想好怎么用,不晓得是否该删;
一时看走眼,删错字段了。
前两种状况我给的倡议是:如果数据量没有大到不删字段就没方法解决的水平,那么能不删的字段尽量不删。第三种状况,请勤备份数据……
第五步:关联性验证
如果你的数据有多个起源,那么有必要进行关联性验证。例如,你有汽车的线下购买信息,也有电话客服问卷信息,两者通过姓名和手机号关联,那么要看一下,同一个人线下注销的车辆信息和线上问卷问进去的车辆信息是不是同一辆,如果不是(别笑,业务流程设计不好是有可能呈现这种问题的!),那么须要调整或去除数据。
严格意义上来说,这曾经脱离数据荡涤的领域了,而且关联数据变动在数据库模型中就应该波及。但我还是心愿揭示大家,多个起源的数据整合是非常复杂的工作,肯定要留神数据之间的关联性,尽量在剖析过程中不要呈现数据之间互相矛盾,而你却毫无觉察的状况。