在上一篇小文中,提到了关于R语言导入数据的一些方法,之后的重点就转向了数据的处理上。数据处理其实在整个数据分析项目中所占用的时间是比较多的,所以根据处理的目的不同,也有不同的处理方法。在R语言中,我通常会将数据处理分成三部分:数据质量处理、数据维度处理和特殊文本的处理。由于三个部分的内容也比较多,就先介绍数据质量处理的内容,其余的两部分会在后面的文章介绍。

一、数据清洗

数据清洗简单说就是处理缺失值和异常值的判断,当然要根据实际情况来定义数据清洗的任务。

1.缺失值处理

当我们面对的数据是比较大量的时候,就需要了解数据集中那些变量有缺失值、缺失的数量、属于那种组合方式等有用信息。此时可以使用mice包中的md.pattern()函数,该函数可生成一个以矩阵或者数据框形式展示缺失值模式的表格,且该函数只需要传入需要判断的数据即可。另外还有使用图形方法这种更直观的方法描述数据的缺失,可利用VIM包中的aggr()函数实现,形式如下:

aggr(x,delimiter = NULL,plot = T,...)

x表示一个向量、矩阵或者数据框,delimiter用于区分插值补量,plot则指明是否画图。

识别出数据中的缺失值,接下来对其处理。最常用的方法是将包含缺失值的记录删去,使用na.omit()函数,但仅限于出现缺失值的记录数量比较少。但含缺失值的记录很多时,就要考虑替换缺失值,一般可用均值、中位数和平均数替换,更专业一点的做法是使用插值法(将缺失数据的变量作为因变量,其他变量作为自变量,建立预测模型)

2.异常值的判断与处理

异常值处理的重点在于识别,处理的手段和缺失值基本一致,所以下面主要介绍识别异常值的一些方法。3σ原则是使用比较多的方法,而R语言qc包中的qcc()函数是专业绘制质量监控图的。初次之外,还可以利用箱线图和聚类分析识别出异常值。


二、数据去重

数据去重并不是处理数据的必要步骤,所以单独拿出来说。在R语言中去重的方法也很简单,对于向量数据可使用unique()函数,而针对矩阵或者数据框这种多维数据时,可使用duplicated()函数。


三、数据转换

数据转换的内容简单地可分为三部分,产生衍生变量、数据分箱和数据标注化。衍生变量就是原有的变量属性构造新的属性,比如变量A和变量B通过相乘得到变量C,另外比较常见的就是哑变量的构成(可以使用caret包dummyVars()函数)。

数据分箱实际上就是按照属性值划分子区间,比如将考试成绩0-59分的归为不及格,60-89的归为中等,90-100的归为优秀。R语言中分cut()函数可以实现数据分箱的目的。

数据标准化主要的目的就是消除变量之间的量纲影响,让不同的变量经过标准化后可以有平等分析和比较的基础。常用的标准化有两种,Min-Max标准化和Z-Score标准化,而caret包中的preProcess()函数能非常灵活地实现数据的标注化。


四、数据抽样

在数据分析或者建立数据模型之前,在面对或多或少的数据时,一般不会直接使用数据,而是采用抽样的方法去选取数据,而根据不同的情况,会有不同的抽样方法。下面介绍四种抽样方法及其在R语言中的实现:

  1. 处理类失衡的抽样方法——SMOTE

类失衡会发生在包含分类变量的数据集,比如在整个数据集中,A类的数据占总体的5%,而B类数据占了95%。具体的理论可参考下面的连接:

SMOTE算法​www.jianshu.com

现在我们的关键在于如何使用R语言去解决类失衡的情况,比如A类数据有4000条记录,B类数据只有200条记录,此时可以使用DMwR包中的SMOTE()函数。

2.随机抽样

R语言中实现随机抽样的函数是sample(),基本形式如下:

sample(x,size,replace=F/T,prob=NULL)

x是数值型向量,size是抽样个数,replace表示是否放回,prob是与x长度一致的向量,且每个元素表示与x对应位置上的元素被抽中的概率。

如上面的命令,在1到5中随机抽取3个元素,且每个元素被抽中的概率为0.1、0.2、0.5、0.4和0.3。

3.等比抽样

当面对多分类数据时,我们会采用等比抽样的方法,实现快速得到与原始数据集有比例关系的抽样数据。R语言中实现这一功能的是caret包中的createDataPartition()函数,形式如下:

createDataPartition(x,time,p,list=F/T,groups = min(5,length(x)))

x是包含了多分类信息的向量,time表示需要进行抽样的次数,p表示需要从数据中抽取的样本比例,list表示结果是否是为list形式,默认为T,groups表示如果输出变量是数值型数据,则默认按分位数分组进行取样。以iris数据集为例,使用str()函数查看iris数据集的构成:

可以知道iris数据集中的Species变量是分类变量,且有3类元素。使用createDataPartition()函数进行抽样。

从结果可以看到三类的数据量是一样的。

4.交叉验证的样本抽取

如果我们在建立模型时只采用一次抽样的数据,这样得到的数据模型随机性和误差性是比较大的,因此使用N折交叉验证的方法可以提高模型结果的可靠性。步骤大概是将数据集的每条记录分配下标1,2,...N个数据,换言之就是将数据集分成了N份,然后,每次提取一份作为测试数据集,剩下的N-1份数据作为训练数据集,然后记录下拟合的N个模型结果和误差,最后计算平均误差来衡量模型的准确性。对K折交叉验证法原理不熟悉的伙伴,可以看以下的连接:

K折交叉验证​blog.csdn.net

R语言中实现K折交叉验证法,主要是使用caret包中的createFolds()和createMultiFolds()两个函数。两者的形式别如下:

createFolds(x,k=10,list = T,returnTrain = F)

x是要依据分类的变量,k指指定的折数,默认是10,list表示返回的结果索引值是否为列表形式,默认为True,returnTrain表示是否返回抽样的真实值,默认Flase。

createMultiFolds(x,k = 10,times = 5)

x和k的参数意义与createFolds()一样,times为指定抽样组数。

两个函数都可是实现K折交叉验证的抽样,具体的使用方法可参照下面的连接:

k折交叉验证(R语言)​www.jianshu.com

r语言 整理、处理数据步骤_R语言之数据处理(一)相关推荐

  1. r语言 整理、处理数据步骤_R语言万能数据清洗整理包Tidyverse(一)

    数据整理和清洗是任何统计分析的前提,也是最为困难的一个环节,很多软件也提供了数据整理和清洗的功能.甚至连我们常用的EXCEL也可以做这个工作,但是效率很低,而且容易出错,且无法完整保存清洗过程.R语言 ...

  2. r语言中进行数据可视化_R中的数据可视化

    r语言中进行数据可视化 R programming was developed in 1993 for making graphs and producing statistical results. ...

  3. R 多变量数据预处理_R语言 数据管理与dplyr、tidyr | 第4讲

    原创: 拴小林 数据驱动实践 6月11日 原文:R语言数据管理与dplyr.tidyr | 第4讲 往期回顾 R语言 | 第一部分:数据预处理 R语言|第2讲:生成数据 R语言常用的数据输入与输出方法 ...

  4. go语言 第三方包安装方法_R语言3.6.3 安装程序下载及破解方法

    下载地址 百度网盘链接: https://pan.baidu.com/s/16smT3ceIjqaupn54AdgmgQ 提取码:7hap 解压密码:关注[菜瓜程序猿]微信公众号,回复[解压密码]获取 ...

  5. c语言字符型数据是,C语言字符型数据.doc

    C语言字符型数据 2.5.1字符常量字符常量是指用一对单引号括起来的一个字符.如'a','9','!'.字符常量中的单引号只起定界作用并不表示字符本身.单引号中的字符不能是单引号(')和反斜杠(\), ...

  6. r语言变量长度不一致怎么办_R语言实现数据离散化方法总结

    前言 在做数据挖掘模型的时候,我们有时会需要把连续型变量转型离散变量,这种转换的过程就是数据离散化,分箱就是离散化常用的一种方法. 数据离散化处理属于数据预处理的一个过程,R语言在数据处理上有天然的优 ...

  7. R 多变量数据预处理_R语言数据可视化之数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)...

    作者:穆晨 来源:https://www.cnblogs.com/muchen/p/5310732.html 阅读目录 数据分布图简介 绘制基本直方图 基于分组的直方图 绘制密度曲线 绘制基本箱线图 ...

  8. r语言 面板数据回归_R语言——伍德里奇计量经济导论案例实践 第十三章 横截面与面板数据(一)...

    哈喽,停更了大概有三周的计量笔记又要重新开始啦!虽然美国的疫情没有停歇的迹象,可是依旧阻挡不了大学开学的热情.从8月3号开始上课到现在,也经历了很多事情,每天都是抱着死猪不怕开水烫的心情,暗地里安慰自 ...

  9. r语言 面板数据回归_R语言_018回归

    回归分析是统计学的核心.它其实是一个广义的概念,指那些用一个或多个预测变量来预测响应变量的方法.通常,回归分析可以用来挑选与响应变量相关的解释变量,可以描述两者的关系,也可以生成一个等式,通过解释变量 ...

最新文章

  1. gearman的持久化,以mysql的方式
  2. JS中try....catch
  3. Vue 学习 之 7.01 学习笔记
  4. R-FCN/Faster-rcnn使用snapshot继续训练
  5. ecies算法c语言实现,Bouncy Castle算法库中ECIES算法调用示例
  6. 如何得出数组里最大_相邻两数的最大差值(超巧妙解法)
  7. 一文搞懂 Promise、Genarator、 Async 三者的区别和联系
  8. 支付宝当面付接口如何计算优惠
  9. wordpress绿色小清新运营笔记博客主题模板
  10. 近期机器学习竞赛汇总~总奖池超千万人民币!
  11. PHP面向对象的魔术方法
  12. oracle linux下数据迁移到不同服务器
  13. 【2019杭电多校第二场1009=HDU6599】I Love Palindrome String(回文树的fail树)
  14. 小米路由的IPv6支持教程(纯转保存)
  15. 探究“补阶乘大法的本质“——糖水不等式
  16. java调用shiny_使用Shiny fileInput仅获取路径
  17. Nginx动静分离配置
  18. MYSQL (关系型数据库管理系统)的基础知识详解
  19. linux如何添加旅游,旅游散记
  20. 上帝视角看高清村庄卫星地图,附下载高清卫星地图最新方法

热门文章

  1. 【面试题】Ajax的原理和优缺点总结
  2. 查看java源码时出现class文件而不是java文件,可能是因为java的安装路径下没有src.zip文件而是javafx-src.zip文件
  3. BCompare日志
  4. pdf去除水印方法!【亲测可用】
  5. 求两数最大公约数,最小公倍数-Java
  6. STM32 之十 供电系统及内部参照电压(VREFINT)使用及改善ADC参考电压
  7. USB 之三 常用抓包/协议分析工具(Bus Hound、USBlyzer、USBTrace、USB Monitor Pro等)
  8. java比较日期字符串大小写_java 字符串操作和日期操作
  9. C语言的编译链接过程详解
  10. C++中,有哪4种与类型转换相关的关键字?各有什么特点?应该在什么场合下使用?