面向数据服务(或者OLTP)应用的数据库,一般不运行特别复杂的数据分析任务
–为了对数据进行分析,我们从这些数据库里,抽取、转换和装载(Extract, Transform and Load, ETL)数据到数据仓库中,进而在它之上运行复杂的分析负载,包括OLAP分析和数据挖掘,从数据里挖掘模式和知识
–如果从多个异构的数据源ETL数据到数据仓库中,而且这些数据源存在各种异构性及不一致性,那么就需要对数据进行集成。
在进行ETL操作时,如果数据源的数据质量较差,在进行数据转换时,需要利用数据清洗技术,解决数据质量问题。数据清洗是一种消除数据里面的错误、去掉重复数据的技术
–基于准确的数据(高质量)进行分析,才有可能获得可信的分析结果,基于这些分析结果,才有可能做出正确的决策。
–词法错误(Lexical Error)
比如,在一张人员表中,每个实体有四个属性,分别是姓名、年龄、性别和身高,某些记录只
有三个属性,这就是词法异常
–值域格式错误(Domain Format Error)
比如姓名是字符串类型,在名和姓之间有一个“,”,那么“John, Smith”是正确的值,而“John
Smith”则不是正确的值
–不规则的取值(Irregularity)
比如在一个数据库表里面,员工的工资字段,有的是用“元”作为单位,有的是用“万元”作为单
位
–违反完整性约束规则(Integrity Constraint Violation)
比如,我们规定员工表的工资字段必须大于0,如果某个员工的工资<0,那么就违反了完整性约
束规则
–数据中出现矛盾(Contradiction)
如果在数据库表里面,某位员工的实发工资,不等于应发工资减去所得税,那么就出现了矛盾
–数据的重复值(Duplicate)
–无效元组(Invalid Tuple)
值的缺失(Missing Value)
它指的是,在进行数据采集的时候,就没有采集到相应的数据。
元组的缺失(Missing Tuple)
它指的是,在客观世界中,存在某些实体,但是并没有在数据库中通过元组表示出来。
所谓正确性,指的是数据集里所有正确的取值,相对于所有取值的比例。
这个标准,包括三个子标准,分别是完整性(Integrity)、一致性(Consistency)、和密度
(Density)
完整性(Integrity),继续划分为完备性(Completeness)和有效性(Validity)
一致性(Consistency),继续划分为模式符合性(Schema Conformance)和统一性
(Uniformity)
所谓模式符合性,指的是符合数据模式的元组,占所有元组的比例。所谓不符合数据模式,主
要是指数据的取值不在值域范围之内,比如年龄字段的取值为300岁
统一性,指的是数据集里,不包含不规则性(Irregularity)的属性,占所有的属性的比例。
不规则的取值(Irregularity),指的是取值、单位、和简称的使用不统一
密度(Density),指的是所有元组里,各个属性上的缺失值(Missing Value),占所有应该存
在的所有属性上的取值的比例
是指代表相同实体的重复元组,占数据集里所有元组的比例
数据清洗,是剔除数据里的异常,使得数据集成为现实世界的准确、没有重复的(Correct & Duplicate Free)表示的过程
(1) 对元组及其各个属性值的格式进行调整,使之符合值域要求,使用统一的计量单位、统一的简称等。
(2) 完整性约束条件的检查和实施(Enforcement)。
(3) 从已有的取值,导出缺失的值。
(4) 解决元组内部和元组之间的矛盾冲突(Contradiction)。
(5) 消除、合并重复值。
(6) 检测离群值(Outlier),这些离群值极有可能是无效的数据
数据清洗的过程,可以分为4个主要的步骤,分别是:
–(1) 对数据进行审计,把数据异常(Anomaly)的类型标识出来。
–(2) 选择合适的方法,用于检测和剔除这些异常。
–(3) 在数据上,执行这些方法。第2步和第3步,实际上是定义数据清洗的工作流和执行这个工作流。
–(4) 最后,后续处理和控制阶段将检查清洗结果,把在前面步骤中没有纠正过来的错误元组,进行进一步的处理
一般通过对数据进行解析、以及采用各种统计方法,来检测数据的异常。对整个数据集的每个属性进行分析,可以统计出该属性的最大/最小长度、取值范围、每个取值的频率、方差、唯一性、空值出现的情况、典型的字符串模式、数据集体现出的函数依赖(Functional Dependency)关系、数据中体现的关联性(关联规则)等。
为了把数据中的各种异常情况剔除掉,需要对数据进行一系列的操作。
定义好的数据清洗工作流,其正确性经过验证以后(可以在小批量数据上实验一下),在整个数据集上执行。
数据清洗工作流执行结束后,需要对结果进行检查,以确认各个操作是否正确执行,数据修正的结果是否正确。所谓控制(Controlling),是指对于未能在工作流自动化处理阶段完成纠错、而记录下来的元组,由领域专家进行人工干预,手工完成修正
在数据清洗过程中,对数据进行解析,目的是检测语法错误(Syntax Error)。对于错误的字符
串取值,比如应该为“smith”而写成了“snith”,可以通过字符串解析,以及使用编辑距离
(Edit Distance),寻找最相近的正确的字符串,给出可能的纠正方案
数据转换,其目的是把数据从一个格式映射到另外一种格式,以适应应用程序的需要。在实例
层面(Instance Level),对各个元组的各个字段的取值,一般采用标准化
(Standardization)、和规范化方法(Normalization),剔除数据的不规则性
(Irregularity)。
所谓数据的标准化,是经过转换函数,把数据的值转换成标准形式,比如把性别字段的值,全
部转换成“1”/“0”。
而规范化,则把数据映射到一个最小值、最大值所在的范围,比如把数据映射到[0,1]之间。
对数据进行转换,有时候需要转换其类型(Type Conversion)
重复数据消除(Duplicate Elimination),也称为记录连接(Record Linkage)。
在数据清洗中的重复数据消除,和数据集成过程中的重复数据消除,目的都是把数据中的重复
元组给剔除掉,只不过后者处理的是来自多个数据源的数据
统计方法,可以用于对数据进行审计,甚至还可以对数据中的异常(Anomaly)进行纠正
在一些数据集里面,离群值不一定意味着错误数据,而是实际情况如此。比如信用卡诈骗,体
现出和正常交易不一样的模式,不能把信用卡诈骗看作是错误数据,而应该从这些数据中发现
这些模式,防止诈骗的发生
所谓数据集成,是指把数据从多个数据源整合在一起,提供一个观察这些数据的统一视图(Common View)的过程
数据集成分为物理式数据集成、虚拟式数据集成两类。
–所谓物理式数据集成,需要从各个数据源把数据拷贝到目标数据仓库。
–而虚拟式的数据集成,数据仍然保留在各个数据源中,通过某种机制,使得用户可以通过统一的视图,对数据进行查询
数据集成要解决的首要问题,是各个数据源之间的异构性,所谓异构性就是差异性
(1) 数据管理系统的异构性
(2) 通讯协议异构性
(3) 数据模式的异构性(Schema Heterogeneity)
(4) 数据类型的异构性(Data Type Heterogeneity)
(5) 取值的异构性(Value Heterogeneity),不同的数据源,有些数据的逻辑取值(Logical Value),物理取值(Physical Value)不一样
(6) 语义异构性(Semantic Heterogeneity):不同的数据源,某个数据项的取值相同,但是却代表不同的含义
有三种基本的策略,进行数据的集成,分别是联邦数据库(Federated Database)、数据仓库(Data Warehousing)、中介者(Mediation)(有的文献翻译为仲裁)
联邦数据库的主要优点是,如果我们有很多的数据源,但是仅仅需要在少数几个数据源之间进
行通讯和集成,联邦数据库是最合算的一种模式。
其缺点也是很明显的,如果我们需要在很多的数据源之间,进行通讯和数据交换的话,我们需
要建立大量的Wrapper
在数据仓库模式下,同样的数据被复制了两份,一份在数据源那里,一份在数据仓库这里。一
个重要的问题是,如何因应数据源里数据的变化,及时更新数据仓库里的数据。我们可以采用
两种方法,同步数据源和数据仓库的数据
第一种方法,是对数据仓库进行完全重建(Complete Rebuild)的办法
第二种方法,是增量式更新(Incremental Update)的方法
中介者(Mediator)扮演的是数据源的虚拟视图的角色(Virtual View),中介者本身不保存任
何数据,数据仍然保存在数据源中。中介者维护一个虚拟的数据模式(Virtual Schema),它把
各个数据源的数据模式组合起来
中介者包括两种类型,分别是GAV(Global as View)和LAV(Local as View)
GAV,由Mediator 模式充当所有数据源数据模式的一个视图。Mediator通过一些规则,实现
Mediator上的查询,到针对各个数据源的查询的转换。和单一数据库上的常规视图类似,我们
只能通过视图,查找到各个数据源数据的一个子集(Subset)
LAV,则首先有一个全局数据模式(Global Schema),然后基于该全局数据模式定义各个数据源
的模式。每个数据源通过表达式(Expression),描述如何从全局模式,产生该数据源的模式。
LAV能够超越各个数据源,涵盖更多的数据
LAV和GAV比较
GAV的主要优势是易于设计和实现,但是通过GAV只能看到全部数据的一个子集。
LAV,比起GAV来,难于设计和实现,但是它具有更大的扩展性(Extensible),新的数据源可以
很容易增加进来,只要从全局模式定义新数据源的模式即可