python计算汽车的平均油耗_用python对汽车油耗进行数据分析

原标题:用python对汽车油耗进行数据分析

- 从http://fueleconomy.gov/geg/epadata/vehicles.csv.zip

下载汽车油耗数据集并解压

- 进入jupyter notebook(ipython notebook)并新建一个New Notebook

- 输入命令

[python]view plaincopy

importpandas as pd

importnumpy as np

fromggplotimport*

importmatplotlib.pyplot as plt

%matplotlib inline

vehicles = pd.read_csv("vehicles.csv")

vehicles.head按下Shift +Enter 键,可以看到如下结果:

其中 pandas中Data Frame类的边界方法head,查看一个很有用的数据框data frame的中,包括每列的非空值数量和各列不同的数据类型的数量。

描述汽车油耗等数据

- 查看有多少观测点(行)和多少变量(列)

- 查看年份信息

len(pd.unique(vehicles.years))

min(vehicles.year)

max(vehicles.year)

- 查看燃料类型

pd.value_counts(vehicles.fuelTypel)

- 查看变速箱类型

pd.value_counts(vehicles.trany)

trany变量自动挡是以A开头,手动挡是以M开头;故创建一个新变量trany2:

vehicles['trany2'] = vehicles.trany.str[0]

pd.value_counts(vehicles.trany2)

同理可以查看其它特征数据

分析汽车油耗随时间变化的趋势

- 先按照年份分组

grouped = vehicle.groupby('year')

- 再计算其中三列的均值

averaged= grouped['comb08', 'highway08', 'city08'].agg([np.mean])

- 为方便分析,对其进行重命名,然后创建一个‘year’的列,包含该数据框data frame的索引

averaged.columns = ['comb08_mean', 'highwayo8_mean', 'city08_mean']

averaged['year'] = averaged.index

- 使用ggplot包将结果绘成散点图

print ggplot(averaged, aes('year', 'comb08_mean')) + geom_point(colour='steelblue') + xlab("Year") +

ylab("Average MPG") + ggtitle("All cars")

- 去除混合动力汽车

criteria1 = vehicles.fuelType1.isin(['Regular Gasoline', 'Premium Gasoline', 'Midgrade Gasoline'])

criteria2 = vehicles.fuelType2.isnull()

criteria3 = vehicles.atvType != 'Hybrid'

vehicles_non_hybrid = vehicles[criteria1 & criteria2 & criteria3]

- 将得到的数据框data frame按年份分组,并计算平均油耗

grouped = vehicles_non_hybrid.groupby(['year'])

averaged = grouped['comb08'].agg([np.mean])

averaged['hahhahah'] = averaged.index

- 查看是否大引擎的汽车越来越少

pd.unique(vehicles_non_hybrid.displ)

- 去掉nan值,并用astype方法保证各个值都是float型的

criteria = vehicles_non_hybrid.displ.notnull()

vehicles_non_hybrid = vehicles_non_hybrid[criteria]

vehicles_non_hybrid.loc[:,'displ'] = vehicles_non_hybrid.displ.astype('float')

criteria = vehicles_non_hybrid.comb08.notnull()

vehicles_non_hybrid = vehicles_non_hybrid[criteria]

vehicles_non_hybrid.loc[:,'comb08'] = vehicles_non_hybrid.comb08.astype('float')

- 最后用ggplot包来绘图

print ggplot(vehicles_non_hybrid, aes('displ', 'comb08')) + geom_point(color='steelblue') +

xlab('Engine Displacement') + ylab('Average MPG') + ggtitle('Gasoline cars')

- 查看是否平均起来汽车越来越少了

grouped_by_year = vehicles_non_hybrid.groupby(['year'])

avg_grouped_by_year = grouped_by_year['displ', 'comb08'].agg([np.mean])

- 计算displ和conm08的均值,并改造数据框data frame

avg_grouped_by_year['year'] = avg_grouped_by_year.index

melted_avg_grouped_by_year = pd.melt(avg_grouped_by_year, id_vars='year')

- 创建分屏绘图

p = ggplot(aes(x='year', y='value', color = 'variable_0'), data=melted_avg_grouped_by_year)

p + geom_point() + facet_grid("variable_0",scales="free") #scales参数fixed表示固定坐标轴刻度,free表示反馈坐标轴刻度

==========================================很皮的更新分隔线==========================================

调查汽车的制造商和型号

接下来的步骤会引导我们继续深入完成数据探索

- 首先查看cylinders变量有哪些可能的值

pd.unique(vehicles_non_hybrid.cylinders)

- 我们再将cylinders变量转换为float类型,这样可以轻松方便地找到data frame的子集

vehicles_non_hybrid.cylinders = vehicles_non_hybrid.cylinders.astype('float')

pd.unique(vehicles_non_hybrid.cylinders)

- 现在,我们可以查看各个时间段有四缸引擎汽车的品牌数量

vehicles_non_hybrid_4 = vehicles_non_hybrid[(vehicles_non_hybrid.cylinders==4.0)]

import matplotlib.pyplot as plt

%matplotlib inline

grouped_by_year_4_cylinder =

vehicles_non_hybrid_4.groupby(['year']).make.nunique()

fig = grouped_by_year_4_cylinder.plot()

fig.set_xlabel('Year')

fig.set_ylabel('Number of 4-Cylinder Maker')

随后,print fig 显示出图像,参见下图:

分析:

我们可以从上图中看到,从1980年以来四缸引擎汽车的品牌数量呈下降趋势。然而,需要注意的是,这张图可能会造成误导,因为我们并不知道汽车品牌总数是否在同期也发生了变化。为了一探究竟,我们继续一下操作。

- 查看各年有四缸引擎汽车的品牌的列表,找出每年的品牌列表

grouped_by_year_4_cylinder = vehicles_non_hybrid_4.groupby(['year'])

unique_makes = []

for name, group in grouped_by_year_4_cylinder:

unique_makes.append(set(pd.unique(group['make'])))

unique_makes = reduce(set.intersection, unique_makes)

print unique_makes

我们发现,在此期间只有12家制造商每年都制造四缸引擎汽车。

接下来,我们去发现这些汽车生产商的型号随时间的油耗表现。这里采用一个较复杂的方式。首先,创建一个空列表,最终用来产生布尔值Booleans。我们用iterrows生成器generator遍历data frame中的各行来产生每行及索引。然后判断每行的品牌是否在此前计算的unique_makes集合中,在将此布尔值Blooeans添加在Booleans_mask集合后面。

- 最终选取在unique_makes集合中存在的品牌

boolean_mask = []

for index, row in vehicles_non_hybrid_4.iterrows():

make = row['make']

boolean_mask.append(make in unique_makes)

df_common_makes = vehicles_non_hybrid_4[boolean_mask]

- 先将数据框data frame按year和make分组,然后计算各组的均值

df_common_makes_grouped = df_common_makes.groupby(['year', 'make']).agg(np.mean).reset_index()

- 最后利用ggplot提供的分屏图来显示结果

ggplot(aes(x='year', y='comb08'), data = df_common_makes_grouped)

+ geom_line() + facet_wrap('make')

结果参见下图:

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git常用命令2

##一、git常用命令 ###1、 push文件 * 打开cmd窗口 * 输入f:,进入f:(自己随便在自己的电脑上找个位置就行了,这里的f:,表示的是f盘) * 然后输入mkdir workSpace,会自动在f盘下生成一个workSpace文件夹 * 然…

android移动应用基础教程源代码,Android移动应用基础教程 【程序活动单元Activity】...

本章目录一、Activity的生命周期1、生命周期状态2 、生命周期方法3、横竖屏切换时的生命周期二、Activity的创建配置和关闭1、Activity的创建2、配置Activity3、开启和关闭Activity三、Intent与IntentFilter1、Intent介绍1.1 意图的概念1.2 显式意图1.3 隐式意图2、IntentFilte…

elasticsearch中cluster和transport知识

elasticsearch cluster 概述 elasticsearch节点间通信的基础transport转载于:https://www.cnblogs.com/wzj4858/p/8126033.html

Python中使用subplot在一张画布上显示多张图

subplot(arg1, arg2, arg3) arg1: 在垂直方向同时画几张图arg2: 在水平方向同时画几张图arg3: 当前命令修改的是第几张图 t np.arange(0,5,0.1) y1 np.sin(2*np.pi*t) y2 np.sin(2*np.pi*t) plt.subplot(211) plt.plot(t,y1,b-.) plt.subplot(212) plt.plot(t,y2,r--) plt.s…

Java 8:从PermGen到元空间

您可能已经知道,现在可以下载JDK 8 Early Access 。 这使Java开发人员可以尝试Java 8的一些新语言和运行时功能。这些功能之一是完全删除自Oracle自JDK 7发行以来就宣布的Permanent Generation(PermGen)空间。例如,自JDK 7起&…

oracle symonym_ORACLE SYNONYM详解

以下内容整理自Oracle 官方文档一 概念A synonym is an alias for any table, view,materialized view, sequence, procedure, function, package, type, Java classschema object, user-defined object type, or another synonym. Because a synonymis simply an alias, it re…

浏览器缓存问题原理以及解决方案

浏览器缓存问题: 简单来说,浏览器缓存就是把一个已经请求过的Web资源(如html页面,图片,js,数据等)拷贝一份副本储存在浏览器中。缓存会根据进来的请求保存输出内容的副本。当下一个请求来到的时…

Scikit-Learn机器学习入门

现在最常用的数据分析的编程语言为R和Python。每种语言都有自己的特点,Python因为Scikit-Learn库赢得了优势。Scikit-Learn有完整的文档,并实现很多机器学习算法,而每种算法使用的接口几乎相同,可以非常快的测试其它学习算法。 Pa…

hdu1542 Atlantis(扫描线+线段树+离散)矩形相交面积

题目链接&#xff1a;点击打开链接 题目描写叙述&#xff1a;给定一些矩形&#xff0c;求这些矩形的总面积。假设有重叠。仅仅算一次 解题思路&#xff1a;扫描线线段树离散&#xff08;代码从上往下扫描&#xff09; 代码&#xff1a; #include<cstdio> #include <al…

浏览器滚动条 --- 自定义“衣裳”

由于种种原因&#xff0c;浏览器的默认滚动条“衣裳”实在是 (ˉ▽&#xffe3;&#xff5e;)~~&#xff0c;为了“美”&#xff0c;本人结合万维网各大神给的经验和自己的实践&#xff0c;做了此篇总结。若有错误&#xff0c;请在评论里给出&#xff0c;我会及时更改。 我在电…

电脑调分辨率黑屏了怎么办_调显示器分辨率黑屏怎么办

调显示器分辨率黑屏怎么办调显示器分辨率黑屏解决方法&#xff1a;1&#xff0c;开机&#xff0c;当快要进入系统选项时&#xff0c;立即按f8键进入“高级模式”&#xff0c;因为系统选项界面显示的时间非常短&#xff0c;可以提早按f8键&#xff0c;否则错过时机就得重来。2&a…

什么是JNDI,SPI,CCI,LDAP和JCA?

JNDI代表Java命名和目录接口 。 它是用于提供对目录服务&#xff08;即带有对象的服务映射名称&#xff08;字符串&#xff09;&#xff0c;对远程对象或简单数据的引用&#xff09;的访问的API。 这就是所谓的 约束力 。 绑定集称为上下文 。 应用程序使用JNDI接口访问资源。…

android studio gradle 学习,学习Android Studio里的Gradle

一直听说Gradle很强大&#xff0c;只是偶尔用Android Studio创建Demo的时候看到他一次&#xff0c;今天抽个时间完整记录一下。1.gradle位置Android Studio项目创建好之后&#xff0c;默认有3个gradle文件&#xff0c;分别位于&#xff1a;/settings.gradle/build.gradle/app/b…

接口耗时打印并统计

1.可以利用Tomcat的access-log日志&#xff0c;让其打印出http请求的每次耗时。可以在 config/server.xml里Host标签下配置tomcat访问日志格式 <Valve className"org.apache.catalina.valves.AccessLogValve" directory"logs" prefix&quo…

js内存

js在定义变量时完成了内存的分配 js具有自动垃圾回收机制&#xff0c;垃圾回收器会每隔固定的一段时间就执行一次释放操作&#xff0c;即找出那些不再继续使用的值&#xff0c;释放其占用的内存 js中最常用的是通过标记清除的算法来找到哪些对象是不再继续使用的&#xff0c;因…

halcon 图像差分_Halcon编程-基于纹理的mara检测

表面瑕疵检测是机器视觉领域非常重要的一个应用。机器视觉是集光学、机电和计算机三个领域的一门不算新的技术。但目前表面瑕疵检测在学界主要是计算机专业或者控制专业瞄准图像处理方向在做&#xff0c;而视觉光学系统这一块主要是光学工程专业在做。很少有研究者把这三块都结…

Apache Camel入门

在先前的博文中&#xff0c;我们了解了企业集成模式&#xff08;EIP&#xff09;。 现在&#xff0c;在这篇文章中&#xff0c;我们将研究实现这些模式的Apache Camel框架。 关于骆驼&#xff1a; Apache Camel是一个开放源代码项目&#xff0c;已有将近5年的历史&#xff0c;…

css 写打印样式问题

&#xff08;1&#xff09;背景颜色打印不出来问题解决方法 background样式要加上 !important&#xff1b;color样式要加上 !important&#xff1b;-webkit-print-color-adjust: exact;然后记得浏览器打印设置里面要在“打印背景图形”前面打勾。 -webkit-print-color-adjust:…

android studio smssdk,SMSSDK for Android 配置

1.集成之前先要申请Mob的appkey与appsecret2.在Mob官网下载最新SDK&#xff0c;解压后会看到以下目录结构&#xff1a;SMSSDK下存放的是短信SDK的全部内容。3.在android studio中加入SMS的第三方库AS版本的SMSSDK目录下包含以下内容&#xff1a;MobCommons.jar&#xff1a;Mob …

linux后台不挂断运行 nohup命令

//后台常在 退出终端仍然运行 nohup python pyredis.py & nohup输出重定向到my.log nohup command > my.log 2>&1 &转载于:https://www.cnblogs.com/plxm/p/8136833.html