ScienceCookBook-汽车数据可视化分析(R)总结

1、本次案例概述(案例描述、代码地址)

获取近几年汽车行业总体数据,并对其进行一定整理。重点分析燃油使用率(MPG),发动机类型(cylinder)、传动类型(Trany)、排量(displ)供应商以及其相互之间的关系,来发现近年来汽车生产销售的趋势或规律。

代码展示:

代码下载:https://github.com/HelloMrChen/DataScienceCookbook/tree/master/R-01-carDataVisualization  
  
#install.packages("plyr")  
library(plyr)  
#install.packages("ggplot2")  
#install.packages("reshape2")  
library(ggplot2)  
library(reshape2)  
#cmd+shift+c 注释快捷键  
  
  
#将文件夹拖进终端中即可  
setwd("/Users/gavinchen/我的文档/MBA养成记/2-自我提升/2-数据分析/程序练习/数据科学实战手册/R-01-carDataVisualization")  
vehicles<-read.csv("Data/vehicles.csv") #由于设置了工作目录,直接写下一层目录Data即可  
head(vehicles)  
  
#给csv中的变量贴上标签  
#这里的空格很重要,防止无拆分连续的字符串,这用到了readline、strsplit、docall、rbind   
labels<-do.call(rbind,strsplit(readLines("Data/varlabels.txt")," - "))  
  
  
#------数据准备及查看详情  
summary(vehicles)  
nrow(vehicles)  
ncol(vehicles)  
names(vehicles)  
  
length(unique(vehicles[,"year"]))  
vehicles[,"year"] #取数据框中的某一列  
length(unique(vehicles$year))  
  
min_year=min(vehicles[,"year"])  
max_year=max(vehicles[,"year"])  
  
table(vehicles$fuelType1)  
  
#按条件筛选某列并将汽传动类型的空值赋值为NA  
vehicles$trany[vehicles$trany==""]<-NA    
  
length(vehicles$trany[vehicles$trany==""]<-NA)  
vehicles$trany2<-ifelse(substr(vehicles$trany,1,4)=="Auto","Auto","Manual")  
  
vehicles$trany2<-as.factor(vehicles$trany2) #设置为新变量为因子类型  
table(vehicles$trany2)  
  
with(vehicles,table(sCharger,year))   
  
  
#-----------画图描述相关业务  
  
#一、查看近几年来所有汽车每加仑汽油能行驶的公里数  趋势   
  
#ddply可以将数据集按照制定函数进行计算并且赋给新数据框  
#参数1  数据集,2 分类变量   
mpgByYr<-ddply(vehicles,~year,summarise,avgMPG=mean(comb08),avgHghy=mean(highway08),avgCity=mean(city08))  
#画图发现现在汽车每加仑汽油行驶的燃油数越来越多  
ggplot(mpgByYr,aes(year,avgMPG))+geom_point()+geom_smooth()+xlab("Year")+ylab("Average MPG")+ggtitle("All cars")#geom_smooth的使用  
  
table(vehicles$fuelType1) #查看之后发现有很多非汽油动力在里边,数据有误  
  
#二、筛选出燃油车然后查看MPG趋势   
gasCars<-subset(vehicles,fuelType1 %in%c("Regular Gasoline","Premium Gasoline","midgrade Gasoline")&fuelType2==""&atvType!="Hybrid")  
nrow(gasCars);nrow(vehicles)  
table(gasCars$fuelType1)  #注意table函数应用  
GascarmpgByYr<-ddply(gasCars,~year,summarise,avgMPG=mean(comb08),avgHghy=mean(highway08),avgCity=mean(city08))  
ggplot(GascarmpgByYr,aes(year,avgMPG))+geom_point()+geom_smooth()+xlab("Year")+ylab("Average MPG")+ggtitle("All cars")  
  
#三、查看汽车排量和燃油效率的趋势  
typeof(gasCars$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))+xlab("year")+ylab("avgDispl")+geom_point()+geom_smooth()  
  
#五、查看引擎排量和和MPG之间的关系  
byYear<-ddply(gasCars,~year,summarise,avgMPG=mean(comb08),avgDispl<-mean(displ))  
  
byyear2=melt(byYear,id="year") #melt 函数?  
levels(byyear2$variable)<-c("Average MPG","Avg engine displacement")  
byyear2  
nrow(byyear2)  
  
ggplot(byyear2,aes(year,value))+geom_point()+geom_smooth()+facet_wrap(~variable,ncol = 1,scales = "free_y")+xlab("Year")+ylab("")  
  
#六、根据五中排量comb08与MPG在2006年左右的矛盾关系,查看是否自动挡或者手动挡比四缸发动机更加高效  
gasCars4<-subset(gasCars,cylinders=="4")  
  
ggplot(gasCars4,aes(factor(year),comb08))+geom_boxplot()+facet_wrap(~trany2,ncol = 1)+theme(axis.title.x = element_text(angle = 45))+labs(x="year",y="MPG")  
  
#七、查看每一年手动挡的车占比情况  
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,lintype=2)  
#发现随着随着年份的增多,自动车占比越来越多   
  
#八、查看汽车生产厂商随年份的变化   
carsMakes<-ddply(gasCars,~year,summarise,numberofMakers=length(unique(make)))  
ggplot(carsMakes,aes(year,numberofMakers))+geom_point()+labs(x="Year",y="Number of makers")+ggtitle("Four cylinder Cars")  
  
  
#九、选出每年制造4缸发动机的厂商,并看这些厂商每年制造的汽车燃油效率如何  
uniqueMakes<-dlply(gasCars4,~year,function(x) unique(x$make))  
commonMakes<-Reduce(intersect,uniqueMakes)   
carsCommonMakes4<-subset(gasCars4,make %in% commonMakes)  
  
#这里按照两个变量进行分组统计,所以分为了  
avgMpg_commonMakers<-ddply(carsCommonMakes4,~year+make,summarise,avg_MPG=mean(comb08))  
avgMpg_commonMakers  
ggplot(avgMpg_commonMakers,aes(year,avg_MPG))+geom_line()+facet_wrap(~make,ncol=3)  
#可以看到每个厂商的燃油效率都是提高了的  


2、在本次案例中学到了哪些技术细节(包、语法、作图、模型、算法)

plyr包(ddply) ggplot2包(ggplot),reshape(melt)等

用到的函数主要为为ddply,ggplot,subset,table,factor,strsplit,melt,levels,reduce 

3、相关技术细节有无返回到工具书中系统学习,及学习结果

  • ddply(重要的数据集的计算和重新组合)

案例中用到的语句为:

mpgByYr<-ddply(vehicles,~year,summarise,avgMPG=mean(comb08),avgHghy=mean(highway08),avgCity=mean(city08))

意图将vehicles中的数据按照年份进行重新组合,后边的聚合函数为mean,输出结果为每年相应业务指标的平均值。

本身的函数使用方式为ddply(data,.(var1,var2..),summarise,a=fun(),b=fun())

属于ply包中的一个函数

  • ggplot 散点、线性、箱线图、条形图及其属性设置(geom_smooth()+facet_wrap())

案例中使用的代码:

ggplot(mpgByYr,aes(year,avgMPG))+geom_point()+geom_smooth()+xlab("Year")+ylab("Average MPG")+ggtitle("All cars")

首先ggplot的格式为ggplot(data,aes(x,y))即按照data中x,y的维度去绘制曲线

+geom_point()即为绘制类型为点图 相应的geom_boxplot()为绘制箱线图

+geom_smooth() 绘制出了曲线的置信区间部分

+xlab、ylab以及ggtitle分别设置了坐标轴的xy显示标题以及总标题。同样可以用lab(x="",y="")来替换

facet_wrap()函数是一个ggplot2中设置分页的函数,https://www.cnblogs.com/wkslearner/p/5715095.html

  • table函数

table 函数统计的是数据集中因子对出现的频数,相当于统计学中的列联表。

a<-c(1,2,3,3)
b<-c('a','c','b','b')
c=data.frame(a,b)

table(c)

输出结果为:  

   b
a   a b c
  1 1 0 0
  2 0 0 1
  3 0 2 0

  • subset

subset(gasCars4,make %in% commonMakes)

subset函数可以很轻松的取到集合中的子集,具体的形式为subset(data,条件),功能堪比sql中的select where

  • 类型转换及类型间的实质区别as.numberic as.factor

首先,因子类型可以看做事一种分类数据,它可以记录其中的分类名称以及相应的数量。比如:

c<-factor(c('男','女','男','女'))  class(c) 即为factor类型  level(c)即为"男" "女"

实际使用过程中factor例子 df$class <- factor(df$class,levels = c(2,4),labels = c("benign","malignant")) 可以设置labels

do.call函数 labels<-do.call(rbind,strsplit(readLines("Data/varlabels.txt")," - "))

案例中用到的语句:labels<-do.call(rbind,strsplit(readLines("Data/varlabels.txt")," - "))

  • strsplit 函数

strsplit 即将字符串按照特定要求进行拆分,其命令形式为strsplit(x,split)

R中相关的字符串操作函数总结:https://www.cnblogs.com/awishfullyway/p/6601539.html

  • melt函数

melt函数属于reshape包中的函数,将数据框的数据打散后重新组合。

  • levels函数

文中的使用方法为:levels(byyear2$variable)<-c("Average MPG","Avg engine displacement")

即将某个变量值进行分层级

  • reduce函数

文章中用到的为:commonMakes<-Reduce(intersect,uniqueMakes) 

本身reduce函数是将数组中的数值做相应的二元运算,比如:a=c(12,25,3,8)  Reduce("+",a)  [1] 48

文章中的intersect为求交集的意思,即对uniqueMakes中各个向量求交集。

4、本次案例输出结果展示

ScienceCookBook-汽车数据可视化分析(R)总结_第1张图片ScienceCookBook-汽车数据可视化分析(R)总结_第2张图片

你可能感兴趣的:(数据分析-案例,数据分析-R)