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>

【数据小盐罐儿】一个无聊的数据分析公众号,不过时常会有一些脑洞的实例分析。

让我们一起学习,打通各种技能!


分享到:


相關文章: