logo资料库

R 语言 数据预处理.doc

第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
资料共12页,剩余部分请下载后查看
http://blog.csdn.net/helen1313/article/details/380
http://blog.csdn.net/yujunbeta/article/details/241
缺失值处理
1.      直接删除法
2.      随机插补法
3.      均值法
4.      回归模型插补法
5.      热平台插补
6.      冷平台插补
噪声数据处理
数据集成
http://blog.csdn.net/helen1313/article/details/38041243 http://blog.csdn.net/yujunbeta/article/details/24142545 R 语言进行数据预处理 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 1 20-39 NA 204 4 60-99 NA 187 10 40-59 NA 238 11 20-39 NA 187 12 40-59 NA 187 15 20-39 29.6 no 187 16 20-39 NA 187 20 60-99 25.5 yes 284 21 20-39 NA 204
24 60-99 24.9 no 238 3. 均值法 均值法通过计算缺失值所在变量所有非缺失值的均值,使用均值来代替缺失值。优点:不会 减少信息,处理简单;缺点:当缺失值数据不是随机出现时会产生偏差。 > #均值法 > sub =which(is.na(nhanes2[,4]) == TRUE) #返回 nhanes2 数据集中第 4 列为 NA 的行 > dataTR =nhanes2[-sub,] #将第 4 列不为 NA 的数据存数 dataTR 中 > dataTE =nhanes2[sub,] #将第 4 列为 NA 的数据存入 dataTE > dataTE[,4] =mean(dataTR[,4]) #用非缺失值的均值代替缺失值 > dataTE age bmi hyp chl 1 20-39 NA 191.4 4 60-99 NA 191.4 10 40-59 NA 191.4 11 20-39 NA 191.4 12 40-59 NA 191.4 15 20-39 29.6 no 191.4 16 20-39 NA 191.4 20 60-99 25.5 yes 191.4 21 20-39 NA 191.4
24 60-99 24.9 no 191.4 4. 回归模型插补法 由于随机插补和均值插补中没有利用相关变量信息,因此会存在一定偏差,而回归模型是将 需要插补变量作为因变量,其他相关变量作为自变量,通过建立回归模型预测出因变量的值 对缺失变量进行插补。 > #回归模型插补法 > sub =which(is.na(nhanes2[,4]) == TRUE) #返回 nhanes2 数据集中第 4 列为 NA 的行 > dataTR =nhanes2[-sub,] #将第 4 列不为 NA 的数据存数 dataTR 中 > dataTE =nhanes2[sub,] #将第 4 列为 NA 的数据存入 dataTE > > lm =lm(chl~age,data=dataTR) #利用 dataTR 中 age 为自变量,chl 为因变量构建线性回 归模型 lm > dataTE[,4] =round(predict(lm,dataTE)) #按模型 lm 对 dataTE 中的缺失值进行预测 > dataTE age bmi hyp chl 1 20-39 NA 169 4 60-99 NA 225 10 40-59 NA 203 11 20-39 NA 169 12 40-59 NA 203 15 20-39 29.6 no 169
16 20-39 NA 169 20 60-99 25.5 yes 225 21 20-39 NA 169 24 60-99 24.9 no 225 5. 热平台插补 在非缺失值所在的样本中找到一个与缺失值所在样本相似的样本(匹配样本),利用其观测 值对缺失值进行插补。 > #热平台插补 > accept =nhanes2[which(apply(is.na(nhanes2),1,sum) !=0),] #存在缺失值的样本 > donate =nhanes2[which(apply(is.na(nhanes2),1,sum) ==0),] #不存在缺失值的样本 > accept[1,] age bmi hyp chl 1 20-39 NA NA > donate[1,] age bmi hyp chl 2 40-59 22.7 no 187 上述程序按照样本中是否含有缺失值将 nhanes2 分成存在缺失值和无缺失值两个数据表。 对于 accept 中的每个样本,热平台插补就是在 donate 中找到与该样本相似的样本,用相似 样本的对应值代替该样本的缺失值。如,对于 accept 中的第二个样本,插补方法如下: > #对 accept 第二个样本进行热平台插补
> accept[2,] age bmi hyp chl 3 20-39 30.1 no 187 > sa =donate[which(donate[,1]==accept[2,1]&donate[,3]==accept[2,3]&donate[,4]==accept[2,4] ),] > sa age bmi hyp chl 8 20-39 30.1 no 187 > accept[2,2] =sa[1,2] #用找到的样本替代缺失值 > accept[2,] age bmi hyp chl 3 20-3930.1 no 187 实际操作中,尤其当变量数量很多时,通常很难找到与需要插补样本完全相同的样本,此时 可以看做某些变量将数据分成,在层中对缺失值进行均值插补,即采取冷平台插补方法。 6. 冷平台插补 > #5 冷平台插补 > level1<-nhanes2[which(nhanes2[,3]=="yes"),] #按照变量 hyp 分层 > level1 age bmi hyp chl
14 40-59 28.7 yes 204 17 60-99 27.2 yes 284 18 40-59 26.3 yes 199 20 60-99 25.5 yes NA > level1[4,4] =mean(level1[1:3,4]) #用层内均值代替第 4 个样本缺失值 > level1 age bmi hyp chl 14 40-59 28.7 yes 204 17 60-99 27.2 yes 284 18 40-59 26.3 yes 199 20 60-99 25.5 yes 229 噪声数据处理 噪声是一个测量变量中的随机错误或偏差,包括错误值或偏离期望的孤立点值。在 R 中可 以通过调用 outliers 软件包中的 outlier 函数寻找噪声数据,该函数通过寻找数据集中与其他 观测值及均值差距最大的点作为异常值。 outlier(x, opposite = FALSE, logical =FALSE) x: 一个数据,通常是一个向量,如果 x 输入的是一个数据框或矩阵,则 outlier 函数将逐列 算出; opposite: 默认为 FALSE,当为 TRUE 时,给出相反值;
分享到:
收藏