在上一篇小文中,提到了关于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语言中正定矩阵由于误差不正定_Kalman滤波在MOT中的应用(一)——理论篇

    前言 Kalman滤波器是多目标跟踪任务中一个经典的运动模型,接下来会从理论.发展和代码实践三个方面对其进行展开,本次主要以理论基础为主. 在这篇之前还有一个关于多目标背景任务的介绍,不过被知乎删了, ...

  2. r语言中正定矩阵由于误差不正定_浅谈「正定矩阵」和「半正定矩阵」

    在众多的机器学习模型中,线性代数的身影无处不在,当然,我们也会时常碰到线性代数中的正定矩阵和半正定矩阵.例如,多元正态分布的协方差矩阵要求是半正定的. --------------×--------- ...

  3. r语言中正定矩阵由于误差不正定_矩阵的几种分解方式

    A = LU 这实际上就是我们解矩阵方程组一般使用的方式,比如方程组是: 我们一般把它写成增广矩阵: 然后化简成阶梯型矩阵的形式,这个时候可以方便的算出 ,然后再往上代回,逐渐得到所有的x. 如果我们 ...

  4. r语言中正定矩阵由于误差不正定_Rcall:Stata 与 R 的无缝对接

    NEW!连享会·推文专辑: Stata资源 | 数据处理 | Stata绘图 | Stata程序 结果输出 | 回归分析 | 时间序列 | 面板数据 | 离散数据 交乘调节 | DID | RDD   ...

  5. r语言中判断属于回纹元素_R语言中的回归诊断-- car包

    如何判断我们的线性回归模型是正确的? 1.回归诊断的基本方法 opar fit par(mfrow = c(2, 2)) plot(fit) par(opar) 为理解这些图形,我们来回顾一下OLS回 ...

  6. c语言中存贮班级学生的变量,C语言----变量教案.docx

    C语言----变量教案 课 题 2.2 常量和变量----变量 课型 理实一体化 授课班级 高二计算机(升学班) 课时 2 教学目标 复习巩固C语言中常量的应用: 掌握C语言中变量的命名规则及应用. ...

  7. r语言中删除向量的某些元素_R中的向量

    r语言中删除向量的某些元素 Vectors in R are the fundamental data types. This is because the R compiler treats all ...

  8. r语言中对向量求条件语句_R中的条件语句

    r语言中对向量求条件语句 To advance with programming, we need to be able to control the flow of the program exec ...

  9. c语言中合法的字符型常量是,C语言习题库(带答案)-排版.doc

    一.选择题 1.以下不能定义为用户标识符的是( ). (A) MAIN (B) _HJ (C) 2ong (D) LINE1 2.以下不能定义为用户标识符的是( ) (A) If (B) H_J (C ...

最新文章

  1. vscode多个光标_21 个VSCode 快捷键,让代码更快,更有趣
  2. 修改GIT的user.name和user.email
  3. maven(3)maven3.3.9使用入门
  4. html5标签的兼容性处理
  5. html注册跳转php错误500,页面跳转后提示HTTP 异常 500(Internal Server Error):服务器尝试执行请求时遇到了意外情况...
  6. 解决 No projects are available for deployment to this server!
  7. css html 字竖,CSS实现文字竖排 DIV CSS文字垂直竖列排版显示如何实现?
  8. 普元EOS中如何往Session的UserObject中设置自定义属性
  9. 520表白网页代码html 爱心网页制作
  10. goole服务框架Android ID,GSF ID KEY(谷歌服務框架ID)作爲Android設備唯一標識符
  11. android mp4转mp3格式转换,实现快速将MP4转MP3格式的完美攻略
  12. Leetcode力扣 MySQL数据库 1194 竞标赛优胜者
  13. 一张图学《计算机组成原理(硬件篇)》 思维导图 计算机组成
  14. [声纹识别]基于MFCC的声纹识别算法
  15. Android获取WiFi名称/路由器AP地址总结
  16. 【转载】如何从win8/8.1中文版(核心版)升级到win8/8.1专业版
  17. 消费者人群画像 python_一步一步教你分析消费者大数据
  18. GNU C++ 智能指针6-- 解析_Sp_counted_inplace类
  19. 连载《国培计划》骨干教师的研修日志之八:米新江教授讲座有感
  20. 如何高效的使用mac

热门文章

  1. Google App Engine Java功能和命名空间API
  2. shu函数php,【函数分享】每日PHP函数分享(2021-3-3)
  3. mysql 表丢失_Mysql数据库备份 部分数据表丢失 Mysql table doesn't exist 解决
  4. 通用数据保护条例_欧盟《通用数据保护条例》——2019年的形势
  5. HH SaaS电商系统的采购功能模块设计
  6. HH SaaS电商系统的销售订单毛利润模块设计
  7. JSP的隐含对象/隐藏对象/内置对象介绍
  8. angular ngoninit 刷新html页面_web前端入门到实战:实现html页面自动刷新
  9. 计算机无法维修技术鉴定,计算机维修工技能鉴定(初级)剖析..pdf
  10. microsoftexchange邮箱容量怎样看_企业邮箱申请注册的要求有哪些?_网站建设_创客网络...