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