版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章
数据清洗
目录8.1数据清洗概述8.1.1数据清洗原理8.1.2主要数据类型8.1.3常用工具8.2数据清洗方法8.2.1重复数据处理8.2.2缺失数据处理8.2.3异常数据处理8.2.4格式内容清洗8.2.5逻辑错误清洗
8.3
数据规整8.3.1字段拆分8.3.2数据分组8.3.3数据聚合8.3.4数据分割8.3.5数据合并第8章
数据清洗
在数据开发过程中,我们采集到的海量数据一般是不完整的、有噪声的且是不一致的。如果直接将这些杂乱的数据应用到数据挖掘和可视化之中,可能会导致大量的误差出现,甚至是决策的干扰或者错误,因此必须要先经过数据清洗过程,过滤一些错误信息。
所谓数据清洗,就是试图检测和去除数据集合中的噪声数据和无关数据,处理重复数据、弥补缺失数据和知识背景中的白噪声的过程,从而达到提升数据质量的目的。数据清洗在整个数据分析过程中是不可或缺的一个环节,在实际环境下,数据清洗的时间和复杂度甚至高于数据爬取的过程。8.1数据清洗概述
数据清洗(DataCleaning)是对数据进行重新审查和校验的过程,其目的在于删除重复信息、纠正存在的错误,并提供数据一致性。
数据清洗工作是数据分析过程中的关键步骤,其结果关系到模型的最终运行效果和最终结论。而这一切操作都源自数据清洗的对象——数据的质量。部分学者认为数据质量问题应该在数据产生的源头解决,也就是说,在爬取时应尽量避免错误数据的产生。然而在实际环境下,由于各种不可避免的因素,这一目标很难达成。
基于此,数据清洗这一步骤是必然存在的,它可能会出现在数据加载到数据仓库之前的环节,也有可能在数据分析之后再进行,这完全取决于应用环节的需求,但是无论如何,这一步骤是不可能跳过的。在特定的场景下,数据清洗过程的操作具备一定的重复性,因此开发人员一般会采用可复用的方式循环执行此过程。8.1数据清洗概述8.1.1数据清洗原理
因为数据仓库中的数据是面向某个主题的数据的集合,这些数据从多个业务系统中爬取而来且包含历史数据,这样就避免不了有的数据是错误数据、有的数据相互之间有冲突,这些错误的或有冲突的数据显然不是我们分析的对象,它们被称为“脏数据”。
数据清洗是利用有关技术,如数理统计、数据挖掘或预定义的清理规则,将脏数据转化为满足数据质量要求的数据。本质上,数据清洗就是把“脏”的数据“洗掉”,它是发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性、处理无效值和缺失值等。8.1数据清洗概述8.1.2主要数据类型
不符合要求的数据主要有不完整的数据(缺失数据)、异常数据和重复数据三大类。1.缺失数据
这一类数据主要是一些必备信息的缺失,如供应商的名称、公司的名称、客户的区域信息缺失,业务系统中主表与明细表不匹配等。这一类数据过滤出来后,按缺失的内容分别写入不同Excel文件向客户提交,并要求在规定的时间内补全,补全后才写入数据仓库。8.1数据清洗概述8.1.2主要数据类型2.异常数据
异常数据产生的原因是业务系统不够健全,在接收输入后没有进行判断就直接写入后台数据库造成的,比如数值型数据输入成全角数字字符、字符串数据后面有一个回车操作、日期格式不正确、日期越界等。这一类数据也要进行分类,对于类似于全角字符、数据前后有不可见字符等问题,只能通过编码方式找出来,然后要求客户在业务系统修正之后爬取数据。日期格式不正确或者日期越界将导致系统运行失败,这一类错误同样需要修正之后再进行爬取。3.重复数据
对于这一类数据,特别是多个维度的表中会出现这种情况,将重复数据记录的所有字段导出来,让客户确认并整理。8.1数据清洗概述8.1.2主要数据类型
数据清洗是一个反复的过程,不可能在几天内完成。对于过滤掉的数据,要写入文本文件或者将过滤数据写入数据表。在开发初期,要频繁地进行沟通,不断修正错误和验证数据,以提高数据清洗的效率。需要注意的是,在数据清洗时,不要将有用的数据过滤掉,对于每个过滤规则要认真进行验证
并确认。
数据清洗的流程如图8-1所示。第一步就是获取各种形式的数据,包含脏数据;第二步是确定数据清洗的策略和方法,这部分由实际环境的需求所决定,同时会结合数理统计和数据挖掘等相关技术,实现缺失值的清洗,去除不需要的字段,填充缺失内容,修正错误的内容;第三步即重新爬取数据,此时的数据即可满足实际环境下的基本需求。8.1数据清洗概述
图8-1数据清洗的流程8.1数据清洗概述8.1.3常用工具
在数据清洗和分析过程中,经常使用基于Python的第三方工具辅助完成,这些工具使用简单,效率较高。常用的数据清洗和分析工具有NumPy、Pandas和Scipy等,本节主要针对NumPy和Scipy进行简单介绍。1.NumPyNumPy(NumericalPython)是Python的一种开源的数值计算扩展工具。它可用来存储和处理大型矩阵,比Python自身的嵌套列表结构高效得多,支持大量的维度数组与矩阵运算。此外,针对数组运算提供大量的数学函数库。8.1数据清洗概述8.1.3常用工具NumPy提供了许多高级的数值编程工具,常用于科学计算中,主要包括:
一个强大的N维数组对象(Array);
成熟的函数库;
用于整合C/C++和FORTRAN代码的工具包;
实用的线性代数、傅里叶变换和随机数生成函数。NumPy通常与Scipy(ScientificPython)和Matplotlib(绘图库)一起使用,这种组合广泛用于替代MATLAB。NumPy现已被视为一种更加现代和完整的编程工具。8.2数据清洗方法
本节主要针对数据源中的重复数据、缺失数据和异常数据进行清洗,同时涉及部分字段拆分问题。需要说明的是,在爬取的数据中,一般不会同时存在以上3种类型的数据,常见的是两种甚至一种类型的数据。读者在实际操作过程中,应根据开发需求,有针对性地选择恰当的实现方案。8.2.1重复数据处理
在数据库或者数据仓库中,理论上一个实体应该只有一条与之对应的记录。但很多原因可能导致集成后的数据出现同一实体对应多条记录的情况,例如数据录入出错、数据不完整、数据缩写等。在数据清洗过程中,重复记录的检测与清除是一项非常重要的操作。
8.2数据清洗方法8.2.1重复数据处理1.重复数据的分类
重复数据主要分为两类。
(1)完全重复数据
完全重复数据即两个数据行的内容完全一致,这类数据很容易辨别。
针对完全重复数据的检测,一个最简单的方式就是对于数据集进行排序,然后通过比较相邻的记录并进行合并操作,或者直接采用第三方包中提供的方法去除重复项。
(2)不完全重复数据
不完全重复数据是指客观上表示现实世界中的同一实体,但是由于表达方式不同,或者拼写错误等原因,导致数据存在多条重复信息。8.2数据清洗方法8.2.1重复数据处理
对于不完全重复数据,检查可能出现的重复记录需要有充足的计算能力,因为检查一条记录就需要遍历整个数据集。也就是说,对这个数据集的检查需要所有的记录之间实现两两匹配,其计算的复杂度为O(n2)。对于可能重复的记录检测需要使用模糊匹配的逻辑,也可以通过计算字符串的相似度,模糊匹配出疑似的重复数据,然后结合其他的参考字段进行查重操作。
在数据清洗过程中,重复值处理操作并非只执行一次。一般在数据清洗的第一步执行第一次的重复值去除操作,此时可以简化后续的操作,减少数据量,但是在后续清洗过程中,可能会产生新的重复值,因此在后续的数据清洗环节,仍需要重复执行此操作。具体执行阶段的设计和执行周期由目标任务决定。8.2数据清洗方法8.2.1重复数据处理2.去除完全重复数据
在Pandas中提供了重复数据的判断和删除方法:duplicated()和drop_duplicates()。
(1)duplicated()duplicated()用于指定列数据重复项的判断,返回的内容是:指定列重复行。
(2)drop_duplicates()drop_duplicates()用于删除指定列重复项的数据,返回的内容是:新产生的DataFrame。
8.2数据清洗方法8.2.2缺失数据处理
记录中的某个或者某些属性的值是不完整的,这些值被称为缺失值。缺失值的产生原因多种多样,主要分为机械原因和人为原因。
机械原因
由于机械原因导致的数据收集或保存的失败而造成的数据缺失,比如数据存储的失败、存储器损坏、机械故障导致某段时间数据未能收集等。
人为原因
人为原因是由于人的主观失误、历史局限或有意隐瞒造成的数据缺失,比如被访人拒绝透露相关问题的答案或者回答的问题是无效的、数据录入人员漏录入数据等。
对于缺失值的处理,主要分为删除法和插补法。8.2数据清洗方法8.2.2缺失数据处理
记录中的某个或者某些属性的值是不完整的,这些值被称为缺失值。缺失值的产生原因多种多样,主要分为机械原因和人为原因。
机械原因
由于机械原因导致的数据收集或保存的失败而造成的数据缺失,比如数据存储的失败、存储器损坏、机械故障导致某段时间数据未能收集等。
人为原因
人为原因是由于人的主观失误、历史局限或有意隐瞒造成的数据缺失,比如被访人拒绝透露相关问题的答案或者回答的问题是无效的、数据录入人员漏录入数据等。
对于缺失值的处理,主要分为删除法和插补法。8.2数据清洗方法8.2.2缺失数据处理1.删除法
(1)识别缺失值
在Pandas中提供了识别缺失值的方法:isnull(),以及识别非缺失值的方法:notnull()。
基本语法如下:isnull():识别缺失值notnull():识别非缺失值
这两个方法是元素级别的判断,即将对应的所有元素的位置都列出来,元素为空或者NA就显示True,否则就是False。直接返回bool值类型的数据矩阵。
此外,还可以结合其他的函数,辅助缺失值的判断。8.2数据清洗方法8.2.2缺失数据处理(2)删除缺失值
删除法是指将缺失值的特征或者记录删除。删除法分为删除观测记录和删除特征两种,它属于通过减少样本量来换取信息完整度的一种方法,是最简单的缺失值处理方法。Pandas中提供了简单的删除缺失值的方法:dropna(),通过参数控制,此方法既可以删除观测记录,也可以删除特征。2.插补法
插补法与删除法不同,它使用建议的数据替换缺失值,从而保留当前记录中的其他维度数据。表8-2列出了常见的插补方法。8.2数据清洗方法8.2.2缺失数据处理
表8-2常见的插补方法
下面介绍替换法和插值法。(1)替换法
替换法是指用一个特定的值替换缺失值。由于数据类型不同,处理方法也不尽相同。当缺失值为数值型时,可以利用固定的数据或者统计量来替代缺失值;当缺失值的类型为字符型时,则可以选择使用特定的字符替代缺失值。插补方法具体操作均值/中位数/众数插补
根据属性值的类型,用该属性取值的平均数/中位数/众数进行插补替换法
将缺失的属性值用一个特定的值替换最近邻插补
在记录中找到与缺失样本最接近的样本的该属性值插补回归方法
对带有缺失值的变量,根据已有数据和与其有关的其他变量(因变量)的数据建立拟合模型来预测缺失的属性值插值法利用已知点拟合的插值函数f(x),未知值由对应点xi求出的函数值f(xi)近似代替8.2数据清洗方法8.2.2缺失数据处理
(2)插值法
替换法使用的难度较低,但是统一替换相同的数据,会影响数据的标准差,导致信息量的变动。在面对数值类型的缺失问题时,还可以使用插值法。
常用的插值法有线性插值、多项式插值和样条插值等。
线性插值是一种较为简单的插值方法,它针对已知的值求出线性方程,通过求解线性方程式得到缺失值。
多项式插值利用已知的值拟合一个多项式,使得现有的数据满足这个多项式,再利用这个多项式求解缺失值。常见的多项式插值有拉格朗日插值和牛顿插值等。
样条插值是以可变样条来拟合一条经过一系列点的光滑曲线的插值方法。插值的样条由一些多项式组成,每个多项式都由相邻两个数据点决定,这样可以保证两个相邻多项式及其导数在衔接处是连续的。8.2数据清洗方法8.2.3异常数据处理
异常值是指数据中个别数值明显偏离其余的数值,有时也称为离群点。检测异常值就是检验数据中是否有输入错误及是否含有不合理的数据。如果计算分析过程中有大量异常值的存在,而且算法对于异常值敏感,那么数据分析的结果将产生偏差,甚至出现错误。
另一方面,异常值在某些场景下反而是非常重要的,例如疾病预测。通常健康人的身体指标在某些维度上是相似的,如果一个人的身体指标出现了异常,那么他的身体在某些方面肯定发生了改变,当然这种改变并不一定是由疾病引起(通常被称为噪声点)的,但异常的发生和检测是疾病预测一个重要起始点。相似的操作也可以应用到信用欺诈、网络攻击等场景中。8.2数据清洗方法8.2.3异常数据处理
针对数值类型,一般异常值的检测方法有基于统计的方法、基于聚类的方法及专门检测异常值的方法等。
基于统计的方法一般用于连续型的数据,可以通过简单的统计量或者使用散点图观察异常值的存在。针对简单的数据计算,可以使用describe()方法对统计字段进行描述性分析。而对更专业的数据计算,可以使用
原则实现数据分析。
表8-4常见的异常值处理方法异常值处理方法具体描述删除含有异常值的记录直接将含有异常值的记录删除按照缺失值处理将异常值视为缺失值,利用缺失值处理的方法进行处理平均值修正用前后两个观测值的平均值修正该异常值不处理直接在具有异常值的数据集上进行数据挖掘8.2数据清洗方法8.2.4格式内容清洗
如果数据由系统日志而来,那么通常在格式内容方面会与元数据的描述一致。而如果数据由人工收集或用户填写而来,则有可能在格式内容上存在一些问题。简单来说,格式内容问题有以下几类。1.时间、日期、数值、全半角等显示格式不一致
这种问题通常与输入有关,在整合多来源的数据时也有可能遇到此类问题,将其处理成某种一致的格式即可。2.内容中有不该存在的字符
某些内容可能只包括一部分字符,比如身份证号是数字或数字+字母,中国人姓名是汉字,而可能出现姓名中存在数字、身份证号中出现汉字等问题。这种情况下,需要以半自动校验半人工方式来找出可能存在的问题,并去除不需要的字符。8.2数据清洗方法8.2.4格式内容清洗3.内容与该字段应有内容不符
这种问题很常见,比如姓名错写为性别、身份证号错写为手机号等。但该问题的特殊性在于:并不能以简单的删除来处理。因为这有可能是人工填写错误,也有可能是前端没有校验,还有可能是导入数据时部分或全部存在列没有对齐等,因此要详细识别问题产生的原因。
格式内容问题一般是细节的问题,但很多分析失误都在此处出现,比如统计值不全(数字中添加字母等)、模型输出失败或效果不好(数据列混淆等)。8.2.5逻辑错误清洗8.2数据清洗方法8.2.5逻辑错误清洗
逻辑错误清洗工作是去掉一些使用简单逻辑推理就可以直接发现问题的数据,防止数据分析结果走偏。逻辑错误清洗主要包含以下内容。1.去除不合理值
不合理的数值类似于异常值,可以通过简单的统计量或者使用散点图观察到它们的存在。
除了算术统计,还可以通过人工的方式筛选出这些不合理值。2.修正矛盾内容
有些字段是可以互相验证的,例如,我们知道身份证号的中间几位是个人的出生年月,在填写年龄时,如果两者严重不符,则被认为是矛盾的数据。在这种情况下,需要根据字段的数据来源,来判定哪个字段提供的信息更为可靠,去除或重构不可靠的字段。
8.3数据规整8.3数据规整
现有数据往往是不同时期采集的,人工操作多,数据输入操作不严谨,有时会存在以下质量问题:数据编码问题、数据分层问题、数据特征及描述问题。
数据规整是指,根据标准规范,对采集的原始数据进行层次划分、编码赋值、格式转换等处理,以达到入库或更新的要求。
针对不同的数据来源和种类,数据规整的方法与思路不同。一般在完成数据清洗的基础上,再进行数据规整的操作。8.3.1字段拆分
如果数据中有包含多个信息单元的字符串字段,在将该字段中的值拆分为多个单独的字段的情况下,数据分析将更为轻松。在Python中,可以自定义拆分选项,基于指定的分隔符来分隔值。8.3数据规整8.3.2数据分组
对于通过爬虫获得的数据,虽然经过数据清洗、字段拆分等手段进行了初步处理,但由于数据庞杂,还不能直接进入对数据的分析阶段。在此之前,有必要对数据进行分组处理,以反映数据分布的特征及规律。
数据分组是根据统计研究的需要,将原始数据按照某种标准划分成不同的组别,分组后的数据称为分组数据。数据分组的主要目的是观察数据的分布特征。数据分组后,再计算出各组中数据出现的频数,就形成了一张频数分布表。8.3数据规整8.3.2数据分组
对于非数值型数据,依据属性的不同将其划分为若干组;对于数值型数据,依据数值的不同将数据划分为若干组。分组后,要使组内的差距尽可能小,而组与组之间则有明显的差异,从而使大量无序、混沌的数据变为有序、层次分明、显示总体数量特征的信息。
数据分组应遵循两个基本原则。
(1)穷尽性原则
穷尽性原则要求每一项数据都能划归到某个组中,不会产生“遗漏”现象。
(2)互斥性原则
互斥性原则要求将数据分组后,各个组的范围应互不相容、互为排斥。即每个数据在特定的分组标志下只能归属到某个组,而不能同时或可能同时归属到某几个组。8.3数据规整8.3.3数据聚合
数据聚合是指任何能够从数组产生标量值的数据转换过程,可以简单地将其理解为统计计算,如mean()、sum()、max()等。数据聚合本身与分组并没有直接关系,在任何一列(行)或全部列(行)上都可以进行。当这种运算被应用在分组数据上时,结果可能会变得更有意义。基于此,经常把分组和聚合操作组合在一起,执行一个完整的功能。
针对DataFrameGroupby对象,可以应用的聚合运算方法有以下几种。1.使用内置的方法
常见的内置聚合运算方法如表8-5所示。这些方法为查看每一组数据的整体情况和分布状态提供了良好的支持。8.3数据规整8.3.3数据聚合
表8-5常见的内置聚合运算方法聚合方法具体描述count分组数目,非NA值head前n个值sum求和mean非NA值平均数聚合方法具体描述median非NA值的算术中位数std、var分母为n-1的标准差和方差min、max非NA值最小值、最大值prod非NA值的积first、last第一个和最后一个非NA值8.3数据规整8.3.4数据分割1.数据分割简介
数据分割是指把逻辑上为统一整体的数据分割成较小的、可以独立管理的物理单元进行存储,以便进行数据的重构、重组和恢复,从而提高创建索引和顺序扫描效率。
数据分割的目的是把数据划分成小的物理单元,这样在管理数据时就会有更大的灵活性。小批量的存储单元具有容易重构、自由索引、顺序扫描、容易重组、容易恢复和监控等优点,而网络爬虫往往能获取到海量数据,如果期望达到大批量存储的优势,数据分割则是数据获取后经常采用的操作。
数据分割的标准通常可选择按日期、地域、业务领域或组织单位等来进行分割,也可以按多个分割标准的组合进行具体实施,但一般情况下,分割标准应包括日期信息。数据分割主要采用以下两种方式。8.3数据规整8.3.4数据分割
(1)水平分割
水平分
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度柴油行业自律监管合同
- 纸制容器市场发展预测和趋势分析
- 2024年度出租车行业车辆加油服务合同
- 2024年度国际棉纺织品贸易合同
- 伤风油市场发展现状调查及供需格局分析预测报告
- 跆拳道服项目评价分析报告
- 胶合板表面处理机市场发展预测和趋势分析
- 2024年度环保治理服务合同(标的:企业废气处理工程)
- 2024年度专利权许可合同许可范围与许可费用
- 运动套装市场发展预测和趋势分析
- 2024-企业与高校科研合作协议完整版
- 职业生涯规划-体验式学习智慧树知到期末考试答案章节答案2024年华侨大学
- 25题机器视觉算法岗位常见面试问题含HR问题考察点及参考回答
- MOOC 流行歌曲演唱-武汉理工大学 中国大学慕课答案
- (正式版)SHT 3227-2024 石油化工装置固定水喷雾和水(泡沫)喷淋灭火系统技术标准
- 中小学人工智能教育方案
- 脱发知识课件
- 新部编版小学三年级上册语文第三单元基础过关卷(单元测试)
- 康复治疗技术生涯发展展示
- 《哈腰挂》的音乐手法
- PEEK聚醚醚酮行业报告
评论
0/150
提交评论