復習:回顧學習完第一章击纬,我們對泰坦尼克號數據有了基本的了解,也學到了一些基本的統(tǒng)計方法钾麸,第二章中我們學習了數據的清理和重構更振,使得數據更加的易于理解;今天我們要學習的是第二章第三節(jié):數據可視化饭尝,主要給大家介紹一下Python數據可視化庫Matplotlib殃饿,在本章學習中,你也許會覺得數據很有趣芋肠。在打比賽的過程中,數據可視化可以讓我們更好的看到每一個關鍵步驟的結果如何遵蚜,可以用來優(yōu)化方案帖池,是一個很有用的技巧。
2 第二章:數據可視化
開始之前吭净,導入numpy睡汹、pandas以及matplotlib包和數據
# 加載所需的庫 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 如果出現 ModuleNotFoundError: No module named 'xxxx' ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 你只需要在終端/cmd下 pip install xxxx 即可 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? import numpy as np ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? import pandas as pd ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?import matplotlib.pyplot as plt
#加載result.csv這個數據 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?df = pd.read_csv('result.csv') ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? df.head()
2.7 如何讓人一眼看懂你的數據?
《Python for Data Analysis》第九章
2.7.1 任務一:跟著書本第九章寂殉,了解matplotlib囚巴,自己創(chuàng)建一個數據項,對其進行基本可視化
【思考】最基本的可視化圖案有哪些友扰?分別適用于那些場景彤叉?(比如折線圖適合可視化某個屬性值隨時間變化的走勢)
#思考回答 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #這一部分需要了解可視化圖案的的邏輯,知道什么樣的圖案可以表達什么樣的信號b
柱狀圖村怪、折線圖秽浇。柱狀圖適合占比,折線圖適合趨勢
2.7.2 任務二:可視化展示泰坦尼克號數據集中男女中生存人數分布情況(用柱狀圖試試)甚负。
#代碼編寫 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Survived = df.groupby('Sex')['Survived'].sum() Survived.plot.bar() plt.title('survived_count') ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?plt.show()
【思考】計算出泰坦尼克號數據集中男女中死亡人數柬焕,并可視化展示审残?如何和男女生存人數可視化柱狀圖結合到一起?看到你的數據可視化斑举,說說你的第一感受(比如:你一眼看出男生存活人數更多搅轿,那么性別可能會影響存活率)。
需要按性別和生存維度進行數量統(tǒng)計富玷,并且按照生存和死亡人數兩個數量形成柱狀圖璧坟。男性存活人數比女性存活人數多很多
2.7.3 任務三:可視化展示泰坦尼克號數據集中男女中生存人與死亡人數的比例圖(用柱狀圖試試)。
df.groupby(['Sex','Survived'])['Survived'].count().unstack().plot(kind='bar',stacked='True') ? plt.title('survived_count') ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?plt.show()
【提示】男女這兩個數據軸凌彬,存活和死亡人數按比例用柱狀圖表示
2.7.4 任務四:可視化展示泰坦尼克號數據集中不同票價的人生存和死亡人數分布情況沸柔。(用折線圖試試)(橫軸是不同票價,縱軸是存活人數)
【提示】對于這種統(tǒng)計性質的且用折線表示的數據铲敛,你可以考慮將數據排序或者不排序來分別表示褐澎。看看你能發(fā)現什么伐蒋?
fare_sur =df.groupby('Fare')['Survived'].value_counts().sort_values(ascending=True) fare_sur
fig = plt.figure(figsize=(12, 6)) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?fare_sur.plot(grid=True) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?plt.legend() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?plt.show()
# 排序前繪折線圖 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?fare_sur1 = df.groupby(['Fare'])['Survived'].value_counts() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fare_sur1
fig = plt.figure(figsize=(12,6)) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fare_sur1.plot(grid=True) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? plt.legend() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?plt.show()
2.7.5 任務五:可視化展示泰坦尼克號數據集中不同倉位等級的人生存和死亡人員的分布情況工三。(用柱狀圖試試)
import seaborn as sns ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?sns.countplot(x='Pclass',hue='Survived',data =df)
【思考】看到這個前面幾個數據可視化,說說你的第一感受和你的總結
等級越高先鱼,標價越高俭正,生存率越高
2.7.6 任務六:可視化展示泰坦尼克號數據集中不同年齡的人生存與死亡人數分布情況。(不限表達方式)
facet = sns.FacetGrid(df,hue='Survived',aspect=3) facet.map(sns.kdeplot,'Age',shade=True) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?facet.set(xlim=(0,df['Age'].max())) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?facet.add_legend()
2.7.7 任務七:可視化展示泰坦尼克號數據集中不同倉位等級的人年齡分布情況焙畔。(用折線圖試試)
df.Age[df.Pclass == 1].plot(kind='kde') ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? df.Age[df.Pclass == 2].plot(kind='kde') ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? df.Age[df.Pclass == 3].plot(kind='kde') ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?plt.xlabel("age") ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? plt.legend((1,2,3),loc="best")
【思考】上面所有可視化的例子做一個總體的分析掸读,你看看你能不能有自己發(fā)現
我們在分析我們數據時可以通過可視化方式進行直觀的呈現,可以有柱狀圖宏多、折線圖等儿惫,柱狀圖可以直觀的展現數量,折線圖可以直觀的展現走勢伸但∩銮耄總之都是為了更好的進行數據的呈現與分析
【總結】到這里,我們的可視化就告一段落啦更胖,如果你對數據可視化極其感興趣铛铁,你還可以了解一下其他可視化模塊,如:pyecharts却妨,bokeh等饵逐。
如果你在工作中使用數據可視化,你必須知道數據可視化最大的作用不是炫酷彪标,而是最快最直觀的理解數據要表達什么梳毙,你覺得呢?