数据分析中缺失值处理~R语言

最近接到了一些真实的数据,数据中包含着许多缺失值,如何对缺失值处理,能更好的为我们做数据分析,更高效率的建模,缩小在测试集上预测分析的偏差,当然这个偏差越小我们肯定越高兴的。

数据准备

我用的是一份地理样本数据里面有坐标,各种物质成分(Ca,N,P等)

对于缺失数据的检验,有多个方法。

第一种:

library(VIM)

aggr(env,prop=T,numbers=T)

函数用法,可以在控制台加载完包后help()或者?函数


一看这数据还不算崩溃,但是缺失还是比较严重的,

第二种方法:

用mice包中的md.pattern(data)


怎么解读这个呢,其实最后一行返回的就是缺失数目,98为一共有多少缺失值。

缺失值的处理方法有哪些呢?我主要是做笔记

1、删除缺失值

 其实这种方法只有在自己拥有大量的数据进行模型训练才可以选择删除,比如用na.omit()或者

在建模时设置na.action=na.omit。当然,实际业务在过手的时候,数据量不大的情况下,或者你删除

缺失值后,建立的模型不能很好的解释业务,可以考虑缺失值的重新认定。

2、删除个别变量

 对于有些确实很严重的数据,比如缺失值的数量超过了你在业务上认定的比例,那么可以删除这个变量。但是我最近接到的数据居然是长这样的,就是这个变量对于要建立的模型很重要,在不能

删除这个变量,我们需要考量变量在模型中的地位以及训练和测试的数量上做一抉择。

3、用普通的方法进行插值

 为什么我要说普通的方法呢?使用我稍后举例的方法进行插值,这种方法略显粗糙,我并不否定

这些方法,每一种方法都有其存在的应用场景。

library(Hmisc)

impute(env$Ca,mean)        ####平均值
impute(env$K,median)       ####中位数
impute(env$P,zs)          ####众  数 这里的zs<-MS(env$P)
impute(env$N,"random")      ####随  机

当然在e1071里面也有这函数。还有

众数是需要自己计算的

MS <- function(x){ return(as.numeric(names(table(x))[table(x) == max(table(x))]))}

当然你要直接采用这种方法进行插补数据,

env$Ca<-impute(env$Ca,mean)       ####平均值,适用于接近正态分布
env$K<-impute(env$K,median)       ####中位数,偏态不是很严重
env$P<-impute(env$P,zs)         ####众  数
env$N<-impute(env$N,"random")     ####随  机

这样就将数据生成一个完整的数据集了。分析的事情就可以继续走了。祝好运!

当然不管怎样,这样的数据生成的是否合理?怎么去检验我插补的数据是否客观呢或者近乎合理呢?

此时,我们需要计算插值的精度。我们需要引进DMwR包install.packages("DMwR"),library(DMwR)

提到这个包,里面有manyNAs(data,0.2)这么个函数返回的是找出缺失值大于列数20%的行,这个0.2是可

以调的。

在计算插补效果需要用到DMwR包的regr.eval()函数


4、在DMwR包里有centralImputation()这个函数是利用数据的中心趋势值来填补缺失值。

看下和原始数据的差距,这儿我用的是PerformanceAnalytics包的chart.Correlation()函数


上图是用centralImputation()函数插补后的分布,看一下插补效果



mape值比前面普通方法还大了,看来效果不咋的啊

再看一下源数据


总的来讲,没有影响到相关性,还有大致的分布。

5、K最近邻法

在DMwR包中的knnImputation()函数是基于欧氏距离找到K个与其最近的观测数值,然后对这K个近邻的数据利用距离逆加权得到插补的值,然后替代了源数据中的缺失值。
knnoutput <- knnImputation(env) 

这下显得略有可怕的地方,只是轻微改变了相关系数的值,有的还没有被改变,而且变量的相关性仅仅有细微的差别。


我们看mape值是下降了的,看来插补效果是实在的在提升啊。

6、rpart

使用决策树来预测缺失值,它相对于前面的优点是能够对因子类变量进行插补,centralImputation()函数也是可以的,

不过对于名义型变量它采取的是众数。

使用rpart()函数对于数值型变量(method=anova),因子型变量(method=class)。需要注意method的使用方法


看了下,效果没有K最邻近法好啊。

7、mice

这个主要是利用mice()函数进行建模,利用complete()函数再生成完整的数据



看到代码,mice在建模的时候用的是随机森林。最后计算了下插补效果,不行呐。

然后我把method的参数改成method="norm"(正态分布)


然后我计算了一下插补效果,大不如人意啊,因为我们从源数据的分布看缺失指标并不

成正态分布,所以我能理解。

对mice()换个用法,继续


我看看我的插补效果,此时我比较喜欢lattice包中的densityplot()函数


看了下,对N的预测还不是很好,但趋势预测还是蛮可以的。其他变量的缺失预测分析还是不错。

8、还有的包和方法

大致描述
Hmisc
对多种函数,支持简单插补、多重插补和典型变量插补
longitudinalData
对时间序列缺失值进行插补的一系列函数
pan
多元面板数据或着聚类的多重插补
kmi
处理生存分析缺失值的Kaplan-Meier的多重插补
cat
在对数线性模型中带有多元类别型变量的多重插补
mvnmle
对多元正态颁数据中缺失值的最大似然估计
。。。。。。


这是目前本人接触过的,部分我已经用过的,再继续补充。
9、回到问题的本身

对缺失值处理,不同的数据源和不同的业务要求,采用的方法肯定是不一样的,当然需要我们在对缺失值处理的过程中保持客观的判断,加油。


  • 59
    点赞
  • 353
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
《数据仓库与数据挖掘》课程论文 基于Wine数据集的数据分析报告 专业:计算机科学与技术 二〇一五年五月二十五日 基于wine数据集的数据分析报告 摘 要:数据挖掘一般是指从大量的数据自动搜索隐藏于其的有着特殊关系性的信息的 过程。在大数据时代,如何从海量数据挖掘有用信息成为了信息产业的热门话题。作 为数据挖掘课程内容的回顾与应用,本文对wine数据集进行了数据探索性分析,并将数 据挖掘的决策树、支持向量机、聚类等常用方法应用于具体的数据挖掘任务,并取得了 较好的效果。 关 键 词:wine数据集、决策树、支持向量机、聚类 引言 数据挖掘(Data mining),又译为资料探勘、数据挖掘、数据采矿。数据挖掘一般是指从大量的数据 自动搜索隐藏于其的有着特殊关系性(属于Association rule learning)的信息的过程。数据挖掘通常与计算机科学有关,并通过统计、在线分析处 理、情报检索、机器学习、专家系统和模式识别等诸多方法来实现上述目标。在大数据 时代,如何从海量数据挖掘有用信息成为了信息产业的热门话题。本文作为数据挖掘 课程内容的回顾与应用,将数据挖掘的理论与方法运用于具体的数据挖掘任务,并取 得较好的效果。 本次实验选择的数据集为wine数据集。本文首先对其进行了数据探索性分析,包括: 数据概括、变量分布、离群点、缺失值、相关性等,并运用了适当的图形进行描述,然 后在探索性分析的基础上,采用了决策树、支持向量机、聚类等方法进行了分类预测, 并比较了不同方法的分类效果。 数据探索性分析 1 数据概况 本次实验选用的数据集为UCI的Wine Quality数据集white wine的4898条数据,每条数据有12种属性,分别为:fixed acidity, volatile acidity, citric acid, residual sugar, chlorides, free sulfur dioxide, total sulfur dioxide, density, pH, sulphates, alcohol, quality. 其,quality为输出,以0到10之间的数字来表示酒的品质。 实验使用RStudio软件将数据集读入,并使用summary命令概括数据集概况。如图一所 示,summary概括了数据集各个变量的平均值、位数、最大值、最小值等信息。 图1 数据概括 2 变量分布 使用hist()绘制各变量的直方图。如图二所示,直方图直观的展示了变量的分布情况 。 图2 变量直方图 直方图只能对变量进行直观的描述,而变量是否满足正态分布则需要正态性验证。使 用shapiro test对各变量进行正态验证,通过查看结果的p- value值就可以得到变量是否符合正态分布。如果p- value值大于0.05即符合正态分布,而对所有变量进行shapiro test得到p- value均不大于0.05,所以wine数据集各特征均不是正态分布。 3 离群点分析 箱形图(Box- plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计 图。主要包含六个数据节点,将一组数据从大到小排列,分别计算出他的上边缘,上四 分位数Q3,位数,下四分位数Q1,下边缘,还有一个异常值。箱形图的异常值就可以 可视化的展示数据集的离群点。图3展示了各变量的离群点分布情况,可以看出离群点 较多,可能对预测产生影响。 图3 变量箱形图 4 缺失值分析 Wine数据集不含有缺失值。 5 相关性分析 数据集各变量间的相关性关系可由cor()函数计算出的协方差矩阵来表示,如表4所 示。 表1 协方差矩阵表 "ROW "1 "2 " " "正确率 "MAE "正确率 "MAE " "决策树 "0.83 "0.2 "0.57 "0.51 " "支持向量 "0.61 "0.44 "0.57 "0.48 " "机 " " " " " 通过表二可以看出,两种模型的分类精度都比较低。再回顾数据探索性分析关于离 群点部分的内容可知,数据集含有大量离群点。而决策树与支持向量机属于对离群点 非常敏感的模型,这可能就是分类精度较低的原因。所以需要选用一种能够克服离群点 影响的模型来对wine数据集进行预测,因此我们选用了class包的1- 近邻模型来进行分类预测,结果如表3所示,可以看出分类效果有提高。 表3 直接分类预测结果 "模型 "训练集 "测试集 " " "正确率 "MAE "正确率 "MAE " "决策树 "0.83 "0.2 "0.57 "0.51 " "支持向量 "0.61 "0.44 "0.57 "0.48 " "机 " " " " " "1-近邻 "  "  "0.61 "0.45

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值