R语言数据清洗与规整-回归模型为例

时间:2024-05-23 08:28:28
数据清洗和规整是进行数据分析的前提条件,数据的清洗和规整通常会花费比进行数据分析更多的时间,正所谓“清洗一小时,分析五秒钟”。

数据清洗和规整要依据实际数据的特征进行,其包括缺失值和冗余值的处理、数据重归类、字符类型转换等。这里将使用“狗熊会”的基础案例 “高考填报志愿,你选好了吗?”的数据进行介绍。该案例用于预测高校录取分数线的相关影响因素,因变量为x2015年平均线。

数据下载链接:http://mp.weixin.qq.com/s/8jkUfoK2_-VGntfVWjnp1A

 一、数据读入与结构分析

将下载的数据转为文本格式并保存到目标文件夹下,然后读入数据,查看数据格式与内容。

>colleges<-read.csv("colleges.csv",stringsAsFactors=FALSE)  #禁止将所有字符转换为因子,以方便后续清洗和规整

>str(colleges) #查看数据结构与内容

R语言数据清洗与规整-回归模型为例

由上可知,该数据包含1169条记录和13个变量,其中因变量 x2015年平均线 为字符型,需要转换为数值型:

>colleges$X2015年平均线<-as.numeric(colleges$X2015年平均线)

接下来,分别查看各字段,以确定是否需要进行清洗和规整。经分析,发现 所在地、隶属 字段中的字符不规范,要进行规整。

二、数据清洗与规整

1.所在地 数据清洗与规整

所在地 中存在冗余数据,要将多余的“市”删除

R语言数据清洗与规整-回归模型为例

colleges$所在地<-gsub("市","",colleges$所在地) #将 所在地 中存在“市”替换成空(“”)

同时,由于 所在地 中的城市过多,且大部分城市出现频次很小,在进行分析的时候会造成因子数量过多,因此对这些城市按行政级别将城市进行归类,副省级及以上城市归为“特大城市”,省会城市及苏州、珠海划分为“大城市”,其余归为“中等城市”。
>lcity<-c("北京","上海","天津","重庆","广州","深圳","南京","武汉","沈阳","西安","成都","济南","杭州","哈尔滨","长春","大连","青岛","厦门","宁波")

>bcity<-c("石家庄","郑州","太原","合肥","长沙","南昌","福州","海口","南宁","贵阳","昆明","西宁","兰州","银川","乌鲁木齐","呼和浩特","拉萨","苏州","珠海")

>szd<-colleges$所在地 #将所在地 赋予szd

>for(i in 1:1169) #一共1169条记录,故要循环1169次

{
>ifelse(szd[i]%in%lcity,szd[i]<-"特大城市",ifelse(szd[i]%in%bcity,szd[i]<-"大城市",szd[i]<-"中等城市"))

} #如果第i条记录(城市)包含在lcity中,则将该条记录替换为“特大城市”,包含在bcity中,则替换为“大城市”,都不包含在上述两个向量中,则替换为“中等城市”

>colleges$所在地<-szd #将所在地 中的值用szd替代

2.隶属 数据清洗与规整

隶属 数据中包含了所在地与机构,而上述所在地已经可以体现出所在地的影响,因而我们要对冗余数据进行清理,仅突出隶属级别上的差异。如福建省教育厅与甘肃省教育厅同属于“教育厅”,无需凸显其所在地。

R语言数据清洗与规整-回归模型为例

>ls<-colleges$隶属

>for(i in 1:1169)

{
>ifelse(substr(ls[i],nchar(ls[i])-2,nchar(ls[i]))=="教育厅",ls[i]<-"教育厅",ls[i])

} #截取ls中第i个记录,由倒数第三个(nchar(ls[i])-2)开始截取字符,若截取下的字符为“教育厅”,则将该记录替换成“教育厅”,否则不变。

此外,还需将北京、上海、天津、重庆等直辖市教育委员会与教育厅同级,也需修改为教育厅。

>for(i in 1:1169)

{
> ifelse(substr(ls[i],1,2)=="北京",ls[i]<-"教育厅",ls[i])

} #从=截取ls中第i个记录的前两个,若为北京,则替换为教育厅,上海、天津、重庆也是如此

还有一些个别的为省份的,如广东、河北省的记录也替换为教育厅。

3.将数据类型转换为因子

>colleges<-colleges[,-1] #大学名称 相对于id,故去除该字段

地址 字段无用也剔除,将所在地、隶属、类型等转换为因子

>colleges[1:2]<-lapply(colleges[1:2],factor) #同时将处于1,2两个位置的所在地和隶属转换为因子

查看数据结构,可见此时个字段的因子数量要比为处理前少许多

R语言数据清洗与规整-回归模型为例

三、建立回归模型

1.查看缺失值

通过查看各自的数据,发现仅 x2015年平均线 中存在缺失值,且缺失值超过60%(736/1169)

R语言数据清洗与规整-回归模型为例

因变量缺失的记录数要远多于因变量无缺失数,此时对缺失的因变量进行插补将影响到整体数据的真实性,故直接删除因变量缺失的记录

>colleges1<-colleges [!is.na(colleges$X2015年平均线),] #删除平均线缺失的记录

>ts<-lm(colleges1$X2015年平均线~.,data = colleges1) #以x2015年平均线为因变量,其余全部字段(.)为变量建立回归模型

>summary(ts) #查看回归模型

R语言数据清洗与规整-回归模型为例残差

R语言数据清洗与规整-回归模型为例R