数据预处理

 

1.概述

数据挖掘是从大量的,不完全的,有噪声的,模糊的,随即的数据中,提取隐含在其中的,人们事先不知道的,但有潜在的有用信息和知识的过程。数据挖掘过程一般包括数据采集,数据预处理,数据挖掘以及知识评价和呈现。在一个完整的数据挖掘过程中,数据预处理要花费60%左右的时间,而后的挖掘工作仅仅占工工作量的10%左右。目前对挖掘的研究主要集中于挖掘技术,挖掘算法,挖掘语言等在海量的原始数据中,存在这大量杂乱的,重复则,不完整的数据,严重影响到数据挖掘算法的执行效率,有可能导致挖掘结果的偏差。

数据预处理分类:从对不同的源数据进行预处理的功能来分,数据预处理主要包括数据清理,数据集成,数据变换,数据规约等4个基本的功能。实际的数据预处理过程中,这4中功能不一定都用得到,而且,他们的使用也没有先后顺序,某种预处理可能先后要多次进行。从数据预处理所采用的技术和方法来分:基本粗集理论的简约方法;复共线性数据预处理方法;基于Hash函数取样的数据预处理方法;基于遗传算法数据预处理方法;基于神经网络的数据预处理方法;Web挖掘的数据预处理方法等等。在数据挖掘整体过程中,海量的原始数据中存在这大量复杂的,重复的,不完整的数据,严重影响到数据挖掘算法的执行效率,甚至可能导致挖掘结果的偏差,为此,在数据挖掘算法执行之前,必须对收集到的原始数据进行预处理,以改进数据的质量,提高数据挖掘过程的效率,精度,性能。数据预处理主要包括数据清理,数据集成,数据变换与数据规约等技术。

1.1数据清理

数据清理要去除源数据集中的噪声数据和无关数据,处理遗漏数据和清洗脏数据,空缺值,识别删除孤立点等。

(1.1)噪声:噪声是一个测量变量中的随即错误和偏差,包括错误的值或偏离期望的孤立点值,对于噪声数据有如下几种处理方法:分箱法,聚类法识别孤立点,回归

(1.2)空缺值的处理:目前最常用的方法是使用最可能的值填充空缺值,如用一个全局常量替换空缺值,使用属性的平均值填充空缺值或将所有元组按照某些属性分类,然后用同一类中属性的平均值填充空缺值。例:一个公司职员平均工资收入为3000元,则使用该值替换工资中“基本工资”属性中的空缺值。

(1.3)清洗脏数据:异构数据源数据库中的数据并不都是正确的,常常不可避免的存在着不完整,不一致,不精确和重复的数据,这些数据统称为“脏数据”,脏数据能使挖掘过程陷入混乱,导致不可靠的输出。清洗脏数据可采用下面的方式:1手工实现方式,2用专门编写的应用程序,3采用概率统计学远离查找数值异常的记录,4对重复记录的检测和删除

1.2数据集成

(2.1) 实体识别问题:在数据集成时候,来自多个数据源的现实世界的实体有时并不一定是匹配的,例如:数据分析者如何才能确信一个数据库中的student_id和另一个数据库中的stu_id值是同一个实体,通常,可以根据数据库或者数据仓库的元数据来区分模式集成中的错误。

(2.2)冗余问题:数据集成往往导致数据冗余,如同一属性多次出现,统一属性命名不一致等,对于属性间冗余可以用先关分析检测到,然后删除。

数据值冲突检测与处理:对于现实世界的同一实体,来自不同数据源的属性值可能不同,这可能是因为表示、比例、或编码、数据类型、单位不统一、字段长度不同。

1.3、数据变换

数据变换主要是找到数据的特征表示,用维变换或转换方法减少有效变量的数目或找到数据的不变式,包括规格化,规约,却换,旋转,投影等操作。规格化是指将元组集按照规格化条件进行合并,也就是属性值量纲的归一化处理。规格化定义了属性的多个取值到给定虚拟值的对应关系,对于不同的数值属性特点,一般可以分为取值连续和取值分散的数值属性规格化问题。

1.4、数据规约:

指将数据按语义层次结构合并,语义层次结构定义了元组属性值之间的语义关系,规约化和规约能大量减少元组个数,提高计算效率,同时,规格化和规约过程提高了知识发现的起点,使得一个算法能够发现多层次的知识,适应不同应用的需要。数据规约是将数据库中的海量数据进行规约,规约之后的数据仍接近于保持原数据的完整性,但数据量相对小的多,这样进行挖掘的性能和效率会得到很大的提高。数据规约的策略主要有数据立方体聚集,维规约,数据压缩,数值压缩,离散化和概念分层。

(4.1)维规约:通过删除不相关的属性(或纬)减少数据量,不仅仅压缩了数据集,还减少了出现在发现模式上的属性数目,通常采用属性子集选择方法找出最小属性集,使得数据类的概率分布尽可能的接近使用所有属性的原分布

(4.2)数据压缩,数据压缩分为无损压缩和有损压缩,比较流行和有效的有损数据压缩方法是小波变换和主要成分分析,小波变换对于稀疏或倾斜数据以及具有有序属性的数据有很好的压缩效果。

(4.3)数值规约:数值归约通过选择替代的、较小的数据表示形式来减少数据量。数值归约技术可以是有参的,也可以是无参的。有参方法是使用一个模型来评估数据,只需存放参数,而不需要存放实际数据。有参的数值归约技术有以下两种,回归:线性回归和多元回归;对数线性模型:近似离散属性集中的多维概率分布。无参的数值归约技术有3种:直方图,聚类,选样。

(4.4)概念分层通过收集并用较高层的概念替换较低层的概念来定义数值属性的一个离散化。概念分层可以用来归约数据,通过这种概化尽管细节丢失了,但概化后的数据更有意义、更容易理解,并且所需的空间比原数据少。对于数值属性,由于数据的可能取值范围的多样性和数据值的更新频繁,说明概念分层是困难的。数值属性的概念分层可以根据数据的分布分析自动地构造,如用分箱、直方图分析、聚类分析、基于熵的离散化和自然划分分段等技术生成数值概念分层。由用户专家在模式级显示地说明属性的部分序或全序,从而获得概念的分层;只说明属性集,但不说明它们的偏序,由系统根据每个属性不同值的个数产生属性序,自动构造有意义的概念分层。

2、实现过程

2.1、数据分析

这次作业拿到的是一份2010年9月新生体测体成分结果。由以下项目组成:

1编号2性别 3年龄4身高5体重6细胞内液7细胞外液8肌肉重9蛋白质10瘦体重11无机盐12脂肪重13脂肪百分比14腰臀15肥胖度16体质指数17肌肉控制18脂肪控制19体重控制20标准体重21目标体重22基础代谢率23躯干肌肉24躯干骨质25躯干脂肪26躯干脂肪百分比27左上肢肌肉28左上肢骨质29左上肢脂肪3 0右上肢肌肉31右上肢骨质32右上肢脂肪33左下肢肌肉34左下肢骨质35左下肢脂肪36右下肢肌肉37右下肢骨质38右下肢脂肪。明显看到有些编号重复缺失等问题,因此我们进行了如下处理。

2.2数据处理
2.2.1编号问题:

选用了MATLAB平台进行了作业,首先对人员编号进行了检查,有的编号重复,有的编号缺失,用如下代码:

clear;clc;

A=xlsread('数据');

[m,n]=size(A);

for i=1:1:m-1

if (A(i,1)==A(i+1,1));

fprintf('重复编号 %d ',A(i+1,1))

elseif (A(i+1,1)>(A(i,1)+1));

fprintf('编号缺失 %d ---%d ',A(i,1),A(i+1,1))

end

end

得出结果如下:

重复编号 0 重复编号 0 编号缺失 0 ---27 编号缺失 37 ---48 编号缺失 50 ---52 编号缺失 55 ---64 编号缺失 64 ---75 重复编号 77 重复编号 80 编号缺失 82 ---84 重复编号 87 编号缺失 87 ---106 编号缺失 111 ---113 编号缺失 118 ---128 编号缺失 134 ---136 编号缺失 140 ---150 编号缺失 158 ---160 编号缺失 160 ---162 编号缺失 162 ---165 编号缺失 168 ---170 编号缺失 180 ---183 编号缺失 193 ---197 编号缺失 198 ---201 编号缺失 208 ---210 编号缺失 210 ---212 重复编号 213 编号缺失 215 ---217 编号缺失 223 ---225 编号缺失 225 ---229 编号缺失 239 ---241 编号缺失 241 ---243 编号缺失 248 ---251 编号缺失 251 ---265 编号缺失 265 ---267 编号缺失 267 ---269 重复编号 278 编号缺失 278 ---281 编号缺失 281 ---285 编号缺失 285 ---289 编号缺失 289 ---298 编号缺失 298 ---302 编号缺失 302 ---304 编号缺失 306 ---308 编号缺失 308 ---311 重复编号 311 重复编号 313 编号缺失 330 ---332 编号缺失 335 ---337 编号缺失 340 ---342 重复编号 343 编号缺失 366 ---368 编号缺失 368 ---370 重复编号 371 编号缺失 371 ---373 编号缺失 373 ---375 编号缺失 378 ---380 重复编号 385 编号缺失 385 ---387 重复编号 397 编号缺失 398 ---400 编号缺失 405 ---408 编号缺失 410 ---413 编号缺失 443 ---445 编号缺失 445 ---448 编号缺失 456 ---458 编号缺失 462 ---464 重复编号 474 编号缺失 475 ---477 编号缺失 480 ---482 编号缺失 485 ---487 编号缺失 487 ---489 编号缺失 510 ---512 编号缺失 512 ---515 编号缺失 523 ---532 编号缺失 532 ---537 编号缺失 540 ---542 编号缺失 543 ---552 编号缺失 552 ---554 编号缺失 559 ---561 编号缺失 562 ---565 编号缺失 566 ---569 编号缺失 573 ---576 重复编号 576 重复编号 576 编号缺失 576 ---582 编号缺失 582 ---584 编号缺失 587 ---589 编号缺失 594 ---596 编号缺失 598 ---601 编号缺失 603 ---608 编号缺失 619 ---621 编号缺失 624 ---630 编号缺失 631 ---633 编号缺失 633 ---635 编号缺失 635 ---637 编号缺失 637 ---641 编号缺失 642 ---644 编号缺失 645 ---648 编号缺失 649 ---651 编号缺失 660 ---662 编号缺失 663 ---670 编号缺失 671 ---674 编号缺失 674 ---676 编号缺失 682 ---685 编号缺失 687 ---689 编号缺失 691 ---693 编号缺失 697 ---699 编号缺失 701 ---706 编号缺失 707 ---710 编号缺失 710 ---712 编号缺失 712 ---714 编号缺失 714 ---726 编号缺失 728 ---732 编号缺失 732 ---739 编号缺失 740 ---743 编号缺失 743 ---746 编号缺失 746 ---752 编号缺失 752 ---760 编号缺失 761 ---888 编号缺失 888 ---999 重复编号 999 重复编号 999 重复编号 999 重复编号 999 重复编号 999 编号缺失 1000 ---8888

比较Excel发现我们得出的结论是正确的。

2.2.2数据错误

我们用如下代码对每个人的各项指标进行了绘图

for i=1:1:m-1

if (A(i,2)==0);

plot(1:38,A(i,1:38),'r')

hold on

else

plot(1:38,A(i,1:38),'b')

hold on

end

end

ip_image002

图中红色和蓝色代表不同的性别,可以看出在33:左下肢肌肉出现一个很高的峰这应该是一个错误的点。我们用如下代码:

if A(i,33)>1000

fprintf('此数据错误 ',i)

end

检查出在155行编号为278的人左下肢肌肉为8513,这明显是错误的。我们ip_image004

我们对这一数据修改为9之后,再进行画图,类似的操作发现如下明显数据错误问题:

ip_image006 lip_image00764行数据

ip_image009 lip_image01064行数据

ip_image012 ip_image014

ip_image016 ip_image018 ip_image020155行数据

可见64行和155行数据错误数据很多我们将其删除。

ip_image022ip_image024

82和386行数据可以看到应该只是单纯的多了个负号。我们将其改正即可。

2.2.3相关性分析

我们用如下代码做了对性别的相关性分析

for i=1:1:n

c(i) = corr2 (A(:,2),A(:,i));

end

bar(1:38,abs(c));

得出了下图:

ip_image026

可以看到在22:基础代谢率其相关系数达到最大:-0.8109749767379714,其余的相关系数如下:

Columns 1 through 7

0.0334 1.0000 -0.1275 -0.6759 -0.5501 -0.7927 -0.7442

Columns 8 through 14

-0.7792 -0.7783 -0.7790 -0.7810 0.2526 0.6608 -0.2405

Columns 15 through 21

-0.1406 -0.2881 0.1156 0.0178 0.1200 -0.6724 -0.6410

Columns 22 through 28

-0.8110 -0.7789 -0.7752 0.2527 0.6608 -0.6541 -0.4464

Columns 29 through 35

0.2462 -0.7573 -0.4934 0.2417 -0.7709 -0.7203 0.1367

Columns 36 through 38

-0.1952 -0.0630 0.1480

我们进行放大之后如下图,图上红色蓝色有较好的区分度,可知0代表的蓝色为男生,1代表的红色应该为女生。

ip_image028

ip_image030 ip_image032

同时发现第36右下肢肌肉、33左下肢肌肉对男生女生也有比较好的区分度

ip_image034 ip_image036

由上图26:躯干脂肪百分比可以看到女生的脂肪百分比平均要高于男生,23躯干肌肉男生要多于女生。

ip_image038ip_image040

13脂肪百分比女生要高于男生。11无机盐男生则高于女生。

ip_image042ip_image044

10瘦体重男生多于女生,9蛋白质也是男生高于女生。

ip_image046ip_image048

8肌肉重男生高于女生,7细胞外液6细胞内液均男生要高一点。

ip_image050ip_image052

可以看到男生的身高普遍比女生高一点,体重普遍重一些。

3、数据预处理总结

这次作业第一次接触了数据挖掘的技术,了解了在大数据技术中数据预处理的一些知识,为后期的学习工作做了一定的准备,但是可以看出在MATLAB平台下面能处理的东西有限,且需要自己编写代码,这为我们的工作造成一定的难度,因此,以后的工作还是要借助专业的数据挖掘平台比如spss或是weka来完成。

posted @ 2016-03-10 20:21  HUSTLX  阅读(6938)  评论(0编辑  收藏  举报