汽车数据的可视化分析(R)

摘要:
数据下载:http://www.fueleconomy.gov/feg/epadata/vehicles.csv.zip将数据导入R,1.首先将工作路径设置为车辆所在的路径。csv保存在本地:setwd(“path”)2.我们可以直接从zip文件加载数据,只要您知道zip中的压缩文件名:vehicles&lt-read.csv(unz(“vehicles.csv.zip”,“veh

数据下载:http://www.fueleconomy.gov/feg/epadata/vehicles.csv.zip

将数据导入R中,

1.首先将工作路径设定到本地保存了vehicles.csv的路径下:

setwd("path")

2.我们可以直接从zip文件中载入数据,只要你知道zip中压缩的文件名:

vehicles<-read.csv(unz("vehicles.csv.zip","vehicles.csv"),stringsAsFactors = F)

这里用到了参数stringAsFactors=F.R默认会将字符串转为因子。因子是R中定性变量的称呼,可以被认为对数据的标注或者标签。在R的内部,因子是存为整数的,每个整数映射到因子的一个水平。这项技术可以使得老版本R的存储成本降低。

一般而言定性变量是没有顺序的。然而也存在有顺序的分类变量,在统计学中也被称为序数。序数也是一种分类变量

3.为了检查数据是否已经载入,我们可以在R中展现头几行,使用如下代码:

head(vehicles)

4.查看数据有多少行

nrow(vehicles)

5.查看有多少个变量(列)

ncol(vehicles)

6.查看各列的含义,用name()函数

names(vehicles)

7.我们可以看到数据集中包含几年的数据,只需要计算year这一列的不同取值的向量,然后计算这个向量的长度即可

length(unique(vehicles[,"year"]))

8.使用max和min函数

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

9.找出燃料类型有哪些

table(vehicles$fuelType1)

10.探索一下这些汽车使用的传动方式,首先把缺失值用NA填补

vehicles$trany[vehicles$trany==""]<-NA

11.现在trany这一列是文本,我们仅仅关注车辆的传动方式是自动还是手动。因此我们使用substr函数提取trany的值的前四个字符,然后确定这个是自动还是手动。我们生成一个新的变量:trany2

vehicles$trany2<-ifelse(substr(vehicles$trany,1,4)=="Auto","Auto","Manual")

10.我们将这个新变量变成因子,然后使用table函数来看不同类型传动方式的记录各有多少

vehicles$trany<-as.factor(vehicles$trany)
table(vehicles$trany2)

学习了如何快速浏览R中的数据。最明显的是,使用table函数来观察fuelType1这个变量不同取值所对应的记录数。这个函数其实还有很多其他用途,比如计算交叉列联表等

with(vehicles,table(sCharger,year))

这里使用了with命令。这个命令告诉R使用vehicles数据集作为接下来命令的默认数据集。在这个例子中,接下来将用table函数。因此,我们可以直接用变量sCharger和year,而不必再使用美元符号和数据框名称组合来引用了。

我们可以使用class查看变量的类型:

class(vehicles$sCharger)

进一步分析汽车燃料效率数据

接下来用plyr和ggplot2来探索数据集

1.首先,我们看看平均MPG是否随着时间有一个趋势上的变化。为此,我们使用plyr包的ddply函数来操作vehicles数据集,按年份整合,然后对每个组计算highway、city和combine的燃油效率。这个结果将赋值给一个新的数据框:mpgByYr

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

2.为了对新的数据框得到一个更好的理解,我们将它传入ggplot函数中,用散点图绘制avgMPG和year之间的关系。此外,我们还会标明我们需要的坐标轴的命名、图的标题,一级加上一个平滑的条件均值,geom_smooth()在图片上增加一个阴影的区域。

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

3.我们只看燃油车,虽然非燃油车数量并不多。为了做到这个,我们使用subset函数来生成一个新的数据框:gasCars.这个数据框只包含fuelType1的取值为如下取值的记录。

gasCars<-subset(vehicles,fuelType1 %in% c("Regular Gasoline","Premium Gasoline","Midgrade Gasoline")&fuelType2==""&atvType!="Hybrid")
mpgByYr_Gas<-ddply(gasCars,~year,summarise,avgMPG=mean(comb08))
 ggplot(mpgByYr_Gas,aes(year,avgMPG))+geom_point()+geom_smooth()+xlab("Year")+ylab("Average MPG")+ggtitle("Gasoline cars")

4.我们注意变量displ,表示引擎的排量,单位为升。现在他还是字符串类型,我们需要把他变为数值型

typeof(gasCars$displ)
gasCars$displ<-as.numeric(gasCars$displ)
ggplot(gasCars,aes(displ,comb08))+geom_point()+geom_smooth()

5.现在,让我们看看是否近年生产了更多的小车,这样就可以解释燃油效率最近有大幅的提升了

avgCarSize<-ddply(gasCars,~year,summarise,avgDispl=mean(displ))
ggplot(avgCarSize,aes(year,avgDispl))+geom_point()+geom_smooth()+xlab("Year")+ylab("Average engine displacemment(1)")

6.为了更好地看到这可能会影响到燃油效率地提升,我们逐年绘制出MPG和排量之间地关系。我们使用ddply函数,生成一个新的数据框byYear,包含每年地平均燃油效率和平均引擎排量。

byYear<-ddply(gasCars,~year,summarise,avgMPG=mean(comb08),avgDispl=mean(displ))
head(byYear)

7.head函数展示了生成的新的数据框,这个数据框包含3个列:year、avgMPG以及avgDispl。我们呢将要使用ggplot2包中分面的功能,在同一张图但是不同的面上来逐年显示平均油耗以及平均排量之间的关系。我们必须分解这个数据框,把一个宽的数据框变成一个长的数据框。

byYear2=melt(byYear,id="year")
levels(byYear2$variable)<-c("Average MPG","Avg engine displacement")

8.来看看是否自动挡或者手动挡传动比四缸发动的油耗更加高效,以及油耗是如恶化随时变化的

gasCars4<-subset(gasCars,cylinders=="4")
ggplot(gasCars4,aes(factor(year),comb08))+geom_boxplot()+facet_wrap(~tranny2,ncol=1)+theme(axis.text.x=element_text(angle = 45))+labs(x="Year",y="MPG")

这次ggplot生成了一个箱线图。这个图帮助展示了每一年值得分布情况(而不只展示像均值这样得单一数值)

研究汽车产量以及车型

1.让我们看看生产商和车型随时间得变化如何燃油得效率。首先,我们看看美国这些年不同的车型和生产商出现的频次,然后将注意力放在四缸发动的车上。

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

2.我们可以看看每一年的生产商

uniqMakes<-dlply(gasCars4,~year,function(x)unique(x$make))
commonMakes<-Reduce(intersect,uniqMakes)
commonMakes

3.这些制造商每年生产出来的汽车的燃油效率如何?我们看到大多数制造商的燃油效率在逐年提升,有一些制造商在最近5年在燃油效率上有一个飞速的提升。

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)

我们使用dlply(注意不是ddply)来操作gasCars4数据框,按照年来分割数据集,然后对每一块的make变量应用一个函数。对每一年,计算出独立的制造商列表,然后dlply返回每一年的列表。dlply输入一个数据框返回一个列表,而ddply输入一个数据框返回一个数据框

使用reduce函数来做更高阶的排序。这个Reduce函数和map reduce编程中的reduce过程的想法是一样的,而map reduce是google提出的基于Hadoop的编程模式。从某种角度来讲,R是一个函数式编程语言,其核心包含一些高阶的函数。所谓高阶函数,是指其输入是其他的函数。在这行代码中,我们将intersect函数作为输入赋值给Reduce函数,这个函数将会对数据集uniqMakes的每一个元素求交集,而这个数据集是我们之前已经生成的每一年不同制造商的列表。最终,结果放在一个新的列表中,这个列表展现了每一年都会出现的制造商。

免责声明:文章转载自《汽车数据的可视化分析(R)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Redis在Linux下的安装远程获取--snmp模块(python)/snmp-cmds,easysnmp下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

基于Qt的A*算法可视化分析

代码地址如下:http://www.demodashi.com/demo/13677.html 需求之前做过一个无人车需要自主寻找最佳路径,所以研究了相关的寻路算法,最终选择A算法,因为其简单易懂,是入门级的寻路算法。但是在验证的算法的时候,没有直观的感受,总是觉得会有什么问题,所以我就写了一个可视化的A算法验证,界面基于Qt开发。项目说明本项目主要分为2...

使用Echarts+Javaweb可视化数据库中数据

这里引用了王正帅同学的图片 地址如下:https://www.cnblogs.com/20183544-wangzhengshuai/p/12409216.html 一、总体感受    首先,说一些我个人感受,这是本人第一次接触图表可视化插件的使用, 说实话,刚开始编代码还是很懵的,而且刚开始的编代码的时候,我有点 心浮气躁了,我直接在网上去找与题目直接相...

阿里云DataV可视化使用疑虑及解决方法

1.dataV使用要求 datav访问需要使用高版本chrome浏览器 要60版本以上 如果使用的组件比较多 并且使用3D组件这些 对配置也有一定的要求 大屏最好是图形显卡 以及 16G内存以上 个人电脑的话 最好是游戏性能显卡 以及 16G内存以上 有没有电视可以直接访问dataV发布的url,效果不受影响 目前不定 2.dataV可视化...

Ubuntu 安装可视化桌面

     sudo apt-get update 更新     sudo apt-get install xinit     sudo apt-get install gdm  ( 登陆窗口,用于管理账户登陆的,还可以用来切换别的桌面环境)     sudo apt-get install ubuntu-desktop      shutdown -r n...

wpf 逻辑树与可视化树

XAML天生就是用来呈现用户界面的,这是由于它具有层次化的特性。在WPF中,用户界面由一个对象树构建而成,这棵树叫作逻辑树。逻辑树的概念很直观,但是为什么要关注它呢?因为几乎WPF的每一方面(属性、事件、资源等)都有与逻辑树相关联的行为。例如,属性值有时会沿着树自动传递给子元素,而触发的事件可以自底向上或自顶向下遍历树。 与逻辑树类似的一个概念是可视树。可...

SpringCloud学习笔记(5):Hystrix Dashboard可视化监控数据

简介 上篇文章中讲了使用Hystrix实现容错,除此之外,Hystrix还提供了近乎实时的监控。本文将介绍如何进行服务监控以及使用Hystrix Dashboard来让监控数据图形化。 项目介绍 sc-parent,父模块(请参照SpringCloud学习笔记(1):Eureka注册中心) sc-eureka,注册中心(请参照SpringCloud学习笔...