汽车燃料效率分析实例

#汽车燃料效率数据来源
#'http://www.fueleconomy.gov/feg/epadata/vehicles.csv.zip'

vehicles<-read.csv('C:\\Users\\Administrator\\desktop\\R\\vehicles.csv',stringsAsFactors = F,header = T)#导入数据

在RStudio中查看导入的数据(这只是一部分)

nrow(vehicles)#查看数据有多少行

[1] 39958

ncol(vehicles)#查看数据有多少列(变量)
[1] 84

names(vehicles)#查看每一列的名称
 [1] "barrels08"       "barrelsA08"     
 [3] "charge120"       "charge240"      

 [5] "city08"          "city08U"  

......

[79] "modifiedOn"      "startStop"      
[81] "phevCity"        "phevHwy"        

[83] "phevComb"        "trany2"   

扫描二维码关注公众号,回复: 2181808 查看本文章

#可以在'http://www.fueleconomy.gov/feg/ws/index.shtml#vehicle'中查看这些变量的更精准的含义
length(unique(vehicles[,'year']))#查看数据集中包含多少年的数据

[1] 36

length(unique(vehicles$year))#同上

[1] 36


first_year<-min(vehicles[,'year'])
last_year<-max(vehicles[,'year'])

first_year

[1] 1984

last_year
[1] 2019
table(vehicles$fuelType1)#查看燃料类型
           Diesel       Electricity 
             1131               165 
Midgrade Gasoline       Natural Gas 
               96                60 
 Premium Gasoline  Regular Gasoline 

            11235             27271 

vehicles$trany[vehicles$trany=='']<-NA
#将传动方式中的缺失值用NA填补
vehicles$trany2<-ifelse(substr(vehicles$trany,1,4)=='Auto','Auto','Manual')
#使用substr()函数提取trany值得前四个字符用于分类并生成一个新的变量trany2
[1] "Manual" "Manual" "Manual" "Auto"  
   [5] "Manual" "Auto"   "Manual" "Auto"  

   [9] "Manual" "Auto"   "Manual" "Auto"  

......

library(plyr)
library(ggplot2)
mpgByYr<-ddply(vehicles,~year,summarise,avgMPG=mean(comb08),avgHghy=mean(highway08),avgCity=mean(city08))
#使用plyr包中的ddply()函数来操作vehicles数据集,按年份整合,然后对每个组计算highway、city和combine的燃油效率,将结果赋值给一个新的数据框:mpgByYr


ggplot(mpgByYr,aes(year,avgMPG))+geom_point()+geom_smooth()+xlab('Year')+ylab('Average MPG')+ggtitle('All Cars')
#绘制avgMPG和Year之间的关系(geom_point()指定通过点的方式绘制图形,geom_smooth()在图中添加一个阴影区域来展示平滑的均值并加上一个置信度为0.95的置信区间)

avgMPG和Year之间的关系

ggplot(mpgByYr,aes(year,avgHghy))+geom_point()+geom_smooth()+xlab('Year')+ylab('Average Highway MPG')+ggtitle('All Cars')
#绘制avgHghy和Year之间的关系

avgHghy和Year之间的关系

ggplot(mpgByYr,aes(year,avgCity))+geom_point()+geom_smooth()+xlab('Year')+ylab('Average City MPG')+ggtitle('All Cars')
#绘制avgCity和Year之间的关系
avgCity和Year之间的关系


基于上述可视化结果,似乎可以得出一个结论:近年来销售的汽车的燃油经济性有了显著的增长。

然而以下的数据显示出近年来混合动力和非燃油汽车的销量在增长:

table(vehicles$fuelType1)

因此上述结论并不准确

接下来我们只看燃油汽车的数据

gasCars<-subset(vehicles,fuelType1 %in% c('Regular Gasoline','Premium Gasoline','Midgrade Gasoline')&fuelType2==''&atvType!='Hybrid')
#使用subset()函数生成一个新的数据框:gasCars。这个数据框只包含纯汽油汽车
mpgByYr_Gas<-ddply(gasCars,~year,summaries,avgMPG=mean(comb08),avgHghy=mean(highway08),avgCity=mean(city08))
#按年份整合纯汽油汽车的数据
ggplot(mpgByYr_Gas,aes(year,avgMPG))+geom_point()+geom_smooth()+xlab('Year')+ylab('Average MPG')+ggtitle('Gasoline Cars')
#绘制出纯汽油汽车MPG与year之间的关系
纯汽油汽车MPG与year的关系


ggplot(mpgByYr_Gas,aes(year,avgHghy))+geom_point()+geom_smooth()+xlab('Year')+ylab('Average Highway MPG')+ggtitle('Gasoline Cars')
纯汽油汽车avgHghy与year的关系
ggplot(mpgByYr_Gas,aes(year,avgCity))+geom_point()+geom_smooth()+xlab('year')+ylab('Average City MPG')+ggtitle('Gasoline Cars')
纯汽油汽车avgCity与year的关系
从上述结果中可以得出较为准确的结论
考察近年来大马力车的产量是否降低,如果是这样,就可以解释前述的这种增长
首先明确大功率的汽车是否汽车燃油效率更低
变量displ表示引擎的排量,单位为升

typeof(gasCars$displ)#查看displ的类型,如果不是数值型则需要进行处理:
#gasCars$displ<-as.numeric(gasCars$displ)
ggplot(gasCars,aes(displ,comb08))+geom_point()+geom_smooth()#绘制排量与燃油效率的散点图与曲线图
排量与燃油效率的散点图与曲线图


从图中可以看到,引擎排量和燃油效率之间为负相关,也就是说排量小的车燃油效率会更高

接下来考察一下近年来是否生产了更多的小排量汽车,这样就可以解释燃油效率最近有大幅的提升这个问题了

avgCarsize<-ddply(gasCars,~year,summarise,avgDispl=mean(displ))
ggplot(avgCarsize,aes(year,avgDispl))+geom_point()+geom_smooth()+xlab('Year')+ylab('Average Engine Displacement(L)')

在图中我们可以看到:平均引擎排量在2007年左右之后有一个显著的下降

为了更好的看到对燃油效率的影响,现在逐年绘制出MPG和排量之间的关系

生成一个新的数据框byYear,包含每年的平均燃油效率和平均引擎排量

byYear<-ddply(gasCars,~year,summarise,avgMPG=mean(comb08),avgDispl=mean(displ))
#分解数据框,将平均燃油效率和平均引擎排量分开,用reshape2包中的melt()函数
byYear2<-melt(byYear,id='year')
#得到的byYear2中的行数为byYear的两倍
levels(byYear2$variable)<-c('Average MPG','Avg engine displacement')#更改变量名称
接下来在一个窗口内绘制两幅图

ggplot(byYear2,aes(year,value))+geom_point()+geom_smooth()+facet_wrap(~variable,ncol=1,scales='free_y')+xlab('Year')+ylab('')

从这个图中可以看到:引擎排量的大小在2008年之前总体是增加的,尤其是2006-2008年间大排量引擎汽车的数量有一个明显的增大

从2009年起,引擎排量的平均大小有了显著的下降,这一现象在一定程度上解释了燃油效率的显著提升

2005年之前,引擎排量一直在增加但是燃油效率基本上没有变化,这说明在这些年间引擎的效率一直在提升

2006-2008年间虽然平均引擎排量有一个显著的提升,但是MPG和前几年差不多,需要对这个问题进行更多的研究


将这一趋势放到小排量引擎上,比较自动挡与手动挡汽车的排量

gasCars4<-subset(gasCars,cylinders=='4')#四缸车型
ggplot(gasCars4,aes(factor(year),comb08))+geom_boxplot()+facet_wrap(~trany2,ncol=1)+theme(axis.text.x=element_text(angle=45))+labs(x='Year',y='MPG')
#ggplot2生成一个箱线图,展示了每一年值的分布情况
从上图中可以得出一个大概的结论:手动挡车型的燃油效率要略高于自动挡车型,但是看起来手动挡车型的数量越来越少


接下来考察每一年份手动挡车型的占比

ggplot(gasCars4,aes(factor(year),fill=factor(trany2)))+geom_bar(position='fill')+labs(x='Year',y='Proportion of cars',fill='Transmission')+theme(axis.text.x=element_text(angle=45))+geom_hline(yintercept=0.5,linetype=2)
从上图中可以明显地看出:近年来手动挡车型的占比有大幅度的下降

另外一个可能影响车辆燃油效率的因素是气缸数量,近年来四缸车型越来越多

接下来研究汽车的生产商和型号是如何随时间改变的

生产商和车型随时间变化如何影响燃油效率

carsMake<-ddply(gasCars,~year,summarise,numberOfMakes=length(unique(make)))
ggplot(carsMake,aes(year,numberOfMakes))+geom_point()+geom_smooth()+labs(x='Year',y='Number of available makes')+ggtitle('Four cylinder cars')

生产四缸车型的厂商数量随Year变化的情况


uniqMakes<-dlply(gasCars4,~year,function(x) unique(x$make))
commonMakes<-Reduce(intersect,uniqMakes)#Reduce()函数是一个高级函数,其输入为intersect()函数,对每一个元素求交集得出结果
[1] "Honda"      "Toyota"     "Volkswagen"
[4] "Chevrolet"  "Mazda"      "Subaru"    
[7] "Jeep"  

以上结果展示的是每一年都会出现的制造商名单


carsCommonMakes4<-subset(gasCars4,make %in% commonMakes)
avgMPG_commonMakes<-ddply(carsCommonMakes4,~year+make,summarise,avgMPG=mean(comb08))
ggplot(avgMPG_commonMakes,aes(year,avgMPG))+geom_line()+facet_wrap(~make,nrow=3)

上述制造商产品的燃油效率变化情况


通过以上的分析,可以初步得出结论:汽车的燃油效率在不断的提升(MPG数值变大),其中不仅新能源车型的占比得到提高,在可能影响到MPG的因素中,排量,气缸数,变速箱类型等都会导致MPG的提升




猜你喜欢

转载自blog.csdn.net/rh_wang/article/details/81021371