2.3.2 数据预处理步骤
常见的数据预处理步骤包括:数据清洗、数据集成、数据变换、数据规约。
1.数据清洗
数据清洗的目的不只是消除错误、冗余和数据噪音,还要将按不同的、不兼容的规则所得的各种数据整合起来。不符合要求的数据主要有不完整的数据、错误的数据、重复的数据三大类。
按实现方式与范围,数据清洗可分为如下4种。
(1)手工实现
通过人工检查,只要投入足够的人力、物力、财力,也能发现所有错误,但效率低下。在大数据量的情况下,几乎是不可能的。
(2)通过专门编写的应用程序
这种方法能解决某个特定的问题,但不够灵活,特别是在清理过程需要反复进行(一般来说,数据清理一遍就达到要求的很少)时,导致程序复杂,清理过程变化时,工作量大。这种方法也没有充分利用目前数据库提供的强大数据处理能力。
(3)解决某类特定应用域的问题
比如根据概率统计学原理查找数值异常的记录,对姓名、地址、邮政编码等进行清理。这是目前研究得较多的领域,也是应用最成功的一类,如商用系统Trillinm Software、System Match Maketr等。
(4)与特定应用领域无关的数据清理
这一部分的研究主要集中在清理重复的记录上,如Data Cleanser Data Blade Module、Integrity系统等。
这4种实现方法中,后两种因具有某种通用性,而引起了越来越多的注意。但是不管哪种方法,大致都由三个阶段组成:①数据分析、定义错误类型;②搜索、识别错误记录;③修正错误。
第一阶段,尽管已有一些数据分析工具,但仍以人工分析为主。错误类型分为两大类:单数据源和多数据源,它们又各分为结构级错误和记录级错误。这种分类非常适合于解决数据仓库中的数据清理问题。
第二阶段,有两种基本的思路用于识别错误:一种是发掘数据中存在的模式,然后利用这些模式清理数据;另一种是基于数据的,根据预定义的清理规则,查找不匹配的记录。后者用得更多。
第三阶段,某些特定领域能够根据发现的错误模式,编制程序或借助于外部标准源文件、数据字典一定程度上修正错误;对数值字段,有时能根据数理统计知识自动修正,但经常须编制复杂的程序或借助于人工干预完成。绝大部分数据清理方案提供接口用于编制清理程序。它们一般来说包括很多耗时的排序、比较、匹配过程,且这些过程多次重复,用户必须等待较长时间。在一个交互式的数据清理过程中,系统将错误检测与清理紧密结合起来,用户能通过直观的图形化界面一步步地指定清理操作,且能立即看到此时的清理结果,不满意清理效果时还能撤销上一步的操作,最后将所有清理操作编译执行。这种方案对清理循环错误非常有效。
许多数据清理工具提供了描述性语言解决用户友好性,降低用户编程复杂度。例如,ARKTOS方案提供了XADL语言(一种基于预定义的DTD的XML语言)、SADL语言,在ATDX提供了一套宏操作(来自于SQL语句及外部函数),一种SQL2Like命令语言,这些描述性语言都在一定程度上减轻了用户的编程难度,但各系统一般不具有互操作性,不能通用。数据清理属于一个较新的研究领域,直接针对这方面的研究并不多,中文数据清理更少。现在的研究主要为解决两个问题:发现异常、清理重复记录。
2.数据集成
将多个数据源中的数据合并,并存放到一个一致的数据存储(如数据仓库)中。这些数据源可能包括多个数据库、数据立方体或一般文件。(https://www.daowen.com)
数据集成的数据源主要指DBMS,广义上也包括各类XML文档、HTML文档、电子邮件、普通文件等结构化、半结构化信息。数据集成是信息系统集成的基础和关键。好的数据集成系统要保证用户以低代价、高效率使用异构的数据。要实现这个目标,必须解决数据集成中的一些难题。
数据集成的难点可以归纳为以下三个方面:
(1)异构性。被集成的数据源通常是独立开发的,数据模型异构,给集成带来很大困难。这些异构性主要表现在:数据语义、相同语义数据的表达形式、数据源的使用环境等。
(2)分布性。数据源是异地分布的,依赖网络传输数据,这就存在网络传输的性能和安全性等问题。
(3)自治性。各个数据源有很强的自治性,它们可以在不通知集成系统的前提下改变自身的结构和数据,给数据集成系统的鲁棒性提出挑战。
数据源的异构性一直是困扰很多数据集成系统的核心问题,也是人们在数据集成方面研究的热点。异构性的难点主要表现在语法异构和语义异构上。语法异构一般指源数据和目的数据之间命名规则及数据类型存在不同。对数据库而言,命名规则指表名和字段名。语法异构相对简单,只要实现字段到字段、记录到记录的映射,解决其中的名字冲突和数据类型冲突。这种映射都很直接,比较容易实现。因此,语法异构无须关心数据的内容和含义,只要知道数据结构信息,完成源数据结构到目的数据结构之间的映射就可以了。
当数据集成要考虑数据的内容和含义时,就进入到语义异构的层次上。语义异构要比语法异构复杂得多,它往往是需要破坏字段的原子性,即需要直接处理数据内容。常见的语义异构包括以下一些方式:字段拆分、字段合并、字段数据格式变换、记录间字段转移等。语法异构和语义异构的区别可以追溯到数据源建模时的差异:当数据源的实体关系模型相同,只是命名规则不同时,造成的只是数据源之间的语法异构;当数据源构建实体模型时,若采用不同的粒度划分、不同的实体间关系以及不同的字段数据语义表示,必然会造成数据源间的语义异构,给数据集成带来很大麻烦。
事实上,现实中数据集成系统的语法异构现象是普遍存在的。上面提到的几种语法异构属于较为规则的语法异构,可以用特定的映射方法解决这些问题。还有一些不常见或不易被发现的语法异构,例如数据源在构建时隐含了一些约束信息,在数据集成时,这些约束不易被发现,往往会造成错误的产生。例如,某个数据项用来定义月份,隐含着其值只能在1~12之间,而集成时如果忽略了这一约束,很可能造成荒谬的结果。此外,复杂的关系模型也会造成很多语义异构现象。
3.数据变换
找到数据的特征表示,用维度变换来减少有效变量的数目或找到数据的不变式,包括规格化、规约、切换和投影等操作。
规格化指将元组集按规格化条件进行合并,也就是属性值量纲的归一化处理。规格化条件定义了属性的多个取值到给定虚拟值的对应关系。对于不同的数值属性特点,一般可以分为取值连续和取值离散的数值规格化问题;归约指将元组按语义层次结构进行合并。语义层次结构定义了元组属性值之间的IS—A语义关系。规格化和归约能大量减少元组数量,提高计算效率,同时也提高了数据挖掘的起点,使得一个算法能够发现多层次的知识,适应不同应用的需要。还可以用多维立方体(data cube)来组织数据,采用数据仓库技术中的切换、旋转和投影技术,把初始的数据集按照不同的层次、粒度和维度进行抽象和泛化,从而生成不同抽象级别上的数据集。
数据变换包含以下处理内容:
(1)平滑处理。该过程帮助除去数据中的噪声,主要技术方法有Bin方法、聚类方法和回归方法。
(2)合计处理。对数据进行总结或合计(aggregation)操作。例如,每天销售额(数据)可以进行合计操作以获得每月或每年的总额。这样操作常用于构造数据立方体或对数据进行多细度的分析。
(3)数据泛化处理(gencralization)。所谓泛化处理就是用更抽象(更高层次)的概念来取代低层次或数据层的数据对象。例如,街道属性,就可以泛化到更高层次的概念,如城市、国家。同样对于数值型的属性,如年龄属性,就可以映射到更高层次的概念,如年轻、中年和老年。
(4)规格化。规格化就是将有关属性数据按比例投射到特定范围之中。例如,将工资收入属性值映射到0到1之间。
4.数据规约
在对发现任务和数据本身内容理解的基础上,寻找依赖于发现目标的表达数据的有用特征,以缩减数据模型,从而在尽可能保持数据原貌的前提下最大限度地精简数据量,主要有两个途径:属性选择和数据抽样,分别针对数据库中的属性和记录。