4.R语言进行数据预处理
在实际情况下,数据通常是不完整(缺少属性值或某些感兴趣的属性,或仅包含聚集数据)、含噪声(包含错误或存在偏离期望的离群值)、不一致的,这样的数据必须经过预处理,剔除其中的噪声,回复数据的完整性和一致性后才能使用数据挖掘技术进行分析。
使用mice软件包中的示例数据nhanes2来进行演示。加载mice包前,要先加载lattice,MASS, nnet包:
install.packages("lattice")
install.packages("MASS")
install.packages("nnet")
library(lattice)
library(MASS)
library(nnet)
install.packages("mice")
library(mice)
data(nhanes2)
缺失值处理
判断是否存在缺失值:
> sum(is.na(nhanes2)) #计算nhanes2中缺失值数量
[1] 27
>
>sum(complete.cases(nhanes2)) #计算nhanes2中完整样本的数量
[1] 13
> md.pattern(nhanes2)
age hyp bmi chl
13 1 1 1 1 0
1 1 1 0 1 1
3 1 1 1 0 1
1 1 0 0 1 2
7 1 0 0 0 3
0 8 9 1027
其中1表示没有缺失数据,0表示存在缺失数据。
1. 直接删除法
这种方法最为简单有效,但前提是缺失数据的比例较少,且缺失数据是随机出现的,这样删除数据后对分析影响不大。
2. 随机插补法
从整体中随机抽取某个样本代替缺失样本。
> #随机插补法
> sub =which(is.na(nhanes2[,4]) == TRUE) #返回nhanes2数据集中第4列为NA的行
> dataTR =nhanes2[-sub,] #将第4列不为NA的数据存数dataTR中
> dataTE =nhanes2[sub,] #将第4列为NA的数据存入dataTE
> dataTE[,4] =sample(dataTR[,4],length(dataTE[,4]),replace=T) #在非缺失值中简单抽样
> dataTE
age bmi hyp chl