汽车数据的可视化分析(R)
数据下载: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,,)=="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=="")
ggplot(gasCars4,aes(factor(year),comb08))+geom_boxplot()+facet_wrap(~tranny2,ncol=)+theme(axis.text.x=element_text(angle = ))+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=)
我们使用dlply(注意不是ddply)来操作gasCars4数据框,按照年来分割数据集,然后对每一块的make变量应用一个函数。对每一年,计算出独立的制造商列表,然后dlply返回每一年的列表。dlply输入一个数据框返回一个列表,而ddply输入一个数据框返回一个数据框
使用reduce函数来做更高阶的排序。这个Reduce函数和map reduce编程中的reduce过程的想法是一样的,而map reduce是google提出的基于Hadoop的编程模式。从某种角度来讲,R是一个函数式编程语言,其核心包含一些高阶的函数。所谓高阶函数,是指其输入是其他的函数。在这行代码中,我们将intersect函数作为输入赋值给Reduce函数,这个函数将会对数据集uniqMakes的每一个元素求交集,而这个数据集是我们之前已经生成的每一年不同制造商的列表。最终,结果放在一个新的列表中,这个列表展现了每一年都会出现的制造商。
汽车数据的可视化分析(R)的更多相关文章
- OneAPM大讲堂 | 监控数据的可视化分析神器 Grafana 的告警实践
文章系国内领先的 ITOM 管理平台供应商 OneAPM 编译呈现. 概览 Grafana 是一个开源的监控数据分析和可视化套件.最常用于对基础设施和应用数据分析的时间序列数据进行可视化分析,也可以用 ...
- 毕设之Python爬取天气数据及可视化分析
写在前面的一些P话:(https://jq.qq.com/?_wv=1027&k=RFkfeU8j) 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向. ...
- python3 对拉勾数据进行可视化分析
上回说到我们如何如何把拉勾的数据抓取下来的,既然获取了数据,就别放着不动,把它拿出来分析一下,看看这些数据里面都包含了什么信息.(本次博客源码地址:https://github.com/MaxLyu/ ...
- 用Python爬取《王者荣耀》英雄皮肤数据并可视化分析,用图说话
大家好,我是辰哥~ 今天辰哥带大家分析一波当前热门手游<王者荣耀>英雄皮肤,比如皮肤上线时间.皮肤类型(勇者:史诗:传说等).价格. 1.获取数据 数据来源于<王者荣耀官方网站> ...
- 大数据Web可视化分析系统开发
下载地址 https://tomcat.apache.org/download-70.cgi 打开我们的idea 这些的话都可以按照自己的需求来修改 在这里新建包 新建一个java类 package ...
- 通过 Azure IoT 中心实现互联网设备数据的可视化分析
本课程主要介绍了如何 在Azure 平台上借助 Azure IoT 中心, Azure 流分析,Web 应用, Azure 数据库等服务快速构建收集处理并可视化来自设备的数据流的应用, 包括项目背景介 ...
- 新闻实时分析系统 大数据Web可视化分析系统开发
1.基于业务需求的WEB系统设计 2.下载Tomcat并创建Web工程并配置相关服务 下载tomcat,解压并启动tomcat服务. 1)新建web app项目 创建好之后的效果 2)对tomcat进 ...
- 新闻网大数据实时分析可视化系统项目——21、大数据Web可视化分析系统开发
1.基于业务需求的WEB系统设计 2.下载Tomcat并创建Web工程并配置相关服务 下载tomcat,解压并启动tomcat服务. 1)新建web app项目 创建好之后的效果 2)对tomcat进 ...
- 爬虫综合大作业——网易云音乐爬虫 & 数据可视化分析
作业要求来自于https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3075 爬虫综合大作业 选择一个热点或者你感兴趣的主题. 选择爬取的对象 ...
随机推荐
- svn Couldn't open rep-cache database
出现这样的错误原因是因为 问题一 开始出现错误:The database disk image is malformed 解决方案:http://www.cnblogs.com/chen110xi/p ...
- 转载-好用的linux软件合集
音频 Airtime – Airtime 是一款用于调度和远程站点管理的开放广播软件 Ardour – 在 Linux 上录音,编辑,和混音 Audacious – 开源音频播放器,按你想要的方式 ...
- FromHBITMAP 这个函数会丢失透明信息。
在用 FromHBITMAP 你会发现出来的图是带有黑边的,这是因为这个函数有个 bug,解决的办法是用下列的函数进行转换,大体意思就是自己 memcpy 不要用 FromHBITMAP 函数. Bi ...
- python C example:encode mp3 code
#include <stdio.h> #include <stdlib.h> #include <lame.h> #define INBUFSIZE 4096 #d ...
- 使用nmap 验证多种漏洞
0x00 前言 大家都知道在平时的漏扫中,AWVS.APPSCAN.Netspark.webspectort等漏扫工具扫描出来的漏洞问题往往存在误报,这时我们就需要进行人工手动验证漏洞,这里我们有两种 ...
- Zookeeper之ZKClient的使用
maven依赖 <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</ ...
- Ocelot + IdentityServer4 坑自己
现像是 connect/userinfo 可以访问 但是api都提示401 后面发现是在appsettings.json "Options": {"Authority&q ...
- 我的第八个java程序--读取word内容
package World; import java.io.FileNotFoundException; import java.io.IOException; import org.apache.p ...
- Servlet 服务器 HTTP 响应
状态行包括 HTTP 版本(在本例中为 HTTP/1.1).一个状态码(在本例中为 200)和一个对应于状态码的短消息(在本例中为 OK). 下表总结了从 Web 服务器端返回到浏览器的最有用的 HT ...
- Week 3: Assessing performance 笔记
得到一个模型之后如何评价其性能? training error & generalization error & test error 如何理解generalization error ...