缺失值以及噪声值的判断和处理

1.判断缺失值

函数:is.na()、complete.cases()
complete.cases()可用来识别矩阵或数据框中没有缺失值的行!可呈现出有缺失值的行sleep[!complete.cases(sleep),]
###2.针对复杂的数据集,需要探索数据缺失情况
(1)用列表显示缺失值
mice包中的md.pattern()函数可以生成一个以矩阵或数据框形式展示缺失值模式的表格。

library(mice)   
library(VIM)    #以VIM包中sleep数据集为例
md.pattern(sleep)
   BodyWgt BrainWgt Pred Exp Danger Sleep Span Gest Dream NonD   
42       1        1    1   1      1     1    1    1     1    1  0
 2       1        1    1   1      1     1    0    1     1    1  1
 3       1        1    1   1      1     1    1    0     1    1  1
 9       1        1    1   1      1     1    1    1     0    0  2
 2       1        1    1   1      1     0    1    1     1    0  2
 1       1        1    1   1      1     1    0    0     1    1  2
 2       1        1    1   1      1     0    1    1     0    0  3
 1       1        1    1   1      1     1    0    1     0    0  3
         0        0    0   0      0     4    4    4    12   14 38
备注:
0表示变量的列中没有缺失,1则表示有缺失值。
第一行给出了没有缺失值的数目(共多少行)。
第一列表示各缺失值的模式。
最后一行给出了每个变量的缺失值数目。
最后一列给出了变量的数目(这些变量存在缺失值)。
在这个数据集中,总共有38个数据缺失。

(2)用图形显示缺失值
VIM包中提供大量能可视化数据集中缺失值模式的函数:aggr()、matrixplot()、scattMiss()。

library(VIM)
aggr(sleep,prop=FALSE,numbers=TRUE) 
                      #(prop为FALSE表示计数,TRUE则表示比例)
matrixplot(sleep)     #此函数可生成展示每个实例数据的图形

第一幅图
第二幅图
浅色表示值小,深色表示值大;默认缺失值为红色。

###3.缺失值数据的处理
(1)行删除法:数据集中含有缺失值的行都会被删除,一般假定缺失数据是完全随机产生的,并且缺失值只是很少一部分,对结果不会造成大的影响。意思就是只要有足够的样本量,并且删除缺失值后不会有大的偏差!
行删除的函数有na.omit()和complete.case()

newdata1<-na.omit(sleep)
sum(is.na(newdata1))                    #计算还有多少缺失值
newdata2<-sleep[complete.cases(sleep),]
sum(is.na(newdata2))                    #计算还有多少缺失值

(2)均值/中位数等填充:这种方法非常简单,如果填充值对结果影响不太大的话,这种方法倒是可以接受,并且有可能会产生令人满意的结果。

newdata<-sleep mean_d<-mean(newdata$Dream,na.rm = T) newdata[is.na(newdata$Dream),"Dream"]<-mean_d 

(3)用函数包来处理

  • Hmisc包可以插补均值、中位数等,也可以插补指定值。
 library(Hmisc)
 impute(newdata$Dream,median) 
 impute(newdata$Dream,5)
  • mice包-预测值来处理缺失值

mice是链式方程多元插值的简写(Multivariate Imputation by Chained Equations)。mice包提供了多种先进的缺失值处理方法。它使用一种不同寻常的方法来进行两步插值:首先利用mice函数建模再用complete函数生成完整数据。mice(df)会返回df的多个完整副本,每个副本都对缺失的数据插补了不同的值。complete()函数则会返回这些数据集中的一个(默认)或多个。
下图展示mice包的操作过程:
这里写图片描述

备注:
mice():从一个含缺失值的数据框开始,返回一个包含多个完整数据集对象(默认可以模拟参数5个完整的数据集)
with():可依次对每个完整数据集应用统计建模
pool():将with()生成的单独结果整合到一起
library(mice) 
newdata<-sleep #操作数据的时候尽量不要对原数据集直接操作 
data<-mice(newdata,m = 5,method='pmm',maxit=100,seed=1)
               #m是默认值5,指插补数据集的数量              
               #插补方法是pmm:预测均值匹配,methods(mice)查看其他方法 
               #maxit指迭代次数,seed指设定种子数(和set.seed同义) 
comp_data<-complete(data) #生成完整数据 
anyNA(comp_data)          #判断是否还有缺失值,没有则结果返回FALSE  

参考雪晴数据网
推荐 Selva Prabhakaran 关于缺失值的处理
###4.噪声值的处理
(1)盖帽法:整行去掉数据框里99%以上和1%以下的点,所用数据集应保证数据没有缺失值。
这里写图片描述

summary(comp_data$Dream) #盖帽法之前,查看数据情况,保证数据无缺失值
hist(comp_data$Dream)
q1<-quantile(comp_data$Dream, 0.01)
q99<-quantile(comp_data$Dream,0.99)
comp_data[comp_data$Dream<q1,]$Dream<-q1
comp_data[comp_data$Dream>q99,]$Dream<-q99
summary(comp_data$Dream) #盖帽法之后,查看数据情况

(2)分箱法:通过考察数据的“近邻”来光滑有序数据的值,有序值分布到一些桶或箱中。

  • 等深分箱:每个分箱中的样本量一致;(较好)
  • 等宽分箱:每个分箱中的取值范围一致。

比如价格排序后数据:4,8,15,21,21,24,25,28,34
划分为( 等深) 箱:

  • 箱1: 4,8,15
  • 箱2: 21,21,24
  • 箱3: 25,28,34

划分为( 等宽)箱:

  • 箱1: 4,8
  • 箱2: 15,21,21,24
  • 箱3: 25,28,34

等深分箱代码:

parts<-4
min_da<-0.00001#极小值
quant<-quantile(comp_data$Dream,probs = seq(0,1,1/parts))     
               #等比分为4段
table(quant)
requant<-mapply(function(x){
  for (i in 1:(parts-1)) {
    if(x>=(quant[i]-min_da)&x<quant[i+1]){
      return(i)
    }
  }
  if(x+min_da>quant[parts]){
    return(parts)
  }
  return(-1)
},comp_data$Dream)
table(requant)
comp_data$Dream1<-paste("L",requant,sep="")             
               #将连续变量转化成定序变量
table(comp_data$Dream1)
comp_data$dream2<-tapply(comp_data$Dream,comp_data$Dream1,mean)[comp_data$Dream1]
               #使用箱均值进行光滑处理
head(comp_data)

等宽分箱代码:

cutt<-cut(comp_data$Dream,4)       #这里以Dream字段等宽分为4段
table(cutt)
levels(cutt)<-paste("L",1:4,sep="")#将连续变量转化成定序变量
comp_data$Dream1<-cutt
table(comp_data$Dream1)
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 查找缺失值数据处理的重要步骤之一, 因为缺失值可能会对机器学习模型造成负面影响, 如降低模型的准确性和稳健性. 如果不清楚缺失值的分布, 可能会导致错误的做法, 例如删除或填充错误的数据. 因此, 查找缺失值数据处理中非常重要的一个步骤. ### 回答2: 数据处理是一个数据分析的关键步骤,而查找缺失值数据处理中的一项重要任务。主要有以下几个原因: 首先,缺失值会导致数据分析结果的不准确性。如果数据中存在缺失值,直接进行分析可能会带来误导性的结果。例如,某个样本的某一特征缺失,若不进行处理,可能会导致对于该特征的统计分析结果出现偏差,无法得到准确的结论。 其次,缺失值会影响数据模型的建立。对于机器学习和统计建模等数据分析任务来说,缺失值的存在会对模型的训练和评估带来困难。模型需要完整的数据集来进行建模和预测,如果存在缺失值,就会影响建模的准确性和预测结果的可靠性。 此外,查找缺失值有助于决定合适的缺失值处理方法。通过查找缺失值,我们能够了解缺失值的出现情况和原因,进而根据具体情况选择合适的处理方法。常见的处理方法包括删除缺失值、补全缺失值和使用专门的缺失值处理算法等。 最后,查找缺失值还可以帮助发现数据收集过程中的问题。在数据收集环节中,缺失值的出现可能意味着数据收集过程存在问题,例如问卷调查中的遗漏,传感器故障等。通过查找缺失值,可以帮助我们发现这些问题,并采取相应措施来提高数据的质量。 综上所述,查找缺失值数据处理中的重要步骤,其目的是为了保证数据分析结果的准确性和可靠性,以及决定合适的缺失值处理方法,并帮助发现数据收集过程中的问题。 ### 回答3: 数据处理数据挖掘过程中的重要步骤,用于处理原始数据集中的噪声、异常缺失值等问题,以提高数据质量和模型的准确性。在数据处理过程中,查找缺失值是必要且重要的步骤。 首先,查找缺失值可以帮助我们了解数据集的完整性。缺失值是指数据集中某些属性或变量的为空白或未记录,如果不进行查找,可能会因为数据缺失而导致后续数据挖掘分析的偏差。通过查找缺失值,我们可以确定数据集的完整性,从而对数据集进行合理的操作。 其次,查找缺失值使我们能够评估数据集的质量。数据集中的缺失值可能会对后续分析产生影响,降低模型的准确性和可靠性。通过查找缺失值,我们可以了解到缺失值的分布情况,进而评估数据集的质量,判断数据缺失的原因并采取相应的处理措施,例如对缺失值进行填补或删除。 此外,查找缺失值还可以帮助我们选择合适的缺失值处理方法。不同的缺失值处理方法适用于不同的情况,通过查找缺失值,我们可以了解到数据集中缺失值的类型和缺失的模式,进而选择合适的缺失值处理方法,如均插补、回归插补或使用插算法等。 综上所述,数据处理中的查找缺失值是必要的,它可以帮助我们了解数据集的完整性和质量,评估缺失值处理的效果,并选择合适的缺失值处理方法,从而提高数据的可靠性和分析结果的准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值