数据清洗需要掌握什么知识(关于数据清洗那些事儿)
关注小聚,数据分析不迷路
在数据化运营过程中,海量的原始数据中存在着大量不完整、不一致、有异常的数据,严重影响到数据挖掘建模的执行效率,甚至可能导致挖掘结果的偏差,所以进行数据清洗就显得尤为重要,数据清洗完成后接着进行或者同时进行数据集成、变换、规约等一系列的处理,该过程就是数据预处理。
数据预处理是其中的重要环节,它直接决定了后续数据工作的质量和价值输出。
人们通常认为,数据预处理是一个非常枯燥的部分。但它就是「做好准备」和「完全没有准备」之间的差别,也是表现专业和业余之间的差别。就像为度假做好事先准备一样,如果你提前将行程细节确定好,就能够预防旅途变成一场噩梦。
数据预处理流程
首先我们知道,数据预处理的主要内容包括数据清洗、数据集成、数据变换和数据规约。
可以用这些逐步检测并优化提升数据质量,不是每次预处理都需要做这些所有步骤,视数据情况挑选若干即可。
由于在数据分析过程中主要涉及的是数据清洗,所以本文详细讲解这一部分,那么数据清洗有哪些铁则或者经验呢?小聚这里整理如下:
数据清洗
数据清洗主要是删除原始数据集中的无关数据、重复数据,平滑噪声数据,筛选掉与挖掘主题无关的数据,补足缺失值、去除异常值,纠正错误。
一.去重
不管是外部回溯数据还是在自己数据库中拉取的数据,可能由于存储逻辑等问题,会出现很多重复数据,重复数据属于冗余数据,拿到数据所要做的第一步就是检查是否有重复数据,若有,则需要进行去重处理,在python中可以使用duplicates()函数。
二.处理异常值
异常值的定义是与均值的偏差超过两倍标准,但是在脏数据中,异常值的情况不止这一种:
1)比如一列数据你打开看全部是数字,当你把它当数值型处理,它会报错;那就得仔细查找原因,遇到比较多的情况是一列数字中夹杂了几个奇怪的字符串或者符号等元素,如果几万条数据中只有一两个这种字符,即使认真从前到后仔细查看也很难发现还浪费大量时间,效率极低。
还有一种情况比较常见,就是看起来是数字,实际上都是字符串的形式,但是以表格查看的时候是看不到字符串的引号;这两种情况可以通过查看特征类型来提前发现,在python中用type()或者dtypes()函数,两者使用对象有差别,可自行了解;
2)几种常用异常值检测方法:
- 3σ探测方法
3σ探测方法的思想其实就是来源于切比雪夫不等式。
对于任意ε>0,有:
当时,如果总体为一般总体的时候,统计数据与平均值的离散程度可以由其标准差反映,因此有:
- 一般所有数据中,至少有3/4(或75%)的数据位于平均2个标准差范围内。
- 所有数据中,至少有8/9(或88.9%)的数据位于平均数3个标准差范围内。
- 所有数据中,至少有24/25(或96%)的数据位于平均数5个标准差范围内。
所以如果我们一般是把超过三个离散值的数据称之为异常值。这个方法在实际应用中很方便的使用,但是他只有在单个属性的情况下才适用。
- z-score
Z-score是一维或低维特征空中的参数异常检测方法。该技术假定数据是高斯分,异常值是分布尾部的数据点,因此远离数据的平均值。距离的远近取决于使用公式计算的归一化数点z i的设定阈值Zthr:
其中xi是一个数据点,μ是所有点xi的平均值,δ是所有点xi的标准偏。然后经过标准化处理后,异常值也进行标准化处理,其绝对值大于Zthr:
Zthr值一般设置为2.5、3.0和3.5。该技术是使用KNIME工作流中的行过滤器节点实现的。
这种异常值处理需要结合最终需求来决定怎么处理,常见的是不处理或者按缺失值的方法处理,但是在实际场景中,异常值有时候会有非常突出的表现,比如在现金贷业务中,异常值中的坏账率远高于整体坏账水平或其他区间坏账水平,这时候异常值就得保留并作为决策阈值的参考值。
- IQR
观察箱型图,或者通过IQR(InterQuartile Range)计算可以得到数据分布的第一和第四分位数,异常值是位于四分位数范围之外的数据点。
这个方法真的很简单,因为只需要给数据排个序就行了,显然过于笼统,但在实际场景中,观察箱型图仍然是一个很好的探索数据分布的方法。
毕竟,所有复杂的探索,都是从最开始简单的探索一步步得来的嘛!
三.缺失值处理
数据缺失通常有两种情况:
- 一种是数据行记录的缺失,这通常是数据记录丢失,很难找回;
- 另一种是数据列值的缺失,可能由于某些原因,导致的数据不完整。
这里主要讨论数据列植的缺失情况,通常有如下4种处理思路:
- 丢弃
这种方法最简单明了,直接删除整行或者整列带有缺失值的记录。但是这种丢弃意味着会减少数据特征,弊端也十分明显。
如下情况,不宜直接使用丢弃的方法:
数据集总体存在大量数据记录不完整情况而且比例较大,比如超过10%,此时删除这些缺失值,就意味着会损失过多的有用信息。
带有缺失值的数据记录大量存在着明显的数据分布规律或特征,比如带有缺失值的数据记录是我们的目标标签主要集中在一类或者几类中,如果此时删除这些数据记录,将会使得对应类别的数据样本丢失大量数据,导致模型过拟合或者分类不准确。
- 补全
相对于丢弃而言,补全则是一种更加合理的处理方法。通过一定的方法将缺失的数据补上,从而形成完整的数据记录。
常用的补全方法有:
统计法:对于数值型数据,可以使用均值、加权平均值、中位数等方法补全;而对于分类型数据,一般会是用类别众数最多的数值补足。
模型法:更多的时候,我们会基于其他字段,将缺失字段作为目标变量进行预测,从而达到最为可能的补全值。
专家补全:对于一些专业性非常强的数据,可以通过自学业界专家,来补全缺失数据,这种方法在很多情况下也是一种非常重要的补全途径。
其他方法:例如随机法、特殊值法,多重填补法等。
- 真值转换法
在某些情况下,我们可能无法得知缺失值的分布规律,而且也无法应用上面的方法进行补全;或者我们认为当前的缺失记录也是数据的一种规律,不应该轻易的对缺失数据进行处理,那么此时就可以使用真值转换法来处理。
这种方法的观点是,我们承认缺失值的存在,并且把数据缺失也作为数据分布规律的一部分看待,将变量的实际值和缺失值都作为输入维度参与后续的数据处理和模型计算中。但是真实值是可以直接参与计算的,缺失值通常无法参与运算,因此需要对缺失值进行真值转换。
- 不处理
对于缺失值,不做任何处理,也是一种处理缺失值的思路。这种方式主要取决于后续的模型运算,很多模型对于缺失值有容忍度或灵活的处理方法,因此在数据预处理阶段可以不作处理。
预处理小tips
非需求数据清洗
这一点说起来非常简单:把不要的字段删了。但实际操作起来,有很多问题,例如:
把看上去不需要但实际上对业务很重要的字段删了;某个字段觉得有用,但又没想好怎么用,不知道是否该删;一时看走眼,删错字段了。
前两种情况我给的建议是:如果数据量没有大到不删字段就没办法处理的程度,那么能不删的字段尽量不删。第三种情况,请勤备份数据……
关联性验证
如果你的数据有多个来源,那么有必要进行关联性验证。例如,你有汽车的线下购买信息,也有电话客服问卷信息,两者通过姓名和手机号关联,那么要看一下,同一个人线下登记的车辆信息和线上问卷问出来的车辆信息是不是同一辆,如果不是,那么需要调整或去除数据。
严格意义上来说,这已经脱离数据清洗的范畴了,而且关联数据变动在数据库模型中就应该涉及。但我还是希望提醒大家,多个来源的数据整合是非常复杂的工作,一定要注意数据之间的关联性,尽量在分析过程中不要出现数据之间互相矛盾,而你却毫无察觉的情况。
END
聚数学院年末大福利来啦,
小聚整理汇总了官方B站所有视频相关配套资料
现在 免费送!!
关注同名公众号,免费送
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com