3.4 数据预处理(一) - 数据集成(Data Integration)
简介
数据集成(Data Integration)是一个数据整合的过程。通过综合各数据源,将拥有不同结构、不同属性的数据整合归纳在一起,就是数据集成。由于不同的数据源定义属性时命名规则不同,存入的数据格式、取值方式、单位都会有不同。因此即便两个值代表的业务意义相同,也不代表存在数据库中的值就是相同的。因此需要数据入库前进行集成,去冗余,保证数据质量。
一句话解释版本:
数据集成是将不同来源的数据整合在一个数据库中的过程。
数据分析与挖掘体系位置
数据集成是数据预处理的环节,所以在数据分析与数据挖掘中的位置如下图所示。
数据集成的难点
数据集成的本质是整合数据源,因此多个数据源中字段的语义差异、结构差异、字段间的关联关系,以及数据的冗余重复,都会是数据集成面临的问题。归纳一下的话,数据集成面临如下几个问题:
字段意义问题
在整合数据源的过程中,很可能出现这些情况:
- 两个数据源中都有一个字段名字叫“Payment”,但其实一个数据源中记录的是税前的薪水,另一个数据源中是税后的薪水。
- 两个数据源都有字段记录税前的薪水,但是一个数据源中字段名称为“Payment”,另一个数据源中字段名称为“Salary”。
上面这两种情况是在数据集成中常发生的,造成这个问题的原因在于现实生活中语义的多样性以及公司数据命名的不规范。为了更好的解决这种问题,首先,我们需要在数据集成前,进行业务调研,确认每个字段的实际意义,不要被不规范的命名误导。
其次,我们可以整理一张专门用来记录字段命名规则的表格,使字段、表名、数据库名均能自动生成,并统一命名。一旦发生新的规则,还能对规则表实时更新。
字段结构问题
数据结构问题的产生是数据集成中几乎必然会产生的。在整合多个数据源时,这样的问题就是数据结构问题:
- 字段名称不同。如,同样是存储员工薪水,一个数据源中字段名称是“Salary”,另一个数据源中字段名是“Payment”。
- 字段数据类型不同。如,同样是存储员工薪水的Payment字段,一个数据源中存为INTEGER型,另一个数据源中存为CHAR型。
- 字段数据格式不同。如,同样是存储员工薪水的Payment数值型字段,一个数据源中使用逗号分隔,另一个数据源中用科学记数法。
- 字段单位不同。如,同样是存储员工薪水的Payment数值型字段,一个数据源中单位是一万人民币,另一个数据源中是美元。
- 字段取值范围不同。如,同样是存储员工薪水的Payment数值型字段,一个数据源中允许空值,NULL值,另一个数据源中不允许。
上面这些问题都会对数据集成的效率造成影响。如果想解决上面的问题,就需要在数据集成的过程中尽量明确数据字段结构。简单来说,可以通过下面这个表格来确定字段的格式。
ID | 是否主键 | 字段名称 | 字段说明 | 字段类型 | 空值 | 拼写 | 格式 | 单位 |
01 | 是 | Employee_id | 员工编号 | VARCHAR(20) | NOT NULL | UPPERCASE | 6位数字+大写字母 | - |
02 | 否 | Employee_Birthday | 员工生日 | DATE | NULL ALLOWED | - | YYYYMMDD | - |
03 | 否 | Employee_Salary | 员工薪水 | DECIMAL(20,2) | NOT NULL | - | 千位符分割 | 人民币 |
上表就是一个简单的数据源中字段的格式定义表。通过上表,可以从业务上确定字段的基本属性。在后续进行数据集成时,可以通过上表对数据格式进行约束,从而避免因格式不同对集成带来的困扰。
字段冗余问题
字段的冗余一般源自于字段之间存在强相关性或者几个字段间可以相互推导得到。
通过检测字段的相关性,可以侦察到数据冗余。具体来说,方法有如下几个:
分类型数据:卡方检验
卡方检验是假设检验中的一种,具体的方法在假设检验中讲解。
简单来说,检验的标准如下:
H0:字段A与字段B之间相互独立
H1:字段A与字段B之间存在相关性
检验指标为:Pearson X2
在给定的置信水平下,若有充分证据能拒绝原假设,则字段A与B之间存在相关性。若不能拒绝原假设,则字段A与B独立。
数值型数据:相关系数,协方差
相关系数与协方差矩阵都是衡量字段之间相关性的指标,具体的算法在数据描述统计中讲解。
简单来说,如果用Pearson相关系数检验数据相关性,则Pearson系数越靠近+1或-1,相关性越大,+1为完全正相关,-1为完全负相关。若Pearson系数为0,则两个字段之间不相关。
如果用协方差衡量数据相关性,如果2个字段协方差绝对值越大,相关性越强。协方差正数时为正相关,协方差负数时为完全负相关。若协方差为0,则两个字段之间不相关。
数据重复问题
检查数据记录的重复一般需要通过表的主键定。因为主键能够确定唯一记录,其有可能是一个字段,也有可能是几个字段的组合。表设计时,一般会设定主键。但也有实际情况中表是没有设计的。这种情况下,最好能够对表进行优化,过滤重复数据。
一般来说,我会在数据结构中尽量调研每个表的主键。没有主键,就通过调研定义主键,或者对表进行拆分或整合。重复数据入库,不仅会给日后表关联造成极大的影响,也会影响数据分析与挖掘的效果,应尽量避免。
数据冲突问题
数据冲突就是两个数据源,同样的数据,但是取值记录的不一样。造成这种原因,除了有人工误入,还有可能是因为货币计量的方法不同,汇率不同,税收水平不同、评分体系不同等等原因。
对待这种问题,就需要对实际的业务知识有一定的理解。同时,对数据进行调研,尽量明确造成冲突的原因。如果数据的冲突实在无法避免,就要考虑冲突数据是否都要保留、是否要进行取舍,如何取舍,等问题了。