您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何進行大數據中R語言的缺失值處理,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
拿到數據后,在清楚了分析需求后,別急著各種統計、模型一塊上,先給數據做個“清潔”再說。數據中往往會有各種缺失值,異常值,錯誤值等,今天先介紹一下如何處理缺失值,才能更好的數據分析,更準確高效的建模。
一 查看數據集的缺失情況
R中使用NA代表缺失值,用is.na識別缺失值,返回值為TRUE或FALSE。由于邏輯值TRUE和FALSE分別等價于數值1和0,可用sum()和mean()來獲取數據集的缺失情況。
載入R包及內置數據集
library(VIM)#VIM包的sleep數據集示例data(sleep,package="VIM")
1)查看數據集整體有多少缺失值及百分比
sum(is.na(sleep))mean(is.na(sleep))
2)查看數據集特定變量(列)有多少缺失值及百分比
sum(is.na(sleep$Sleep))mean(is.na(sleep$Sleep))
3)數據集中多個行包含缺失值
mean(!complete.cases(sleep))
4)列出沒有缺失值的行
sleep[complete.cases(sleep),] #利用函數
list <-which(rowSums(is.na(sleep)) > 0) ; sleep[-list,] # 效果同上
5)列出有一個或多個缺失值的行
sleep[!complete.cases(sleep),]list <-which(rowSums(is.na(sleep)) > 0) ; sleep[list,]
二 探索缺失值
2.1 mice包展示數據整體的缺失情況
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’代表完好數據,’0’代表缺失值。左側第一列,’42’代表有42條數據無缺失值,第一個’9’代表9條數據Dream和NonD同時缺失。最后一行返回的就是每一個變量(列)對應的缺失數目,38為一共有多少缺失值。下圖同樣的意思。
2.2 VIM包展示數據缺失情況
1)展示sleep數據集的整體缺失情況
library("VIM")aggr(sleep,prop=FALSE,numbers=TRUE)
2)展示sleep數據集感興趣的變量的缺失情況
marginplot(sleep[c("Sleep","Dream")],pch=c(20),col=c("darkgray","red","blue"))
三 處理缺失值
當充分了解了缺失值的情況后,可以根據數據量的大小,以及某一列是否為重要的預測作用變量,對數據集中的NA行和某些NA列進行處理。
3.1 刪除缺失值
1)刪除數據集中所有含有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)根據某些列的NA,移除相應的行
sleep[complete.cases(sleep[,c(1,3)]),]
4)表示將向量x中所以NA元素用某個值來代替
sleep[is.na(sleep)] <- 999
3.2 填充缺失值
當數據量不是很大或者變量比較重要時候,可以考慮對缺失值進行填充。
1)常見數值填補
library(Hmisc)data(sleep)#均值填充,適用于接近正態分布impute(sleep$NonD , mean) #中位數填充,偏態數據但是不是很嚴重impute(sleep$Dream , median)# 填充特定值impute(sleep$Span, 0)
2)DMwR包進行kNN最近鄰插補
library(DMwR)data(sleep)data <- sleep # 備份數據,對比填充結果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
# 最近鄰填補缺失值
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
# 將插補值與實際值進行對照
actuals <-data$BrainWgt[is.na(sleep$BrainWgt)]
predicteds <- knnOutput[is.na(sleep$BrainWgt),"BrainWgt"]
# 兩樣本均值檢驗并計算其相似度
t.test(actuals, predicteds) # 接受差值為0的假設cor(actuals, predicteds) # 相關系數
當然根據數據和目的的不同,采用的缺失值處理方式肯定不一樣,需要我們對數據和需求有足夠的認識,做出比較好的判斷和處理。
以上就是如何進行大數據中R語言的缺失值處理,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。