– 从http://fueleconomy.gov/geg/epadata/vehicles.csv.zip
下载汽车油耗数据集并解压
– 进入jupyter notebook(ipython notebook)并新建一个New Notebook
– 输入命令
[python]view plaincopy
-
importpandasaspd
-
importnumpyasnp
-
fromggplotimport*
-
importmatplotlib.pyplotasplt
-
%matplotlibinline
-
vehicles=pd.read_csv(“vehicles.csv”)
-
vehicles.head</span>
按下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.indexmelted_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’)
结果参见下图:
来自大数据挖掘DT数据分析 公众号: datadw
原文始发于微信公众号(PPV课数据科学社区):用python对汽车油耗进行数据分析
原创文章,作者:ppvke,如若转载,请注明出处:http://www.ppvke.com/archives/9960