基于R的数据挖掘方法与实践(1)——数据准备

来源:互联网 发布:淘宝鞋店排行榜 编辑:程序博客网 时间:2024/06/06 23:14

1、数据检查

数据检查是数据挖掘的第1步,从不同的维度检查数据,找出其中有问题的数据以便对其进行修正。

1.1 数据类型

查看数据的构成与形态,尤其是各列的属性。

> library(MASS)> data(ChickWeight)> str(ChickWeight)Classes ‘nfnGroupedData’, ‘nfGroupedData’, ‘groupedData’ and 'data.frame':578 obs. of  4 variables: $ weight: num  42 51 59 64 76 93 106 125 149 171 ... $ Time  : num  0 2 4 6 8 10 12 14 16 18 ... $ Chick : Ord.factor w/ 50 levels "18"<"16"<"15"<..: 15 15 15 15 15 15 15 15 15 15 ... $ Diet  : Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 1 ... - attr(*, "formula")=Class 'formula'  language weight ~ Time | Chick  .. ..- attr(*, ".Environment")=<environment: R_EmptyEnv>  - attr(*, "outer")=Class 'formula'  language ~Diet  .. ..- attr(*, ".Environment")=<environment: R_EmptyEnv>  - attr(*, "labels")=List of 2  ..$ x: chr "Time"  ..$ y: chr "Body weight" - attr(*, "units")=List of 2  ..$ x: chr "(days)"  ..$ y: chr "(gm)"

1.2 数量检查

样本个数太少会影响结果的解释程度,而样本个数太多,则统计上的显著则可能没有实际意义。

1.3质量检查

1.3.1数据的集中趋势

数据集中趋势的衡量方法包括平均数、中位数、众数、偏态系数、峰态系数等。

1.3.2数据的变异程度

数据的变异程度可以用标准差、四分位距、变异系数等进行衡量。

可以用psych包中的describe()的函数进行数据检查,它可以计算非缺失值的数量、平均数、标准差、中位数、截尾均值、绝对中位差、最小值、最大值、值域、偏度、峰度和平均值的标准误。例如,对MASS包中的ChickWeight数据进行检查的实例如下:

> library(psych)> describe(ChickWeight)       vars   n   mean    sd median trimmed   mad min max range  skew kurtosis   seweight    1 578 121.82 71.07    103  113.18 69.68  35 373   338  0.96     0.34 2.96Time      2 578  10.72  6.76     10   10.77  8.90   0  21    21 -0.02    -1.26 0.28Chick*    3 578  26.26 14.00     26   26.27 17.79   1  50    49  0.00    -1.19 0.58Diet*     4 578   2.24  1.16      2    2.17  1.48   1   4     3  0.31    -1.39 0.05

定义function,用以求得众数:

> Mode <- function(x)+ {+   return(as.numeric(names(table(x))[table(x) == max(table(x))]))+          + }> varNames = colnames(ChickWeight)> for (i in 1:ncol(ChickWeight))+ {+   print(varNames[i]); print(Mode(ChickWeight[, i]))+ }[1] "weight"[1] 41[1] "Time"[1] 0 2[1] "Chick"[1] 13  9 20 10 17 19  4  6 11  3  1 12  2  5 14  7 24 30 22 23 27 28 26 25 29 21 33 37 36 31 39 38 32 40 34 35 45 43 41[40] 47 49 46 50 42 48[1] "Diet"[1] 1

1.3.3数据探索与可视化

(1)盒须图

盒须图也称为箱线图,用于展示数据的中央趋势与离散程度。盒中包含有50%的属性数据,盒子长度越大说明数据越分散,盒子上下所延伸出的线用以连接离群值与极端值。当数据介于1.5~3倍的四分位距(IQR)时,称为离群值;超过3倍IQR时,称为极端值。

boxplot(ChickWeight$weight)


(2)折线图

折线图可以展现数据分布的变化趋势,用户可以通过折线的上升或下降看出序列的变动,从而推测数值的变化。

> ChickWeightPart = ChickWeight[1:12, ]> plot(ChickWeightPart$weight,ChickWeightPart$Time,type="o",xlab="Time",ylab="Chick Weight",col="red",main="Chick Weight by Time",pch=c(15))















(3)散点图

散点图可以通过点的疏密程度、延展方向和分布特征,了解变量间的相互关系,回归分析中,我们可以通过散点图作为筛选变量的基本检验步骤,初步得到因变量和自变量之间的相关特性。

> plot(ChickWeightPart$weight, ChickWeightPart$Time)


1.4 数据清理

数据在使用前可能存在以下问题:

(1)不正确的数据

判断数据是否正确,首先要确定数据的有效范围,比如某个同学的身高达到5011cm,则肯定是不正确的数据。

(2)不一致的数据

不同来源的数据属性可能不同,在数据表达、比例定义或编码上也会有不同,因此产生数值或字段不一致的情况。例如,在记录重量过程中,有的数据是以kg为单位记录的,有的数据是以ton为单位。在使用数据之前,需要首先将这些数据进行转换统一。

(3)重复的数据

在数据库数据表的使用过程中,常常会遇到两项重复数据完全相同,这些数据应当删除其中的一组。

(4)冗余的数据

数据冗余主要是针对具有相同意义或彼此之间存在明确转换关系的数据,例如一组数据中既包含学生的出生日期又包含学生年龄,那就可以将学生的年龄删除,因为可以从学生的出生日期推断出提取学生的年龄。

(5)遗漏值

遗漏值可能出现的情况有很多,例如问卷调查过程中被调查人没有填写部分数据,数据录入过程中出现遗漏,数据采集设备损坏导致的数据缺失,数据保存过程中出现遗失等等。遗漏值的处理需要视情况而定。

i) 直接删除该观察值。这是最简单直接的处理方法,但如果数据遗漏比例较大,此种处理将导致数据的大量流失。

ii) 人工填写遗漏值。通过人的主观判断来填补遗漏值,但比较费时费力,如果遗漏值较多,此方法并不合适。

iii) 使用全局常数填充遗漏值。例如对遗漏值统一采用“9999”进行替换,但这种方法只能解决后续的部分数据输入问题,无法解读遗失属性所隐含的信息。

iv) 使用属性平均值。对缺失的数据,采用字段平均值代替遗漏值。缺点是不具有客观性,当数据本身有类别或等级之分的时候,容易高估或低估数据。

v) 用同一类别的所有样本平均值填充遗漏值。

vi) 利用数据挖掘模式来填充遗漏值。可用回归分析、决策树、人工神经网络等数据挖掘推导工具。

(6)噪声

噪声表示一个数据中的随机误差或干扰。这些误差或干扰可能来自认为因素或机器设备产生的误差。针对噪声数据,若非数据本身的误差,经由噪声识别之后即可去除,若是数据本身既有随机误差,可以利用以下几种数据平滑技术降低其对结果的影响。

i) 分箱法

分箱法是利用相邻值来局部平滑存储在同一箱子的数据值。将数据想排序后,依序排入预定的箱子中,排入方式可采用等宽、等频方法,接着利用各箱子的平均值、中位数、边界值等三种数值进行数据平滑。

ii) 数据配适

利用数据配适为新的函数来平滑数据,例如采用简单线性回归以一个解释变量估计目标变量。

(7)离群值

在数据集中,如果某些数据的表现显然与其他数据不一样时,这些数据被称为离群值。例如初二1班的同学身高都在140~160厘米之间,但有几位同学的身高好过200厘米,则称这些同学的身高是离群值。离群值会影响数据挖掘的效果,特别是预测。因此在开展数据挖掘的时候要先处理离群值。

i) 直接删除

当发现数据是由于仪器或工具造成的判断错误,或者可以明确判断出数据完全不合理时,可以将数据直接删除。

ii) 用其他数值替换,将数据范围归一化

当数值变量为空值或者非数值数据,当数据具有一定的代表性时,则可以用其他数据来替换。

iii) 聚类分析

离群值可以利用聚类分析检测出,借此将有类似点组合为一个族群,通过考察这些数据的重要性,并确定是否删除或保留。

1.5 数据转换

1.5.1 数据值转换

(1)归一化

归一化是将属性数据按比例放到一个特定区间中。归一化可以防止较大初始值域与较小初始值域间相互比较的情况以及权重过大的问题。

极小值—极大值归一化是常用的归一化方法,主要是对原始数据进行线性转换,假设minXA和maxXA分别是属性A的最小值和最大值,其计算方式是:

X’ =(X - minXA)*(newmaxXA - newminXA)/(maxXA - minXA) + newminXA

(2)标准化

数据标准化是基于属性A的平均值和标准差将数据标准化。A的值X标准化后为Z,可经下式计算而得:

Z = (X- avgXA)/SA

其中,avgXA和SA分别为属性A的平均值和标准差。

1.5.2 数据类型转变

(1)离散型数据转成连续型数据

离散型数据转换成连续型数据必须加入领域知识来定义离散值的距离或相似程度。

(2)连续型数据转成离散型数据

离散化是将连续数据分到数个小区间。以类别取代原有的连续数据。典型的离散化过程有四个步骤:i) 将数据的连续数值进行排序;ii) 选择分割或合并的准则;iii) 分割或合并数值;iv) 是否符合停止条件。

阅读全文
0 0
原创粉丝点击