R 數據的預處理:數據中缺失值(NA)的處理

訓練一個機器學習模型,其實大量的時間是花在數據的預處理和探索性數據分析上。尤其是實際中遇到的data都不會太乾淨,所以花較長的時間來做數據的預處理是很有必要的。

首先來建立一個簡單的數據集

<code>library(mice)name = c(“Andy”,“Helly”,“Ann”,“Ketay”,“Wang”,“Liu”)country = c(“UK”,“US”,“US”,“US”,“CH”,“CH”)gender = c(“male”,“female”,NA,“female”,“male”,NA)age = c(22,19,26,31,45,32)income = c(12,NA,55,77,32,NA)data = data.frame(name,country,gender,age,income)data# name country gender age income# 1 Andy UK male 22 12# 2 Helly US female 19 NA# 3 Ann US  26 55# 4 Ketay US female 31 77# 5 Wang CH male 45 32# 6 Liu CH  32 NA/<code>
查找NA
  • 存在NA的rows
<code>complete.cases(data)#當一筆數據是完整的,回傳TRUE;當一筆數據有遺漏值,回傳FALSE#[1] TRUE FALSE FALSE TRUE TRUE FALSE/<code>
  • 查找缺失值的位置
<code>which(is.na(data))#返回缺失值的位置/<code>
  • 計算數據集中有缺失的數據筆數所佔比例
<code>loss = sum(is.na(data))#計算數據集中的缺失值總數have = sum(complete.cases(data))#統計數據集中完整樣本的個數ratio = loss/(loss+have)#計算缺失值數據的比重/<code>


填補NA
  1. na.omit()可以刪除所有含有缺失數據的row
<code>data1 = na.omit(data)data1# name country gender age income# 1 Andy UK male 22 12# 4 Ketay US female 31 77# 5 Wang CH male 45 32/<code>
  1. 最高頻率來填補缺失值.嘗試找到這些缺失值最可能的值。

對於變數分佈近似正態分佈時可以選用平均值;偏態分佈一般採用中位數代表數據中心趨勢的指標。

<code># mean_income = mean(data$income)data2 = data#一些函式計算時擁有na.rm=TRUE,可以在計算以前移除缺失值並使用剩餘值進行計算data2[is.na(data2$income),“income”] = mean(data2$income,na.rm = T)#用平均數補充income的缺失值data2# name country gender age income# 1 Andy UK male 22 12# 2 Helly US female 19 44# 3 Ann US  26 55# 4 Ketay US female 31 77# 5 Wang CH male 45 32# 6 Liu CH  32 44/<code>
  1. 函式centralImputation()可以用數據的中心趨勢值來填補數據集的所有缺失值
<code>data3 = datadata3$income /<code>
  1. 通過變數的相關關係填補缺失值
<code>#函式cor()的功能是產生變數之間的相關值矩陣,參數use =“complete.obs”可以忽略含有NA的記錄cor(data[,c(“age”,“income”)],use =“complete.obs”)# =cor(data[,4:5],use =“complete.obs”)# age income# age 1.00000000 0.07670152# income 0.07670152 1.00000000lm(age~income,data = data)#函式lm()可以用來獲取線性模型#可以使用上述線性關係計算變數的缺失值/<code> 
  1. 用K-Nearest Neighbours填補遺漏值
<code>require(DMwR)imputeData /<code>

【數據小鹽罐兒】一個無聊的數據分析公眾號,不過時常會有一些腦洞的實例分析。

讓我們一起學習,打通各種技能!


分享到:


相關文章: