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.pswp.cn/news/370099.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370099.shtml
英文地址,請注明出處:http://en.pswp.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