以下練習數據來源均為seaborn庫中提供,通過網絡獲取,如果出現網絡獲取慢或者失敗的情況,可以到GitHub上搜索seaborn-data,下載後傳入讀取路徑即可
<code>from matplotlib import pyplot as plt
import seaborn as sns/<code>
航班乘客變化分析
<code>data = sns.load_dataset("flights")
data.head()/<code>
![python數據分析繪圖實戰練習13組](http://p2.ttnews.xyz/loading.gif)
分析年度乘客總量變化情況
按年度進行分組,並統計每個分組的總和數據
<code>year_data = data.groupby(by=['year']).sum()
plt.plot(year_data.index, year_data['passengers'], color='red', linewidth=1.5, linestyle='-', marker='.')
plt.title('Annual change graph')
plt.xlabel('Year')
plt.ylabel('Passengers')
plt.legend(['Annual'],)
plt.grid(True)
plt.show()/<code>
![python數據分析繪圖實戰練習13組](http://p2.ttnews.xyz/loading.gif)
圖中可以看出,從1949年-1960年的乘機人數來看,航空業發展迅速
分析乘客在一年中各月份的分佈
按月度進行分組,並統計每個分組的總和數據
<code>month_data = data.groupby(by=['month']).sum()
plt.figure(figsize=(10,5))
plt.bar(month_data.index, month_data['passengers'], color='blue', alpha = 0.8)
plt.title('Annual change graph')
plt.xlabel('Month')
plt.ylabel('Passengers')
plt.ylim([0, 5000])
plt.xticks(list(month_data.index), list(month_data.index), rotation=60)
for x, y in zip(month_data.index, month_data['passengers']):
plt.text(x, y + 100, '%s' % y, ha='center')
plt.legend(['Annual'], loc='upper left')
plt.show()/<code>
圖中可以看出,每年的七八月份是人數最多的
鳶尾花花型尺寸分析
<code>data = sns.load_dataset("iris", data_home='./seaborn-data')
data.head()/<code>
萼片(sepal)和花瓣(petal)的大小關係
要計算萼片和花瓣大小關係,我們是知道萼片長寬及花瓣長寬的,最簡單的計算方式:長*寬
<code># 萼片大小
sepal = data['sepal_length'] * data['sepal_width']
# 花瓣大小
petal = data['petal_length'] * data['petal_width']
plt.scatter(sepal, petal)
plt.xlabel('sepal')
plt.ylabel('petal')
plt.show()/<code>
圖中可以看出,萼片大小與花瓣大小基本成正相關關係,圖上還可以看到有特殊情況出現
不同種類(species)鳶尾花萼片和花瓣的大小關係
上面是對所有花的數據進行對比,不是很嚴謹,我們需要按花的類型進行分類後,再看每個分類裡面的萼片與花瓣大小關係
<code># 取出類型
species = data.species.unique()
# 每種類型定義不同顏色
colors = ['steelblue', '#9999ff', '#ff9999']
for i, spec in enumerate(species):
# 按類型取出花的數據,並計算大小
items = data[(data['species'] == spec)]
sepal = items['sepal_length'] * items['sepal_width']
petal = items['petal_length'] * items['petal_width']
plt.scatter(sepal, petal, c=colors[i], label=spec)
plt.xlabel('sepal')
plt.ylabel('petal')
plt.legend(loc='upper left')
plt.show()/<code>
這幅圖就很明確的可以看出,萼片與花瓣大小不成正比的花是同一類型,而其他兩類都是成正相關關係
餐廳消費情況分析
<code>data = sns.load_dataset("tips", data_home='./seaborn-data')
data.head()
# 總消費,小費,性別,吸菸與否,就餐星期,就餐時間,就餐人數/<code>
小費和總消費之間的關係
<code>plt.scatter(data['total_bill'], data['tip'])
plt.xlabel('total_bill')
plt.ylabel('tip')/<code>
從圖上可以看出,總消費和小費之間基本成正相關關係,即總消費高,小費給的也多一些
男性顧客和女性顧客,誰更慷慨
按照性別分組,展示小費數量
<code>tips = []
sexs = []
for sex, items in data.groupby(by=['sex']):
sexs.append(sex)
tips.append(items['tip'])
plt.boxplot(x=tips, patch_artist=True, labels=sexs, showmeans=True, medianprops = {'linestyle':'--','color':'orange'})
plt.show()/<code>
從圖上可以看出男女顧客在小費的平均值上相差不大,但是男女顧客中都存在小費給的比較高的情況,這方面男性顧客要更慷慨一些
抽菸與否是否會對小費金額產生影響
按照是否吸菸分組,展示小費數量
<code>tips = []
smokers = []
for smoker, items in data.groupby(by=['smoker']):
smokers.append(smoker)
tips.append(items['tip'])
plt.boxplot(x=tips, patch_artist=True, labels=smokers, showmeans=True, medianprops = {'linestyle':'--','color':'orange'})
plt.show()
/<code>
從圖中可以看出,平均小費金額上吸菸顧客要給的高一點,但是特例情況中不吸菸的顧客給高小費的情況要比吸菸的顧客多
工作日和週末,什麼時候顧客給的小費更慷慨
按照工作日分組,展示小費數量
<code>work_day = ['Mon', 'Tue', 'Wed', 'Thur', 'Fri']
# 增加一個是否工作日的記錄
data['work'] = data['day'].isin(work_day)
data.head()
/<code>
<code>tips = []
works = []
for work, items in data.groupby(by=['work']):
works.append(work)
tips.append(items['tip'])
plt.boxplot(x=tips, patch_artist=True, labels=works, showmeans=True, medianprops = {'linestyle':'--','color':'orange'})
/<code>
從圖中可以看出,週末小費給的更多一些,當然也可以是因為消費人多,畢竟周內大家都上班呢
午飯和晚飯,哪一頓顧客更願意給小費
按照就餐時間分組,統計小費情況
<code>tips = []
times = []
for time, items in data.groupby(by=['time']):
times.append(time)
tips.append(items['tip'])
plt.boxplot(x=tips, patch_artist=True, labels=times, showmeans=True, medianprops = {'linestyle':'--','color':'orange'})
/<code>
很明顯晚餐的時候人們更願意給小費,應該是晚餐的時候人們就餐時間長一些,所以更願意給小費
就餐人數是否會對慷慨度產生影響
按照就餐人數分組,統計小費情況,因為數據當中就餐人數比較少,所以直接分組,如果人數變化大,可以先按照區間進行分組統計
<code>tips = []
sizes = []
for size, items in data.groupby(by=['size']):
sizes.append(size)
tips.append(items['tip'])
plt.boxplot(x=tips, patch_artist=True, labels=sizes, showmeans=True, medianprops = {'linestyle':'--','color':'orange'})
plt.show()
/<code>
從圖上可以看出,隨著就餐人數的增多,給予的小費也相對多了
性別+抽菸的組合因素對慷慨度的影響
按照性別和抽菸分組,統計小費情況
<code>tips = []
groups = []
for group, items in data.groupby(by=['sex', 'smoker']):
groups.append(group)
tips.append(items['tip'])
plt.boxplot(x=tips, patch_artist=True, labels=groups, showmeans=True, medianprops = {'linestyle':'--','color':'orange'})
plt.show()/<code>
從圖中可以看出,男性抽菸和女性抽菸者均比同性別不抽菸的顧客給的小費多,女性抽菸者甚至比男性不抽菸者給的多,但是在高端小費領域男性不抽菸者就比較大氣慷慨了
今天先到這裡,明天我們再分析一下
泰坦尼克號海難倖存者狀況閱讀更多 Python集結號 的文章