如何進(jìn)行大數(shù)據(jù)中R語(yǔ)言的缺失值處理

本篇文章給大家分享的是有關(guān)如何進(jìn)行大數(shù)據(jù)中R語(yǔ)言的缺失值處理,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

10年積累的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有猇亭免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

    拿到數(shù)據(jù)后,在清楚了分析需求后,別急著各種統(tǒng)計(jì)、模型一塊上,先給數(shù)據(jù)做個(gè)“清潔”再說(shuō)。數(shù)據(jù)中往往會(huì)有各種缺失值,異常值,錯(cuò)誤值等,今天先介紹一下如何處理缺失值,才能更好的數(shù)據(jù)分析,更準(zhǔn)確高效的建模。

一 查看數(shù)據(jù)集的缺失情況

    R中使用NA代表缺失值,用is.na識(shí)別缺失值,返回值為T(mén)RUE或FALSE。由于邏輯值TRUE和FALSE分別等價(jià)于數(shù)值1和0,可用sum()和mean()來(lái)獲取數(shù)據(jù)集的缺失情況。

載入R包及內(nèi)置數(shù)據(jù)集

library(VIM)#VIM包的sleep數(shù)據(jù)集示例data(sleep,package="VIM")

1)查看數(shù)據(jù)集整體有多少缺失值及百分比

sum(is.na(sleep))mean(is.na(sleep))

2)查看數(shù)據(jù)集特定變量(列)有多少缺失值及百分比

sum(is.na(sleep$Sleep))mean(is.na(sleep$Sleep))

3)數(shù)據(jù)集中多個(gè)行包含缺失值

mean(!complete.cases(sleep))

4)列出沒(méi)有缺失值的行

sleep[complete.cases(sleep),] #利用函數(shù)
list <-which(rowSums(is.na(sleep)) > 0) ; sleep[-list,] # 效果同上

5)列出有一個(gè)或多個(gè)缺失值的行

sleep[!complete.cases(sleep),]list <-which(rowSums(is.na(sleep)) > 0) ; sleep[list,]


二  探索缺失值

2.1 mice包展示數(shù)據(jù)整體的缺失情況

library(mice)md.pattern(sleep)BodyWgt BrainWgt Pred Exp Danger Sleep Span Gest Dream NonD  42       1        1    1   1      1     1    1    1     1    1  09        1        1    1   1      1     1    1    1     0    0  23        1        1    1   1      1     1    1    0     1    1  12        1        1    1   1      1     1    0    1     1    1  11        1        1    1   1      1     1    0    1     0    0  31        1        1    1   1      1     1    0    0     1    1  22        1        1    1   1      1     0    1    1     1    0  22        1        1    1   1      1     0    1    1     0    0  3         0        0    0   0      0     4    4    4    12   14 38

    其中 ’1’代表完好數(shù)據(jù),’0’代表缺失值。左側(cè)第一列,’42’代表有42條數(shù)據(jù)無(wú)缺失值,第一個(gè)’9’代表9條數(shù)據(jù)Dream和NonD同時(shí)缺失。最后一行返回的就是每一個(gè)變量(列)對(duì)應(yīng)的缺失數(shù)目,38為一共有多少缺失值。下圖同樣的意思。

如何進(jìn)行大數(shù)據(jù)中R語(yǔ)言的缺失值處理

2.2 VIM包展示數(shù)據(jù)缺失情況

1)展示sleep數(shù)據(jù)集的整體缺失情況

library("VIM")aggr(sleep,prop=FALSE,numbers=TRUE)

如何進(jìn)行大數(shù)據(jù)中R語(yǔ)言的缺失值處理

2)展示sleep數(shù)據(jù)集感興趣的變量的缺失情況

marginplot(sleep[c("Sleep","Dream")],pch=c(20),col=c("darkgray","red","blue"))

如何進(jìn)行大數(shù)據(jù)中R語(yǔ)言的缺失值處理

三  處理缺失值

    當(dāng)充分了解了缺失值的情況后,可以根據(jù)數(shù)據(jù)量的大小,以及某一列是否為重要的預(yù)測(cè)作用變量,對(duì)數(shù)據(jù)集中的NA行和某些NA列進(jìn)行處理。

3.1 刪除缺失值

1)刪除數(shù)據(jù)集中所有含有NA的行和列

sleep_noNA <- na.omit(sleep)sleep_noNA <- x[complete.cases(sleep),] #兩種一樣的效果

2)刪除所有含有NA的列

na_flag <- apply(is.na(sleep), 2, sum)sleep[,which(na_flag == 0)]

3)刪除所有含有NA的行

na_flag <- apply(is.na(sleep), 1, sum)sleep[which(na_flag == 0),]

4)根據(jù)某些列的NA,移除相應(yīng)的行

sleep[complete.cases(sleep[,c(1,3)]),]

4)表示將向量x中所以NA元素用某個(gè)值來(lái)代替  

sleep[is.na(sleep)] <- 999

   

3.2 填充缺失值

當(dāng)數(shù)據(jù)量不是很大或者變量比較重要時(shí)候,可以考慮對(duì)缺失值進(jìn)行填充。

1)常見(jiàn)數(shù)值填補(bǔ)

library(Hmisc)data(sleep)#均值填充,適用于接近正態(tài)分布impute(sleep$NonD , mean) #中位數(shù)填充,偏態(tài)數(shù)據(jù)但是不是很?chē)?yán)重impute(sleep$Dream , median)# 填充特定值impute(sleep$Span, 0)

2)DMwR包進(jìn)行kNN最近鄰插補(bǔ)

library(DMwR)data(sleep)data <- sleep                   # 備份數(shù)據(jù),對(duì)比填充結(jié)果set.seed(1120)sleep$BrainWgt[sample(nrow(sleep), 20)] <- NAhead(sleep)   BodyWgt BrainWgt NonD Dream Sleep Span Gest Pred Exp Danger1 6654.000   5712.0   NA    NA   3.3 38.6  645    3   5      32    1.000      6.6  6.3   2.0   8.3  4.5   42    3   1      33    3.385       NA   NA    NA  12.5 14.0   60    1   1      14    0.920      5.7   NA    NA  16.5   NA   25    5   2      35 2547.000   4603.0  2.1   1.8   3.9 69.0  624    3   5      46   10.550       NA  9.1   0.7   9.8 27.0  180    4   4      4

# 最近鄰填補(bǔ)缺失值

knnOutput <- knnImputation(sleep[c(1:6)])anyNA(knnOutput)head(knnOutput)BodyWgt   BrainWgt      NonD    Dream Sleep      Span1 6654.000 5712.00000  2.534467 1.675830   3.3 38.6000002    1.000    6.60000  6.300000 2.000000   8.3  4.5000003    3.385   19.67034 10.109710 2.248604  12.5 14.0000004    0.920    5.70000 12.803345 3.353104  16.5  8.1735685 2547.000 4603.00000  2.100000 1.800000   3.9 69.0000006   10.550   95.83459  9.100000 0.700000   9.8 27.000000

# 將插補(bǔ)值與實(shí)際值進(jìn)行對(duì)照

actuals <-data$BrainWgt[is.na(sleep$BrainWgt)]
predicteds <- knnOutput[is.na(sleep$BrainWgt),"BrainWgt"]

# 兩樣本均值檢驗(yàn)并計(jì)算其相似度

t.test(actuals, predicteds)        # 接受差值為0的假設(shè)cor(actuals, predicteds)           # 相關(guān)系數(shù)

    當(dāng)然根據(jù)數(shù)據(jù)和目的的不同,采用的缺失值處理方式肯定不一樣,需要我們對(duì)數(shù)據(jù)和需求有足夠的認(rèn)識(shí),做出比較好的判斷和處理。

以上就是如何進(jìn)行大數(shù)據(jù)中R語(yǔ)言的缺失值處理,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當(dāng)前標(biāo)題:如何進(jìn)行大數(shù)據(jù)中R語(yǔ)言的缺失值處理
標(biāo)題網(wǎng)址:http://bm7419.com/article6/jcspig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、企業(yè)建站、品牌網(wǎng)站建設(shè)、微信小程序、、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司