python數據分析繪圖實戰練習13組

以下練習數據來源均為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組

分析年度乘客總量變化情況

按年度進行分組,並統計每個分組的總和數據

<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組

圖中可以看出,從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>
python數據分析繪圖實戰練習13組

圖中可以看出,每年的七八月份是人數最多的

鳶尾花花型尺寸分析

<code>data = sns.load_dataset("iris", data_home='./seaborn-data')
data.head()/<code>
python數據分析繪圖實戰練習13組

萼片(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>
python數據分析繪圖實戰練習13組

圖中可以看出,萼片大小與花瓣大小基本成正相關關係,圖上還可以看到有特殊情況出現

不同種類(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>
python數據分析繪圖實戰練習13組

這幅圖就很明確的可以看出,萼片與花瓣大小不成正比的花是同一類型,而其他兩類都是成正相關關係

餐廳消費情況分析

<code>data = sns.load_dataset("tips", data_home='./seaborn-data')
data.head()
# 總消費,小費,性別,吸菸與否,就餐星期,就餐時間,就餐人數/<code>
python數據分析繪圖實戰練習13組

小費和總消費之間的關係

<code>plt.scatter(data['total_bill'], data['tip'])
plt.xlabel('total_bill')
plt.ylabel('tip')/<code>
python數據分析繪圖實戰練習13組

從圖上可以看出,總消費和小費之間基本成正相關關係,即總消費高,小費給的也多一些

男性顧客和女性顧客,誰更慷慨

按照性別分組,展示小費數量

<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>
python數據分析繪圖實戰練習13組


從圖上可以看出男女顧客在小費的平均值上相差不大,但是男女顧客中都存在小費給的比較高的情況,這方面男性顧客要更慷慨一些

抽菸與否是否會對小費金額產生影響

按照是否吸菸分組,展示小費數量

<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>
python數據分析繪圖實戰練習13組


從圖中可以看出,平均小費金額上吸菸顧客要給的高一點,但是特例情況中不吸菸的顧客給高小費的情況要比吸菸的顧客多

工作日和週末,什麼時候顧客給的小費更慷慨

按照工作日分組,展示小費數量

<code>work_day = ['Mon', 'Tue', 'Wed', 'Thur', 'Fri']

# 增加一個是否工作日的記錄
data['work'] = data['day'].isin(work_day)
data.head()
/<code>
python數據分析繪圖實戰練習13組

<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>
python數據分析繪圖實戰練習13組

從圖中可以看出,週末小費給的更多一些,當然也可以是因為消費人多,畢竟周內大家都上班呢

午飯和晚飯,哪一頓顧客更願意給小費

按照就餐時間分組,統計小費情況

<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>
python數據分析繪圖實戰練習13組


很明顯晚餐的時候人們更願意給小費,應該是晚餐的時候人們就餐時間長一些,所以更願意給小費

就餐人數是否會對慷慨度產生影響

按照就餐人數分組,統計小費情況,因為數據當中就餐人數比較少,所以直接分組,如果人數變化大,可以先按照區間進行分組統計

<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>
python數據分析繪圖實戰練習13組

從圖上可以看出,隨著就餐人數的增多,給予的小費也相對多了

性別+抽菸的組合因素對慷慨度的影響

按照性別和抽菸分組,統計小費情況

<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數據分析繪圖實戰練習13組

從圖中可以看出,男性抽菸和女性抽菸者均比同性別不抽菸的顧客給的小費多,女性抽菸者甚至比男性不抽菸者給的多,但是在高端小費領域男性不抽菸者就比較大氣慷慨了


今天先到這裡,明天我們再分析一下

泰坦尼克號海難倖存者狀況


分享到:


相關文章: