第5 章 大数据清洗 知识结构 数据清洗是数据预处理的重要部分,主要的工作是检查数据的完整性及数据的一致 性,对其中的噪音数据进行平滑,对丢失的数据进行填补和对重复数据进行消除等。 5.1 数据质量与数据清洗 如何把繁杂的大数据变成一个完备的高质量数据集,清洗处理过程尤为重要。只有 通过清洗之后,才能分析得到可信的、可用于支撑决策的信息。高质量的数据有利于通过 数据分析得到准确的结果。 高质量的数据能够使数据分析更简单有效。统计分析关注数据的共性,利用数据的 规律性进行处理;而数据清洗则关注数据的个性,针对数据的差异性进行处理。有规律的 数据便于统一处理,存在差异的数据难以统一处理,所以从某种意义上说,数据清洗比统 计分析更费时间、更困难。对现有的数据进行有效的清洗、合理的分析,使之能够满足决 策与预测服务的需求。数据质量与数据清洗的有关概念介绍如下。 5.1.1 数据质量 数据是信息的载体,高质量的数据是通过数据分析获得有意义结果的基本条件。数 130 数据科学与大数据技术导论 据丰富、信息贫乏的一个原因就是缺乏有效的数据分析技术;而另一个重要原因则是数据 质量不高,如数据不完整、数据不一致、数据重复等,导致数据不能有效地被利用。数据质 量管理如同产品质量管理一样贯穿于数据生命周期的各个阶段,提高数据质量涉及统计 学、人工智能和数据库等多个领域。 1. 数据质量的定义与表述 数据是进行数据分析的最基本资源,高质量的数据是保证完成数据分析的基础。尤 其是大数据具有数据量巨大、数据类型繁多和非结构化等特征。为了快速而准确地获得 分析结果,提供高质量的大数据尤其重要。数据质量与绩效之间存在着直接关联,高质量 的数据可以满足需求,有益于获得更大价值。 数据质量评估是数据管理面临的首要问题。一种定义是数据质量是数据适合使用的 程度;另一种定义是数据质量是数据满足特定用户期望的程度。 利用准确性、完整性、一致性和及时性来描述数据质量,通常将其称为数据质量的四 要素,下面将逐一介绍。 1)数据的准确性 数据的准确性是数据真实性的描述,即是所存储数据的准确程度的描述,数据不准确 的表现形式是多样的,例如字符型数据的乱码现象、异常大或者异常小的数值、不符合有 效性要求的数值等。由于发现没有明显异常错误的数据十分困难,所以对数据准确性的 监测也是一项困难的工作。 2)数据的完整性 完整性是数据质量最基础的保障。在源数据中,可能由于疏忽,甚至为了保密使系统 设计人员无法得到某些数据项的数据。假如这个数据项正是知识发现系统所关心的数 据,那么对这类不完整的数据就需要填补缺失的数据。缺失数据可分为两类:一类是这 个值实际存在但是没有被观测到;另一类是这个值实际上根本就不存在。应尽一切努力 避免缺失数据,或至少使这种现象最小化。 3)数据的一致性 数据的一致性主要包括数据记录规范的一致性和数据逻辑的一致性。 (1)数据记录规范的一致性。数据记录规范的一致性主要是指数据编码和格式的一 致性,例如网站的用户ID 是15 位的数字,商品ID 是10 位数字,商品包括20 个类目, IP 地址一定是用“”分隔的4个0~255 的数字组成等,都遵循确定的规范,所定义的数据也 遵循确定的规范约(.) 束。例如完整性的非空约束、唯一值约束等。这些规范与约束使得数 据记录有统一的格式,进而保证了数据记录的一致性。 (2)数据逻辑的一致性。数据逻辑的一致性主要是指标统计和计算的一致性,例如 PV≥UV,新用户比例在0~1等。具有逻辑上不一致性的答案可能以多种形式出现,例 如,许多调查对象说自己开车去学校,但又说没有汽车;或者调查对象说自己是某品牌的 重度购买者和使用者,但同时又在熟悉程度量表上给了很低的分值。 在数据质量中,保证数据逻辑的一致性比较重要,但也是比较复杂的工作。 4)数据的及时性 数据从产生到可以检测的时间间隔称为数据的延时时间。虽然分析数据的实时性要 第 5 章 大数据清洗 131 求并不是太高,但是如果数据延时时间需要两三天,或者每周的数据分析结果需要两周后 才能出来,那么分析的结论可能已经失去时效性。如果某些实时分析和决策需要用到的 延时时间为小时或者分钟级的数据,这时对数据的时效性要求就更高。所以及时性也是 衡量数据质量的重要因素之一。 2. 数据质量的提高策略 可以从不同的角度考虑来提高数据质量,下面介绍从问题的发生时间或者提高质量 所需的相关知识这两个角度来考虑提高数据质量的策略。 1)基于数据的整个生命周期的数据质量提高策略 (1)从预防的角度考虑,在数据生命周期的任何一个阶段,都应有严格的数据规划和 约束来防止脏数据的产生。 (2)从事后诊断的角度考虑,由于数据的演化或集成,脏数据逐渐涌现,需要应用特 定的算法检测出现的脏数据。 2)基于相关知识的数据质量提高策略 (1)提高策略与特定业务规则无关,例如数据拼写错误、某些缺失值处理等,这类问 题的解决与特定的业务规则无关,可以从数据本身寻找特征来解决。 (2)提高策略与特定业务规则相关,相关的领域知识是消除数据逻辑错误的必需 条件。 由于数据质量问题涉及多方面,成功的数据质量提高方案必然要综合应用上述各种 策略。目前,数据质量的研究主要围绕数据质量的评估和监控,以及从技术的角度保证和 提高数据质量来展开。 3. 数据质量评估 数据质量评估和监控是解决数据质量问题的基本问题。尽管对数据质量的定义不 同,但一般认为数据质量是一个层次分类的概念,每个质量类都分解成具体的数据质量维 度。数据质量评估的核心是具体地评估各个维度,数据质量评估的12 个维度如下。 1)数据规范 数据规范是对数据标准、数据模型、业务规则、元数据和参考数据进行有关存在性、完 整性、质量及归档的测量标准。 2)数据完整性 数据完整性准则是对数据进行存在性、有效性、结构、内容及其他基本数据特征的测 量标准。 3)重复性 重复是对存在于系统内或系统间的特定字段、记录或数据集重复的测量标准。 4)准确性 准确性是对数据内容正确性进行测量的标准。 5)一致性和同步性 一致性和同步性是对各种不同的数据仓库、应用和系统中所存储或使用的信息等价 程度的测量,以及使数据等价的处理流程的测量标准。 132 数据科学与大数据技术导论 6)及时性和可用性 及时性和可用性是在预期时段内数据对特定应用的及时程度和可用程度的测量 标准 7 。 )易用性和可维护性 易用性和可维护性是对数据可被访问和使用的程度,以及数据能被更新、维护和管理 程度的测量标准。 8)数据覆盖性 数据覆盖是对数据总体或全体相关对象数据的可用性和全面性的测量标准。 9)质量表达性 质量表达性是进行有效信息表达以及如何从用户中收集信息的测量标准。 10)可理解性、相关性和可信度 可理解性、相关性和可信度是数据质量的测量标准,以及对业务所需数据的重要性、 实用性及相关性的测量标准。 11)数据衰变性 数据衰变性是对数据负面变化率的测量标准。 12)效用性 效用性是数据产生期望业务交易或结果程度的测量标准。 在评估一个具体项目的数据质量时,首先需要选取几个合适的数据质量维度,再针对 每个所选维度制定评估方案,选择合适的评估手段进行测量,最后分析和合并所有质量评 估结果。 5.1.2 数据质量提高技术 数据质量提高技术可以分为实例层和模式层两个层次。在数据库领域,关于模式层 的应用较多,而在数据质量提高技术的角度主要关注根据已有的数据实例,重新设计和改 进模式的方法,即主要关注数据实例层的问题。数据清洗是数据质量提高技术的主要技 术,数据清洗的目的是为了消除脏数据,进而提高数据的可利用性,主要消除异常数据、清 除重复数据、保证数据的完整性等。数据清洗的过程是指通过分析脏数据产生的原因和 存在形式,构建数据清洗的模型和算法来完成对脏数据的清除,进而实现将不符合要求的 数据转化成满足数据应用要求的数据,为数据分析与建模建立基础。 基于数据源数量的考虑,数据质量问题可分为单数据源的数据质量问题和多数据源 的数据质量问题,并进一步分为模式和实例两个方面,如图5-1所示。 1. 单数据源的数据质量 单数据源的数据质量问题可以分为模式层和实例层两类问题。 1)模式层 一个数据源的数据质量取决于控制这些数据的模式设计和完整性约束。例如,由于 对数据的输入和存储没有约束,可能会造成错误和不一致。因此,出现模式相关的数据质 量问题是因为缺乏合适的特定数据模型和特定的完整性约束。单数据源的模式层质量问 题如表5-1所示。 第 5 章 大数据清洗 133 图5- 1 数据质量问题分类 表5- 1 单数据源的模式层质量问题 问题范围脏数据原因 不合法值字段Birthday=155.3.2.36 超出值域范围 违反属性依赖记录Age=404.Birthday=155.2.6.36 Age与Birthday应保持 Age=当前年-Birth 依赖关系 违反唯一性记录类型Provider1:name="A1" ,No="G001" Provider2:name="A2" ,No="G001" 供应商号不唯一 违反参照完整性数据源Provider:name="A1" ,CITY="101" 编号为101的城市不存在 2)实例层 与特定实例问题相关的错误和不一致错误等不能在模式层得到预防,例如拼写错误。 不唯一的模式层约束也不能够防止重复的实例,例如同一现实实体的记录可能以不同的 字段值输入两次。单数据源的实例级质量问题举例如表5-2所示。 表5- 2 单数据源的实例级质量问题 问题范围脏数据原因 空值字段Birth=dd/mm/yy 该属性没有输入相应值 拼写错误字段City= “ -- ” 一般为数据录入错误 模糊的值缩写字段Position= “DBProg” DBProg,意义不明 134 数据科学与大数据技术导论 续表 问题范围脏数据原因 多值嵌入字段Name= “科技开发公司123456” 在一个字段中输入多个字段的值 字段值错位字段City= “海淀区” 某一个属性值输入另一个字段中 违反属性依赖记录City= “天津” zip=3760000 城市与其邮编不对应 重复记录记录类型 供应商1:(“科技开发公司”,“1”) 供应商2:(“科技开发公司”,“1”) 同一个供应商信息输入了2次 冲突记录记录类型 供应商1:(“科技开发公司”,“1”) 供应商1:(“科技开发公司”,“2”) 同一个供应商使用不同的值表示 引用错误数据源 供应商:Name= “科技开发公司”, city= “10” 存在编号为10 的城市,但是供应商 与城市编号不能一一对应 3)四种不同的问题 无论模式层的问题,还是实例层问题,都可以分成字段、记录、记录类型和数据源等四 种不同的问题。 (1)字段:错误仅局限于单个字段值中。 (2)记录:错误表现在同一个记录中不同字段值之间出现的不一致。 (3)记录类型:错误表现同一个数据源中不同记录之间的不一致关系。 (4)数据源:错误表现同一个数据源中的某些字段和其他数据源中相关值的不一致 关系。 2. 多数据源的质量问题 在多个数据源情况下,上述问题表现更为严重。这是因为每个数据源都是为了特 定的应用而单独开发、部署和维护,进而导致数据管理、数据模型、模式设计和产生的 实际数据不同。每个数据源都可能包含脏数据,而且多个数据源中的数据可能出现不 同的表示、重复和冲突等。多数据源的数据质量问题也可以分为模式层和实例层两类 问题 1 。 )模式层 在模式层,模式设计的主要问题是命名冲突和结构冲突。 (1)命名冲突。命名冲突主要表现为不同的对象使用同一个命名和同一对象可能使 用多个命名。 (2)结构冲突。结构冲突存在许多不同的情况,一般是指不同数据源中同一对象有 不同的表示,如不同的组成结构、不同的数据类型、不同的完整性约束等。 2)实例层 除了模式层冲突,也出现了许多实例层冲突,即数据冲突。 (1)由于不同的数据源中的数据表示可能不同,单数据源中的问题在多数据源中都 可能出现,例如重复记录、冲突的记录等。 (2)在整个的数据源中,尽管有时不同的数据源中有相同的字段名和类型,但仍可能 存在不同的数值表示,例如对性别的描述。数据源A中可能用0/1来描述;数据源B中 135 第 5 章 大数据清洗 可能用F/M来描述;或者对一些数值的不同表示,例如数据源A采用米作为度量单位, 而数据源B采用厘米作为度量单位。 (3)不同数据源中的信息可能表示在不同的聚集级别上,例如一个数据源中信息可 能指的是每种产品的销售量,而另一个数据源中信息可能指的是每组产品的销售量。 3. 实例层数据清洗 数据清洗主要研究如何检测并消除脏数据,以提高数据质量。数据清洗的研究主要 是从数据实例层的角度考虑来提高数据质量。 数据清洗是利用有关技术,如数理统计、数据挖掘或预定义的清洗规则将脏数据转化 为满足数据质量要求的数据,如图5-2所示。 图5- 2 数据清洗的流程 5.1.3 数据清洗算法的标准 数据清洗是一项与领域密切相关的工作,由于各领域的数据质量不一致、充满复杂 性,所以还没有形成通用的国际标准,只能根据不同的领域制定不同的清洗算法。数据清 洗算法的衡量标准主要包含下述几方面。 1. 返回率 返回率是指重复数据被正确识别的百分率。 2. 错误返回率 错误返回率是指错误数据占总数据记录的百分比。 3. 精确度 精确度是指算法识别出的重复记录中的正确的重复记录所占的百分比,计算方法 如下: 精确度=100%-错误返回率 136 图5-3数据清洗过程 数据科学与大数据技术导论 5.1.4 数据清洗的过程与模型 数据清洗的基本过程如图5-3所示,主要步骤如下: 1. 数据分析 在数据清洗之前,对数据进行分析,对数据的质 量问题有更为详细的了解,有利于选取更好的方法 来设计清洗方案。 2. 定义清洗规则 通过数据分析,掌握了数据质量的信息后,针对 各类问题制定清洗规则,如对缺失数据进行填补策 略选择等。 3. 规则验证 检验清洗规则的效率和准确性。在数据源中随 机选取一定数量的样本进行验证。 4. 清洗验证 当不满足清洗要求时要对清洗规则进行调整和 改进。真正的数据清洗过程中需要多次迭代地进行 分析、设计和验证,直到获得满意的清洗规则。它们 的质量决定了数据清洗的效率和质量。 5. 清洗数据中存在的错误 执行清洗方案,对数据源中的各类问题进行清 洗操作。 6. 干净数据的回流 执行清洗方案后,将清洗后符合要求的数据回 流到数据源中。 5.不完整数据清洗 2 不完整数据的清洗是指对缺失值的填补,准确填补缺失值与填补算法密切相关,在这 里介绍常用的不完整数据的清洗方法。 5.2.1 基本方法 1. 删除对象的方法 如果在信息表中含有缺失信息属性值的对象(元组,记录), 那么将缺失信息属性值的 对象删除,从而得到一个不含有缺失值的完备信息表。这种方法虽然简单易行,但只有在 被删除的含有缺失值的对象与信息表中的总数据量相比非常小的情况下有效。这种方法 是通过减少历史数据来换取信息的完备,会导致资源的大量浪费,因为丢弃了大量隐藏在 这些对象中的信息。在信息表中的对象很少的情况下,删除少量对象将严重影响信息表 137 第 5 章 大数据清洗 信息的客观性和结果的正确性。当每个属性空值的百分比变化很大时,它的性能将变得 非常差。因此,当缺失数据所占比例较大,特别当缺失数据非随机分布时,这种方法可能 导致数据发生偏离,从而引出错误的数据分析与结论挖掘。 2. 数据补齐方法 数据补齐方法是用某值去填充空缺值,从而获得完整数据的方法。通常基于统计学 原理,根据决策表中其余对象取值的分布情况来对一个缺失值进行填充,例如用其余属性 的平均值或中位值等来进行填充。缺失值填充方法主要分单一填补法和多重填补法。其 中单一填补法是指对缺失值构造单一替代值来填补,常用的方法有取平均值或中间数填 补法、回归填补法、最大期望填补法、近补齐填补法等,采用与有缺失的观测最相似的那条 观测的相应变量值作为填充值。单值填充方法不能反映原有数据集的不确定性,会造成 较大的偏差。多重填补法是指用多个值来填充,然后用针对完整数据集的方法进行分析 得出综合的结果,比较常用的有趋势得分法等。这类方法的优点在于通过模拟缺失数据 的分布,可以较好地保持变量间的关系;其缺点在于计算复杂。填补缺失值主要是为了防 止数据分析时,由于空缺值导致的分析结果偏差。但这种填补方法,对于填补单个数据, 只具有统计意义,不具有个体意义。下面介绍几种数据补齐的方法。 1)特殊值填充 特殊值填充是将空值作为一种特殊的属性值来处理,它不同于其他的任何属性值。 例如所有的空值都用未知填充,这可能导致严重的数据偏离,一般不使用。 2)平均值填充 平均值填充将信息表中的属性分为数值属性和非数值属性来分别进行处理。如果空 值是数值型的,就根据该属性在其他所有对象中取值的平均值或中位数来填充该缺失的 属性值;如果空值是非数值型的,就根据统计学中的众数原理(众数是一组数据中出现次 数最多的数值), 用该属性在其他所有对象中取值次数最多的值(即出现频率最高的值)来 补齐该缺失的属性值。另外有一种与其相似的方法叫条件平均值填充法。在该方法中, 缺失属性值的补齐同样是靠该属性在其他对象中的取值求平均得到,但不同的是用于求 平均的值并不是从信息表所有对象中取,而是从与该对象具有相同决策属性值的对象中 取得。这两种数据的补齐方法,其基本的出发点都是一样的,以最大概率可能的取值来补 充缺失的属性值,只是在具体方法上有一点不同。与其他方法相比,它是用现存数据的多 数信息来推测缺失值。 3)就近补齐 就近补齐对于一个包含空值的对象,在完整数据中找到一个与它最相似的对象,然后 用这个相似对象的值来进行填充。不同的问题可能选用不同的标准来对相似进行判定。 该方法简单,利用了数据间的关系来进行空值估计,但这个方法的缺点在于难以定义相似 标准,主观因素较多。 4)K最近距离邻填充 K最近距离邻法填充首先是根据欧式距离或相关分析来确定距离具有缺失数据样 本最近的 k 个样本,将这 k 个值加权平均来估计该样本的缺失数据。这种方法与均值插 补的方法一样,都属于单值插补,不同的是它用层次聚类模型预测缺失变量的类型,再以 138 数据科学与大数据技术导论 该类型的均值插补。假设X=(x1,xp ) Y 为存在缺失值的变 x2,…,为信息完全的变量, 量,那么首先对 X 或其子集行聚类,然后按缺失个案所属类来插补不同类的均值。 5)回归法 基于完整的数据集来建立回归模型。对于包含空值的对象,将已知属性值代入方程 来估计未知属性值,以此估计值来进行填充。当变量不是线性相关或预测变量高度相关 时会导致有偏差的估计。 回归法使用所有被选入的连续变量为自变量,存在缺失值的变量为因变量建立回归 方程,在得到回归方程后使用此方程对因变量相应的缺失值进行填充,具体的填充数值为 回归预测值加上任意一个回归残差使它更接近实际情况。当数据缺失比较少、缺失机制 比较明确时可以选用这种方法。 5.2.2 基于k-NN 近邻缺失数据的填充算法 k-NN 近邻缺失数据的填充算法是一种简单快速的算法,它利用本身具有完整记录 的属性值实现对缺失属性值的估计,应用了欧氏距离计算。 (1)设k-NN 分类的训练样本用 n 维属性描述,每个样本代表 n 维空间的一个点,所 有的训练样本都存放在 n 维模式空间中。 (2)给定一个未知样本,-找出最接近未知样本的 k 个训 kNN 分类法搜索模式空间, 练样本。这表明 k 个训练样本是未知样本的 k 个近邻。临近性用欧氏距离定义,二维平 面上两点a(x1,y1)与b(x2,间的欧氏距离: 2 (2+ ( y1,与 y( 2b) ( -xy2)22, + ( 间的欧氏距离 2+ ( : z2) d12=x1-x2)y1-y2) 三维空间两点a(x1,z1) x2,z2) 2 d12=x1y1-y2)z1 两个 n 维向量a(x11,x1) x21,x2) x12,…, n 与b(x22,…, n 间的欧氏距离: 2 d12= Σ(n) (x1k -x2k ) k=1 也可以表示成向量运算的形式: (b)(b)所有(a) x, d12=-a-T (3)设 z 是需要测试的未知样本, 的训练样本(y)∈D,未知样本的最临近样 本集设为Dz 。 基于k-NN 近邻缺失数据填充算法描述如下。 1. 基于k-NN 近邻缺失数据的填充算法描述 (1) k 是最临近样本的个数, D 是训练样本集。通过对数据做无量纲处理(标准化处 理), 来消除量纲对缺失值清洗的影响。也是对原始数据的线性变换,使结果映射到[ 区间。 0,1] 对序列x1,xn 进行变换: xi-min{xj} x2,…, 1≤i≤n yi= max{xj}-min{xj} 1≤i≤n1≤j≤n