数据挖掘|数据集成|基于Python的数据集成关键问题处理
数据集成是把来自多个数据库或文件等不同数据源的数据整合成一致的数据存储。其中关键问题有:实体识别、数据冗余与相关性分析、记录重复、数据值冲突的检测与处理。
1. 实体识别
实体识别主要涉及同名异义、异名同义、单位统一以及ID-Mapping等方面。
2. 数据冗余与相关性分析
为了提高数据挖掘的精度和减少数据挖掘使用的时间,对多个数据源进行集成时,减少数据集中的冗余和不一致是十分必要的。
如果一个属性可以由另外一个或一组属性值推导出来,则这个属性可能是冗余的。
冗余是数据集成的一个重要问题,有些冗余可以通过相关性分析检测出来。
对于标称数据,两个属性A和B之间的相关关系可以通过 χ 2 \chi^2 χ2(卡方)检验发现,这里不做详细介绍。
对于数值数据,可以通过计算属性A和B的相关系数(又称 Pearson积矩系数)来分析其相关性。
用Python求相关系数的方法有三种:
- 用numpy模块中的corrcoef()函数计算相关系数矩阵。
- 用pandas模块中DataFrame对象自带相关性计算方法corr(),可以求出所有列之间的相关系数。
- 自己编写Python程序计算相关系数。
对于数值属性,可以使用协方差来评估一个属性值如何随另一个属性值变化。在概率论和统计学中,协方差(Covariance)是用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即为两个变量相同时的协方差。它们都是评估两个属性如何一起变化。
使用Python求协方差示例:
import numpy as np
from sklearn import datasets
iris = datasets.load_iris() #装载鸢尾花数据
A= iris.data[:,0]
B= iris.data[:,1]
result=np.cov(A,B)
print(result)
[[ 0.68569351 -0.042434 ]
[-0.042434 0.18997942]]
3. 去除重复记录
除了检查属性的冗余之外,还要检测重复的记录,所谓重复记录是指给定唯一的数据实体,存在两个或多个相同的记录。
Python的模块Numpy中unique()函数可以去除一维数组或者列表中的重复元素;对于多维数组,如果指定 axis=0 , 可以把冗余的行去掉,若指定 axis=1 ,可以把冗余的列去掉。
例:去掉多维数组的重复行。
import numpy as np
data=np.array([['S1','张三','女',21],['S4','李四','女',22],['S1','张三','女',21],['S5','王五','男',20]])
print("去除重复前:\n",data)
result=np.unique(data,axis=0)
print("去除重复后:\n",result)
去除重复前:
[['S1' '张三' '女' '21']
['S4' '李四' '女' '22']
['S1' '张三' '女' '21']
['S5' '王五' '男' '20']]
去除重复后:
[['S1' '张三' '女' '21']
['S4' '李四' &#