理论教育 数据清洗:提高信息系统数据质量的必要处理过程

数据清洗:提高信息系统数据质量的必要处理过程

时间:2023-06-07 理论教育 版权反馈
【摘要】:一般而言,凡是有助于提高信息系统数据质量的处理过程,都可认为是数据清洗。各种不同的KDD和DM系统都是针对特定的应用领域进行数据清洗的。可见,KDD应用中的数据清洗主要是提高数据的可用性,如去除噪声、无关数据、空值,考虑时间顺序和数据的变化等,其主要内容还是一样的。最后在数据集上应用这些规则和策略发现“脏数据”和清洗“脏数据”。

数据清洗:提高信息系统数据质量的必要处理过程

(一)数据清洗的定义

数据清洗有数据净化(Data Cleaning),数据清洗(Data Cleansing)和数据清理(Data Scrubbing)三种说法,尽管在英文中三者的具体含义有微小差别,但对于三种中文译法,研究者一般都将其看做是一个意思。数据清洗的目的是检测数据中存在的错误、不一致数据和重复记录,并消除或改正它们,从而提高数据的质量,保证应用于数据仓库前端决策支持系统产生正确的决策分析结果,因此数据清洗过程也被定义为一个评价数据正确性并改善质量的过程。数据的正确性是由准确性、及时性、完整性和一致性等方面定义的。因此数据清洗过程就是评价数据的正确性并提高数据的质量。Hemandez MA等的文献[77]中将数据清洗问题叫做“脏数据”的处理。Fallside DC等的文献[78]中指出数据清洗是在数据中消除错误和不一致,并解决对象识别问题的过程。

从广义上讲,数据清洗是将数据库精简以祛除重复记录,并使余下部分转换成标准可接收格式的过程;而狭义上的数据清洗是特指在构建数据仓库和实现数据挖掘前对数据源进行处理,使数据实现准确性、完整性、一致性、唯一性、适时性、有效性以适应后续操作的过程[1]。一般而言,凡是有助于提高信息系统数据质量的处理过程,都可认为是数据清洗。简单地说就是从数据源中清除错误数值和重复记录,即利用有关技术如数理统计、数据挖掘或预定义的清洗规则等,从数据源中检测和消除错误数据、不完整数据和重复数据,从而提高信息系统的数据质量。

目前数据清洗主要应用于三个领域:数据仓库(Data Warehouses,DW)、数据库中的知识发现(Knowledge Discovery in Databases,KDD)和数据/信息质量管理

下面分别介绍在这三个应用领域中数据清洗的定义:

1.数据仓库应用中数据清洗的定义

在数据仓库领域中,数据清洗一般是应用在几个数据库合并时或多个数据源进行集成时。同一个实体的记录在不同的数据源中以不同的格式表示或被错误地表示,合并后数据库中就会出现重复的记录。数据清洗过程就是要把这些重复的记录识别出来并消除它们,也就是所说的合并/清除问题,在LowWL等的文献[79]中一般称这样的过程为:记录连接、语义整合、实例识别或对象识别问题。在数据仓库环境下,数据清洗是ETL(Extraction抽取、Transition转换、Load加载)过程的一个重要部分,需要考虑数据仓库的集成性与面向主题的需要,包括数据的清洗及结构的转换。

2.KDD应用中数据清洗的定义

在数据库中的知识发现领域,数据清洗被认为是KDD过程的第一个步骤,即对数据进行预处理的过程。各种不同的KDD和DM系统都是针对特定的应用领域进行数据清洗的。在GuyonI等的文献[80]中,信息的模式被用于发现“垃圾模式”(没有意义的或错误的模式),属于数据清洗的一种。Simoudis E等的文献[81]中数据清洗被定义为一种使用计算机化的方法来检查数据库,检测丢失的和不正确的数据并纠正错误的过程。可见,KDD应用中的数据清洗主要是提高数据的可用性,如去除噪声、无关数据、空值,考虑时间顺序和数据的变化等,其主要内容还是一样的。

3.综合数据质量管理中数据清洗的定义

数据质量管理是一个学术界和商业界都感兴趣的领域。全面数据质量管理解决整个信息业务过程中的数据质量及集成问题。在该领域中,没有直接定义数据清洗过程。WandY等的文献[82]中所提出的应用于数据获取和数据使用周期质量的数据生命周期模型(包括数据的评价、分析、调整和丢弃),是从数据质量的角度,把数据清洗过程和数据生命周期集成在一起。

(二)数据清洗的原理

数据清洗的原理,就是通过分析“脏数据”的产生原因和存在形式,利用现有的技术手段和方法去清洗“脏数据”,将“脏数据”转化为满足数据质量或应用要求的数据,从而提高数据集的数据质量,如图513所示。数据清洗主要利用回溯的思想,从“脏数据”产生的源头开始分析数据,对数据集流经的每一个过程进行考察,从中提取数据清洗的规则和策略。最后在数据集上应用这些规则和策略发现“脏数据”和清洗“脏数据”。这些清洗规则和策略的强度,决定了清洗后数据的质量。

978-7-111-50077-3-Chapter05-5.jpg

5-1-3 数据检测和清洗原理[2]

众多文献中将数据清洗过程分为以下三个阶段:①数据分析、定义错误类型;②搜索、识别错误记录;③修正错误。

第一阶段,尽管已有一些数据分析工具,但仍以人工分析为主。

第二阶段,有两种基本的思路用于识别错误:一种是发掘数据中存在的模式,然后利用这些模式清理数据;另一种是基于数据的,根据预定义的清理规则,查找不匹配的记录。后者用得更多。

第三阶段,某些特定领域能够根据发现的错误模式,编制程序或借助于外部标准源文件、数据字典等在一定程度上修正错误;对数值字段,有时能根据数理统计知识自动修正,但经常需要编制复杂的程序或借助于人工干预完成。

(三)数据清洗的框架

为了使数据清洗具有一定的通用性,近年来,关于数据清洗的框架也有了一些研究。Fallside DC等的文献[78]提出了一个数据清洗框架,该框架清晰地分离出了逻辑规范层和物理实现层。用户可以在逻辑层设计数据处理流程,确定清洗过程需要执行的数据转化步骤;在物理层实现这些数据的转化操作,并对它们进行优化。除了分离逻辑层和物理层以外,Galhardas H等的文献[83]还提出了一种描述性语言,该描述性语言可以在逻辑层上指定数据清洗过程所需采取的数据转化操作,并指定何时可以弹出例外,要求用户的交互。该描述性语言还可以指定一些数据转化操作的参数,比如记录匹配操作所使用的距离函数等。在Galhardas H等的文献[83]研究的基础上,实现了一个可扩展的数据清洗工具AJAX。

Raman V等的文献[84]提出了一个关于数据清洗的交互式系统框架,该框架把数据转化和差异检测紧密地集成在一起。用户面对表单风格的界面,能够以直观的图形化方式逐步建立起整个数据转化过程。在此过程中,用户可以执行或者撤销转化操作,而且操作的结果马上就可以在屏幕上看到。后台进程以增量方式检测转化后数据中存在的问题,如果检测到,则及时报告给用户。用户利用系统提供的基本数据转化操作,无需书写复杂的程序就能够完成数据清洗任务,而且用户能够随时看到每一步转化操作后的结果,没有很长的延迟。因此,该系统框架具有较好的交互性

复旦大学以周傲英教授为首的研究小组较早地认识到数据清洗研究的重要价值,并已开始了数据清洗的研究工作,提出了一个可扩展数据清洗框架的定义,该清洗框架以术语模型、处理描述文件、共享库等概念和技术实现了模块功能的可定制、系统的开放性和可扩展性

Winkler WE的文献[85]针对现有数据工具存在的交互性差、不易扩展和源数据管理不完善等问题,该文在前人的研究成果基础上,提出了一种基于规则的交互式数据清洗系统框架。另外本章还将数据清洗与东南大学已开发的SEUETL工具相结合,使它们的转换功能和清洗功能相互补充,既有强大的转换功能,也有很好的清洗能力。

(四)数据清洗的算法

1.缺失数据清洗算法

空值是数据清洗经常遇到的问题。一般的空值问题可分为两种:一是缺失值,二是空值。缺失值是指其值实际存在,但没有被存入所属字段,如成年人都有身份证,如果某个成年人身份证号属性值为空,就属于缺失值;空值是指因实际并不存在而空的值,如未成年人没有身份证,因此他们的身份证号属性为空。数据清洗所处理的是缺失值。处理方法有:

1)忽略其属性包括缺失值的记录。除非该条记录有多个属性存在缺失值,否则该方法不是很有效。并且当每个属性缺失值的百分比变化很大时,它的性能非常差。

2)某些缺失值可以从本数据源或其他数据源推导出来。由于原始外部数据不同,录入习惯不同,不同系统对记录属性的要求不同,导致同一实体对应的各个记录缺失程度不同,通过清洗可以得到一条相对完整的记录。(www.daowen.com)

3)采用统计的方法来填补空缺值。主要有单一填补法和多重填补法。其中单一填补法是指对缺失值构造单一替代值来填补,常见的方法有取平均值、中间数、回归填补、最大期望填补、就近补齐等。多重填补法是指用多个值来填充,然后用针对完整数据集的方法对它们分析得出综合的结果,比较常见的有趋势得分法和预测均值匹配法等。单一填补法常常不能反映原有数据集的不确定性,会造成较大的偏差。多重填补法的优点在于通过模拟缺失数据的分布,可以较好地保持变量间的关系,其缺点就是计算复杂。

4)人工输入一个可接受的值。一般而言,该方法时间耗费较大,当数据集很大且有较多缺失值时,该方法效率很低。

5)大部分学者采用最近似的值替换缺失值的方法,包括神经网络、贝叶斯网络、粗集理论等,这些方法大都需要判断缺失记录与完整记录之间的记录相似性

2.异常记录检测算法

异常数据一般是由两种原因造成的:一是数据固有的变异性造成的,另外一种是由于度量或执行错误导致的,在数据清洗中对这两者都应给予关注。在数据清洗领域对异常数据的自动化发现主要采用数据审计的方法来解决,也称为数据质量挖掘(Data Quality Mining,DQM)。其基本步骤主要分两个环节来解决,第一步是数据概化,即采用数理统计的方法对数据分布进行概化描述,自动地获得数据的总体分布特征,以此作为进一步分析的基础;第二步针对某一特定的数据质量问题进行挖掘以发现异常。

对数据集进行的异常记录检测主要采用的方法包括:①采用数理统计的思想来检测数值型属性,计算属性值的均值和标准差,计算每一个属性的置信区间来识别异常属性和记录。②采用基于距离的聚类的方法来识别异常的记录。③采用基于模式的方法来发现不符合数据集中现存模式的异常记录。④采用关联规则的方法来发现数据集中不符合具有高置信度和支持度的规则的异常数据。

按Bilenko M等的文献[86],所有记录中如果一个或几个字段间绝大部分遵循某种模式,其他不遵循该模式的记录就可认为是异常的。例如,如果一个整型字段99%的值在某一范围内(如0~1),则剩下的1%的记录(该字段>1或<0)可认为是异常。最容易发现的是数值异常(特别是单一字段的数值异常),可用数理统计的方法(如平均值、标准差、值域、信任区间等),这种方法也很成熟。

Bilenko M等的文献[86]中将聚类、基于模式的方法、关联规则引入到数据清洗中,并做了一些实验测试其效果。尽管这些方法在其他领域(如数据仓库、决策支持系统)中能较好地使用,但在用于发现异常时,有许多不一样的要求,主要结论如下所示:

1)已有的聚类算法对直接检测异常作用不大。在对整个记录空间运用聚类算法时发现异常时,所产生的聚类能作为下述两种方法的检测空间。其主要缺陷是耗时,特别在记录条数多时,不适于检测异常。

2)在运用聚类算法的基础上(每个字段使用欧式距离,采用K-mean算法,K=6),使用给予模式的方法,仅检测到了少量记录(0.3%)满足超过90%字段的模式。

3)经典的(布尔型)关联规则难以发现异常,但数量型关联规则、率规则(Ratio-rules)、序数关联规则能较好地检测异常与错误。

Data Gliches[87]首先将数据根据距离划分为层(Layer),然后对每个层统计数据特征,根据定义的距离计算层中各个数据点与中心距离的远近来判断可能的异常。LueebberD等的文献[88]中提出采用数据审计的方法发现异常数据,它在很大程度上依赖于数据清洗算法能否准确分辨异常和非异常数据,为此它采用C4.5的决策树算法来发现偏差数据。

3.相似重复记录的清洗算法

检测并合并消除数据集中的相似重复对象,这在源数据和数据仓库等环境下非常重要,因为在单数据源和多数据源情况下都存在着相似重复记录的可能。对重复源组检测和清除即可称之为合并/清洗问题,也称为记录实例辨识或对象辨识问题。

为了从数据集中消除重复记录,首要的问题就是如何判断两条记录是否是近似重复。其核心问题是字段的匹配,目前常用的算法有递归式字段匹配算法、Smith-Watermnan算法、R-S-W算法和编辑距离算法。识别重复记录的经典方法是基本近邻排序方法,其主要思想是:先选定某一个字段或根据已有字段生成一个新字段作为关键字,然后按照此关键字排序,将一个固定长度W的窗口中的最后记录与前面的W-1条记录相比较。每次将窗口中最前面的一条记录移出,最后一条记录的下一条移入窗口,这W条记录作为下一轮比较对象,这种方法相对地提高了识别速度,只要进行WN次比较(其中N为总记录数),但仍存在一些缺陷,例如,关键字的选取非常重要。选取不当时容易造成识别遗漏,从而增加识别次数,这极大地影响了识别效率。人们提出了各种改进方法:Galhardas H等的文献[89]中多次选取不同字段作为关键字,将每次识别出的记录合并(文中称为传递闭包:如果某关键字识别A与B相同,且另一关键字识别A与C相同,则记录A、B、C相同)作为所有重复记录。

以周傲英教授为首的研究小组提出了一种基于N-Gram的相似重复记录检测的方法,该方法先计算各记录的N-Gram值,然后以各记录的N-Gram值为排序键进行排序,再通过采用一种高效的应用无关的Pair-wise比较算法,通过计算两记录中单词间的编辑距离来判断记录的相似与否,并采用一种改进的优先队列算法来准确地聚类相似重复记录。该方法在一定程度上有效地解决了相似重复记录的检测问题,但当数据量大、错误多、单词间互相影响时,该方法的初步聚类效果就会受到很大的影响。此外,该方法不适用于中文数据库环境。以周傲英教授为首的研究小组还提出了一种检测多语言数据重复记录的综合方法,该方法充分考虑了中文数据库的环境,有效地解决了多语言数据记录的初步聚类和记录比较问题。

Dasu T等的文献[90]中提到了非线性K-均值聚类算法,通过抽取应用相关的特征描述,应用非线性K-均值聚类算法对相似重复记录进行聚类。但是该方法对噪声、孤立点处理能力不强。在孟坚的文献[91]中提到了多语言文本的相似重复记录检测,多语言一般包括中文、英文。对于英文来说,排序多是根据字符在字符集中的次序排列,而中文存在多种排列,要先建立中文识别的序值文件来解决中文的排列问题。

采用R树建立索引的方法首先依据Fastmap方法选取若干个字符串作为轴(Pivot),各个记录依据这若干个轴计算它在多维空间中的坐标,然后采用R树进行多维相似性连接来实现相似重复记录的识别。由于“维度灾难”决定了维度不能过高,使得这种方法不具有通用性。Trouve A的文献[92]中提出了一种具有代表性的在线数据清洗方法,它是在有干净参照表的条件下进行数据清洗的方法,其基本思路是首先对干净的参照表数据建立一个ETI(Error Tolerance Index)索引,每一个在线输入的数据根据这个索引迅速找到与之最匹配的干净记录,然后用它来取代,从而完成对输入数据的在线清洗。

Chaudhuri S等的文献[93]中提出通过学习不同类型的字符串记录的相似性度量函数和相似度阈值来提高重复检测的精度,邱越峰,田增平等的文献[94]中将重复记录检测当做分类问题来解决,任何一对数据库记录可以根据其相似度划分到三个决策空间中:重复、不重复和可能重复,据此通过学习贝叶斯分类模型来解决重复记录检测问题。

北京大学的研究者们对数据清洗也做了一些相关研究,他们主要解决了针对客户关系管理中客户数据集成时重复记录的数据清洗问题。东南大学以董逸生教授为首的研究小组也对数据清洗做了一些研究,他们主要是针对数据仓库化过程中的数据清洗问题进行的研究。

现实的信息系统都是面向某一个具体应用的领域,都与特定的业务规则相联系,因此LeeML等的文献[95]中提出了根据特定领域知识建立规则来识别相似重复记录的框架。这类方法能够根据业务规则,取得好的识别精度。这种方法的主要问题在于,为了识别相似重复记录,必须建立相应领域的规则库,对领域知识的要求比较高,人工定义的工作量比较大。

(五)数据清洗的实现

数据清洗的实现方式主要分为以下四种:

1)手工实现。通过人工检查,只要投入足够的人力物力财力,也能发现所有错误,但效率低下。在大量数据的情况下,几乎是不可能的。

2)通过专门编写的应用程序。这种方法能解决某个特定的问题,但不够灵活,特别是在清洗过程需要反复进行(一般来说,数据清洗一遍就达到要求的很少)时,导致程序复杂,清洗过程变化时工作量大;而且这种方法也没有充分利用目前数据库提供的强大数据处理能力。

3)解决某类特定应用领域的问题。如根据概率统计学原理查找数据异常的记录,对姓名、地址、邮政编码等进行清洗,这是目前研究得较多的领域,也是应用最成功的一类。如商用系统Trillinm Software等。

4)与特定应用领域无关的数据清洗。这一部分的研究主要集中在清洗重复记录上,如Data Cleanser Data Blade Module、Integrity系统等。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈