孟龙梅
(滁州职业技术学院 信息工程系,安徽 滁州 239000)
数据挖掘过程中数据清洗的研究*
孟龙梅
(滁州职业技术学院 信息工程系,安徽 滁州 239000)
数据清洗是数据挖掘过程中最消耗资源的一步,如何对数据进行有效的清理和转换使之成为符合数据挖掘要求的数据源是影响数据挖掘准确性的关键因素.论述了数据挖掘过程中的数据清洗的领域、数据清洗的原理与方法.以高技能人才信息系统中的数据为例,使用SQL对数据进行清洗和转换,将数据分类和整理,使之满足数据挖掘的需要.
数据挖掘;数据清洗;分类;SQL
随着IT技术的发展、信息系统的广泛应用,大量的数据被生成并存储在数据库中.应用数据挖掘技术在数据中寻找它们的相关性和其他有用的信息,可以帮助企业更好地适应变化,并做出更合理的决策.通过对数据的清洗和转换可以提高数据的质量,提高数据挖掘结果的准确性,为用户提供了可靠、可用的数据决策支持.
从广义上说,任何从数据库中挖掘信息的过程都叫做数据挖掘.但是,从技术术语上说,数据挖掘特指的是:源数据经过清洗和转换成为适合于挖掘的数据集,然后建立特定的挖掘模型,利用这些数据集训练模型,最后利用模型找出知识模式进行预测,从而辅助决策工作[1].数据挖掘的过程如图1表示.首先定义一个数据挖掘的问题,然后收集相关的数据放入数据仓库中,再对数据进行清洗处理,得到要进行分析的数据,应用数据挖掘算法、构建挖掘模型,使用数据挖掘引擎,再分析得到的数据.
例如分类是数据挖掘中最常见的任务之一.把数据按照属性分成多个类别,基于数据集中的其他属性预测一个或多个离散变量.典型的分类算法有
图1 数据挖掘的过程
决策树、神经网络算法、贝叶斯算法[2].面临数据分类任务,原始数据往往存在很多问题,不能直接用于数据挖掘,需要对数据进行清洗,使这些数据符合数据挖掘任务.
将数据按照数据挖掘源数据的要求进行处理的工作可以通过数据清洗来解决.数据清洗是指发现并且纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理数据录入后的无效值和缺失值等[3].数据清洗的目的是除去数据集中不符合要求和不相关的信息.数据清洗的领域有如下几个方面.
2.1 数据一致性检查
数据一致性检查是根据每个变量的取值范围和相互关系,检查数据是否合乎要求,发现超出正常范围或者逻辑上不合理的数据[4].具有逻辑上不一致性的问题可能以多种方式存在:例如,在人员基本信息中,对象的出生日期与从身份证号码中的编号看出的出生日期不一样.当发现不一样时,要记录下来,便于进一步核实纠正.
2.2 无效值与缺失值的处理
由于录入、理解上的误差,数据中可能存在一些无效值和缺失值,针对这一类型的值,需要有适当的处理方法[5].常用的处理方法有:估计、整列删除、变量删除.
估计,最容易的办法就是用其他变量的值代替无效值或缺失值.这种办法较简单,但误差可能较大.另一种办法就是根据该对象其他数据的填写,通过逻辑推论进行估计.
整列删除,是删除含有缺失值的数据.这种做法的缺点是导致数据样本量大大减少,无法利用这一部分数据.
变量删除,若某一变量的缺失值很多,而且该变量对于所研究的问题不是特别重要,则可以考虑将该变量删除.
3.1 数据清洗的原理
数据清洗原理是利用有关技术,按照预先定义好的清理规则将原始未经清洗的数据,即脏数据,转化为满足数据质量要求的数据[3],如图2所示.
图2 数据清洗原理
3.2 数据清洗的方法
一般来说,数据清洗是将数据库中的数据去除重复的记录,并将余下的数据进行转换.通过一系列的清洗步骤,将数据以期望的格式输出.数据清洗从数据的准确性、完整性、一致性、有效性等几个方面来处理数据中的“脏数据”[3].
数据清洗一般针对具体的应用,因而很难将其归纳为统一的方法和步骤,但是可根据数据的不同而给出相应的数据清理方法.例如,在数据清洗中,SQL的CASE表达式是一种非常灵活的方式,用于创建有意义的变量.
CASE表达式允许根据对一个或者多个条件的评估来指派结果.运用CASE可以达到以下目标:改变值的标签,手动离散化列、减少有效状态的个数.
(1)数据的处理方法.如果有些缺失的数据可由其他数据源推导出来,可利用一定的推导方法将数据导入.否则能够用手工填入的数据就由手工填入.
(2) 错误值的检测及解决方法.可以用统计分析方法来识别错误值或异常值,亦可使用常识性规则来检测和清理数据.
(3) 重复记录的检测及消除方法.数据库中属性值完全相同的记录被认为是重复记录,通过判断记录间的属性值是否相等来检测记录是否重复,对于重复的记录可采取合并或清除.
(4)不一致性的检测及解决方法.可以通过定义数据的完整性约束来检测数据的不一致性.也可以通过分析数据发现联系,从而使数据保持一致.
数据清洗是数据库服务中必需有的一项技术,SQL Server就提供了这种服务与技术.以高技能人才信息系统数据库中的数据为例,如果以高技能人才的年龄、性别、学历、培训经历等作为影响预测其能否获奖的因素参与数据挖掘,那么就要为数据挖掘准备相关的数据.高技能人才信息系统的数据库中用于数据清洗的部分表及表中的部分字段含意,见表1.
表1 部分表名及列名含义
4.1 数据清洗的要求
需要准备的数据在年龄、性别、学历、培训经历这几个维度上进行分类,从而成为满足数据分析要求的数据.数据清洗的要求如表2所示.
表2 数据清洗的要求
需要说明的是在人员基本信息表中,有些人员的基本信息缺失比较严重.对于我们比较感兴趣的属性,可以通过人工查询的方式将缺失的内容进行填补,但有些无法进行填补的值,为了不影响数据分析的结果,将这部分记录进行删除.
4.2 数据的转换
将数据进行转换的目的是为了让数据更适用于计算与分析.为了不影响数据库中的原始数据,将人员基本信息表的内容写入到新表PI中.
(1)将年龄进行转换.由于在高技能人才信息系统数据库中人员的年龄没有直接的表示出来,可以通过人员基本信息表中的出生日期字段的值得出,我们需要根据人员的出生日期,按照表2所示对年龄进行分段:
首先,提取年龄字段的值.通过以下T-SQL语句计算出年龄的值.
CREATE VIEW P_AGE AS
SELECT *,DATEDIFF(year, birthday, GETDATE()) AS age
FROM PI
其次,将年龄离散化.年龄的值计算出来后是一组连续的值,根据表2的要求,对年龄字段的值进行离散化处理,使用的T-SQL语句如下:
SELECT id,age=
CASE
WHEN age<=30 THEN '2'
WHEN age<=40 THEN '3'
WHEN age<=50 then '4'
ELSE '5'
END
INTO AGE
FROM P_AGE
GO
这样,AGE表中就包含了人员的Id号及所属年龄分段的值.
(2)学历信息的转换.学历信息处理的T-SQL语句如下:
SELECT id,edu_degree=
CASE
WHEN edu_degree='大学本科' THEN '大'
WHEN edu_degree='研究生' THEN '研'
ELSE '专'
END
into EDU FROM pi
如此,EDU表中就包含了人员的Id号及其所对应的学历分类值.
(3)培训经历的转换.在培训经历表中,可看出同一个人员可能参加了多次的培训,而有的人员可能没有培训经历的记录.通过培训经历表与人员基本信息表进行外连接运算,就可看出哪些人参加过培训,哪些人没有参加培训.再根据数据挖掘需要,将人员的培训信息分为两种状态,即有和无,使用的T-SQL语句如下:
select p.id,train_name=
CASE
WHEN train_name is null THEN '无'
ELSE '有'
END
INTO TRAIN
from pi p left outer join train_case t
on p.id=t.people_info_id
go
经过上述处理后,我们从Train表中发现有些人的培训经历不止一次,而有些人一次培训也没有,这样一来,就出现了重复行问题,如图3左图所示.通过T-SQL语句将重复行去除的语句如下:
alter table train add bh int identity(1,1)--插入自动标识列
go
select * from train order by id,train_name
--下面使用子查询将重复行去除
delete from train where train.bh>(select min(bh)from
train b where train.id=b.id and train.train_name=b.train_name )
go
alter table train drop column bh--删除插入的列
在上述的语句中,使用了一个子查询,执行该语句的目的是为了删除重复行,其思想是先插入一个自动标识列,将除自动标识列外的其他列列值作比较,相同的就取其最小的自动标识列的列值,然后将所有Id大于最小Id的行都删除.
最后再将插入的自动编号列删除.该方法在删除重复行方面有效可行,效果较好.通过上面的语句,就可以将Train表中的重复行去除,如图3右图所示.
图3 培训经历重复行的删除
经过这样的处理后,表Train中就有人员的编号及相应的培训信息.
(4)获奖经历的转换.在获奖经历表中,与培训经历相似的,有一部分人经常获奖,而有一部分人没有获奖经历,采取与培训经历转换相同的方法,将获奖经历转换为表2所示的有和无两种状态.转换的方法与培训经历的处理相似,将转换后的获奖经历放在表WIN中.
经过上述数据转换之后,为便于数据分析,可将相关数据放在同一张表中.T-SQL语句如下:
SELECT pi.id,pi.gender,age.age_group,train.train_name,edu.edu_degree, ptp.pro_tec_position
Into CZZY
from pi inner join age on pi.id=age.id
inner join train on pi.id=train.id
inner join edu on pi.id=edu.id
inner join win on pi.id=win.id
经过数据清洗和转换,就有了CZZY表表示从高技能人才信息系统中提取出的人才的性别、年龄、学历、获奖信息.为了便于描述,将两张表的字段名称
变为用中文表示,编号改为自动编号,种子值为1,增量值为1,如图4所示.已经为数据挖掘准备好数据源了.
图4 经过数据清洗的数据
数据清洗在不同的领域中有着不同的应用,数据清洗的工具也有很多.在数据挖掘的过程中,为数据挖掘准备可供分析的数据源的质量会对数据挖掘结果的准确度产生影响.使用SQL进行数据清洗和转换,可以为数据挖掘提供较高质量的数据源.
[1]陈志军,冯小明,朱建.数据挖掘在计算机故障检测中的应用[J].电脑编程技巧与维护,2012(18).
[2]Jamie Maclennan,ZhaoHui Tang,Bogdan Crivat.数据挖掘原理与应用SQL Server 2008数据库[M].北京:清华大学出版社,2010.
[3]MBA智库百科.数据清洗[DB/OL]http://wiki.mbalib.com/wiki/数据清洗
[4]陈国良,谭凤珠,张金良,等.我国中原局部地区农村环境卫生调查[J].环境与健康杂志,2014(16).
[5]肖杨.北京重点商业街区顾客满意度研究[D].北京:北京工商大学,2010.
(责任编辑:王前)
Research on Data Cleaning in Data Mining
MENG Long-mei
(DepartmentofInformationEngineering,ChuzhouVocationalandTechnicalCollege,Chuzhou,Anhui239000,China)
Data cleaning is the most resource-consuming step in the data mining process. Data are effectively cleaned up and converted to comply with the requirements of data mining, and this is a key factor that affects the accuracy of data mining. The areas, principles and methods of data cleaning are discussed. The methods that use SQL for data cleaning and conversion are introduced depending on the needs of data mining in the case of data of highly skilled personnel information system. These methods are used to classify and organize the data so that make these data become dataset that meet the needs of mining.
data mining; data cleaning; classification; SQL
10.13877/j.cnki.cn22-1284.2015.04.003
2015-03-15
安徽省高等学校省级质量工程项目“示范实验实训中心信息实训中心”(2014sxzx032);滁州职业技术学院质量工程项目“计算机应用专业教学团队” (zlgc2014006)
孟龙梅,女,安徽滁州人,讲师.
TP274
A
1008-7974(2015)02-0007-04