數據可視化是指用圖形或表格的方式來呈現數據。圖表能夠清楚地呈現數據性質, 以及數據間或屬性間的關係,可以輕易地讓人看圖釋義。用戶通過探索圖(Exploratory Graph)可以了解數據的特性、尋找數據的趨勢、降低數據的理解門檻。 本章主要採用 Pandas 的方式來畫圖,而不是使用 Matplotlib 模塊。其實 Pandas 已經把 Matplotlib 的畫圖方法整合到 DataFrame 中,因此在實際應用中,用戶不需要直接引用 Matplotlib 也可以完成畫圖的工作。 折線圖(line chart)是最基本的圖表,可以用來呈現不同欄位連續數據之間的關係。繪製折線圖使用的是 plot.line() 的方法,可以設置顏色、形狀等參數。在使用上,拆線圖繪製方法完全繼承了 Matplotlib 的用法,所以程序最後也必須調用 plt.show() 產生圖,如圖8.4 所示。df_iris[['sepallength(cm)']].plot.line()plt.show()ax=df[['sepallength(cm)']].plot.line(color='green',title="Demo",style='--')ax.set(xlabel="index",ylabel="length")plt.show()
散布圖(Scatter Chart)用於檢視不同欄位離散數據之間的關係。繪製散布圖使用的是 df.plot.scatter(),如圖8.5所示。df=df_irisdf.plot.scatter(x='sepallength(cm)',y='sepalwidth(cm)')frommatplotlibimportcmcmap=cm.get_cmap('Spectral')df.plot.scatter(x='sepallength(cm)',y='sepalwidth(cm)',s=df[['petallength(cm)']]*20,c=df['target'],cmap=cmap,title='differentcirclesizebypetallength(cm)')
直方圖(Histogram Chart)通常用於同一欄位,呈現連續數據的分布狀況,與直方圖類似的另一種圖是長條圖(Bar Chart),用於檢視同一欄位,如圖 8.6 所示。df[['sepallength(cm)','sepalwidth(cm)','petallength(cm)','petalwidth(cm)']].plot.hist()2df.target.value_counts().plot.bar()
圓餅圖(Pie Chart)可以用於檢視同一欄位各類別所占的比例,而箱形圖(Box Chart)則用於檢視同一欄位或比較不同欄位數據的分布差異,如圖 8.7 所示。df.target.value_counts().plot.pie(legend=True)df.boxplot(column=['target'],figsize=(10,5))
本節利用兩個真實的數據集實際展示數據探索的幾種手法。 在美國社區調查(American Community Survey)中,每年約有 350 萬個家庭被問到關於他們是誰及他們如何生活的詳細問題。調查的內容涵蓋了許多主題,包括祖先、教育、工作、交通、互聯網使用和居住。 數據來源:https://www.kaggle.com/census/2013-american-community-survey。 數據名稱:2013 American Community Survey。 先觀察數據的樣子與特性,以及每個欄位代表的意義、種類和範圍。#讀取數據df=pd.read_csv("./ss13husa.csv")#欄位種類數量df.shape#(756065,231)#欄位數值範圍df.describe() 先將兩個 ss13pusa.csv 串連起來,這份數據總共包含 30 萬筆數據,3 個欄位:SCHL ( 學歷,School Level)、 PINCP ( 收入,Income) 和 ESR ( 工作狀態,Work Status)。pusa=pd.read_csv("ss13pusa.csv")pusb=pd.read_csv("ss13pusb.csv")#串接兩份數據col=['SCHL','PINCP','ESR']df['ac_survey']=pd.concat([pusa[col],pusb[col],axis=0) 依據學歷對數據進行分群,觀察不同學歷的數量比例,接着計算他們的平均收入。group=df['ac_survey'].groupby(by=['SCHL'])print('學歷分布:'+group.size())group=ac_survey.groupby(by=['SCHL'])print('平均收入:'+group.mean()) 波士頓房屋數據集(Boston House Price Dataset)包含有關波士頓地區的房屋信息, 包 506 個數據樣本和 13 個特徵維度。 數據來源:https://archive.ics.uci.edu/ml/machine-learning-databases/housing/。 數據名稱:Boston House Price Dataset。 先觀察數據的樣子與特性,以及每個欄位代表的意義、種類和範圍。 可以用直方圖的方式畫出房價(MEDV)的分布,如圖 8.8 所示。df=pd.read_csv("./housing.data")#欄位種類數量df.shape#(506,14)#欄位數值範圍df.describe()importmatplotlib.pyplotaspltdf[['MEDV']].plot.hist()plt.show()
註:圖中英文對應筆者在代碼中或數據中指定的名字,實踐中讀者可將它們替換成自己需要的文字。 接下來需要知道的是哪些維度與「房價」關係明顯。先用散布圖的方式來觀察,如圖8.9所示。#drawscatterchartdf.plot.scatter(x='MEDV',y='RM').plt.show()
最後,計算相關係數並用聚類熱圖(Heatmap)來進行視覺呈現,如圖 8.10 所示。#computepearsoncorrelationcorr=df.corr()#drawheatmapimportseabornassnscorr=df.corr()sns.heatmap(corr)plt.show()
顏色為紅色,表示正向關係;顏色為藍色,表示負向關係;顏色為白色,表示沒有關係。RM 與房價關聯度偏向紅色,為正向關係;LSTAT、PTRATIO 與房價關聯度偏向深藍, 為負向關係;CRIM、RAD、AGE 與房價關聯度偏向白色,為沒有關係。 聲明:本文選自清華大學出版社的《深入淺出python數據分析》一書,略有修改,經出版社授權刊登於此。書籍:贈送3本《深入淺出Python數據分析》,更多介紹和目錄可以點擊下面鏈接了解。
贈送規則:「留言」,我會選3個同學直接贈送。
未聞 Code·知識星球開放啦!
一對一答疑爬蟲相關問題
職業生涯諮詢
面試經驗分享
每周直播分享
......
未聞 Code·知識星球期待與你相見~
一二線大廠在職員工
十多年碼齡的編程老鳥
國內外高校在讀學生
中小學剛剛入門的新人
在「未聞 Code技術交流群」等你來!
入群方式:添加微信「mekingname」,備註「粉絲群」(謝絕廣告黨,非誠勿擾!)
愛點讚的人,運氣都不會太差