投稿问答最小化  关闭

万维书刊APP下载

三行代码搞定数据处理

2023/1/6 16:39:38  阅读:132 发布者:

如今,对硕士论文的要求逐年提高,增加实证分析的难度成为很多大学的制胜法宝。因此,管理学(工商管理、人力资源管理、技术与经济管理等)要求学生研究具体问题AB的影响,不能简单地写管理创新策略等纯文字论述文章。然后,经济、金融等其他专业一看到这种情况,转身就告诉了学生:“这群玩弄笔杆子的人都写模型了,你们就别在线性回归模型上跳了,都给我加难度!”,所以基本上是一个简单的组合模型和普通回归的扩展(如面板数据)。最强大的还是统计学。统计学导师只说了一句话——看看目前的研究方法在哪里,你再进一步。统计学的同学心里只有“我有一句XXX,不知当讲不当讲”。

为什么那么多硕士论文做实证分析,结果并不理想,而别人的论文用同样的方法,同样的步骤,结果却还不错?

导致你的实证模型和别人不一样的原因(前提是方法一样,原始数据差距不大),除了一些无法更正的因素(例如在后期调整输出结果)之外,他自身的操作也存在问题。这个问题便是数据处理步骤的缺失或不完善。

一个完整的数据分析通常被称为数据分析的六步曲,因为它主要包括六大步骤:分析设计、数据收集、数据处理、数据分析、数据展现、报告撰写。

个人感觉数据处理做不好,得到的结果意义不大。因此,现在让我们谈谈数据质量处理的大致操作。

01

数据清洗

缺失值

处理缺失值有两个选择:缺失值删除和缺失值填补。

缺失值整条删除更为常见。原因很简单:大多数情况下数据量很大,删除缺失值数据对结果影响不大。

但如果数据量较小或者缺失数据条数太多,则需要用到缺失值填补。

缺失值删除

R语言中,用于缺失值的整条删除的方法有两种。一种是令data = na.omit(原始data),

这个是单纯的对原始数据集进行删除缺失值数据的操作。

此外,另一种方法是在建模时增加设置na.action=na.omit,举个例子就是

lm1=lmy~.datana.action=na.omit),

这个是不对原始数据集做修改,但是建模时针对模型调用数据做调整。

缺失值填补

缺失值的填补就比较麻烦了,因为众口难调的原因,这方面的分歧还是比较大的。

普通的方法有均值插值,中位数插值,众数插值以及随机数插值等,这种方法看名字也知道如何操作,所以这里不做过多的解释了。

稍微复杂一点点的方法有回归插补、K近邻插补法等。

回归插补就是对缺失变量和已观测变量建立回归方程,用缺失变量的预测值对缺失值进行插补,比如:

Lm1=lm(y~.,data)

Data$x[which(!complete.cases(data))]=as.vector(predict(lm,newdata=data[!complete.cases(data),]))

K近邻插补就是根据样本观测值之间的相关性,利用欧氏距离寻找与缺失观测最相似的k个样本中的观测,填补缺失值。比如

library(DMwR)

newdata=knnInputation(data,k=10)

new$col=c(imputation,notNA)[complete.cases(data[,1:2])+1]

02

数据转换

R的程序跑多了的人就知道很多程序函数,对输入数据的类型是有要求的。此外,一个浅显的例子,分类问题,两个种类AB,需要转换为01进行逻辑回归等。

数据转换包括转换数据格式、数据分箱、数据标准化等。

数据标准化

数据标准化是最重要的,也是最常用的数据处理方法,他的目的是消除变量之间的量纲(简单来说,就是说数据的单位;有些数据是有量纲的,比如身高,而有些数据是没有量纲的,例如,男女比例。无量纲化,是指去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或者量级的指标能够进行和加权)影响,让不同的变量经过标准化后可以有平等分析和比较的基础。

具体方法函数有scale()对矩阵或数据框按列对数据进行标准化,比如:

scale(data, center = TRUE, scale = TRUE)

此外还有caret包的preProcess()函数方法,比如:

preProcess(data, method = 'range')

转换数据格式

这个就直接上例子了,比如:

as.numeric(data)#转换为数值型

as.matrix(data)#转换为矩阵

as.character(data)#转换为字符型

as.data.frame(data)#转换为数据框

as.factor(data)#转换为因子型

as.logical(data)#转换为逻辑性

数据分箱

举个例子,一个班学生的成绩,按照0-59划分为不及格,60-79为一般,80-100为优秀。这就是分箱。

R语言在可以通过cut()函数实现,比如:

cut(data,10)#指的是将data数据划分10个箱

03

数据抽样

数据抽样一般在选择训练集与测试集时需要用到,比如iris数据集做分类预测,原始数据集的数据是先50个山鸢尾数据,50个变色鸢尾数据,50个维吉尼亚鸢尾数据,我们在划分训练集与预测集时如果不对他进行抽样,那么我们很难得到正确的结果。

随机抽样

随机抽样是数据抽样中比较常用的简单的抽样方法。其代码为:

sample(data,n,replace=T)

其中data是数据集,n为抽多少个数,replace为是否重复抽取,T为是,F为否。

分层抽样

我们获取的数据很少能够达到完美平衡的情况,平衡指的就是两类数据的条数差不多。如果对不平衡数据采取随机抽样,那么我们得到的拟合结果不一定对(误差大)。

iris数据集为例进行分层抽样示例:

Index=sample(x=1:nrow(dataB),size=nrow(dataA),replace = T)

dataB.train=dataB[index,]

train=rbind(dataA,dataB.train)

等比抽样

当面对多分类数据时,我们会采用等比抽样的方法,实现快速得到与原始数据集有比例关系的抽样数据。

R语言中实现这一功能的是caret包中的createDataPartition()函数,形式如下:

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

x是包含了多分类信息的向量,time表示需要进行抽样的次数,p表示需要从数据中抽取的样本比例,list表示结果是否是为list形式,默认为Tgroups表示如果输出变量是数值型数据,则默认按分位数分组进行取样。

04

数据去重

数据去重的应用比较少,也不是数据处理的必要步骤,而且硕士论文的实证分析的数据量本来就不多,一做去重数据量更少了。但是生活中我们用到的数据可能在一个数据表格里出现大量重复的问题,这种情况下如果想把重复的保存为一条,那么就用到了这个。

数据去重常用命令为uniqueduplicated,下面是示例:

unique(data)

或者

duplicated(data)

转自:“云导师学术辅导平台”微信公众号

如有侵权,请联系本站删除!


  • 万维QQ投稿交流群    招募志愿者

    版权所有 Copyright@2009-2015豫ICP证合字09037080号

     纯自助论文投稿平台    E-mail:eshukan@163.com