close

利用可視化探索圖表




一、數據可視化與探索圖
數據可視化是指用圖形或表格的方式來呈現數據。圖表能夠清楚地呈現數據性質, 以及數據間或屬性間的關係,可以輕易地讓人看圖釋義。用戶通過探索圖(Exploratory Graph)可以了解數據的特性、尋找數據的趨勢、降低數據的理解門檻。
二、常見的圖表實例
本章主要採用 Pandas 的方式來畫圖,而不是使用 Matplotlib 模塊。其實 Pandas 已經把 Matplotlib 的畫圖方法整合到 DataFrame 中,因此在實際應用中,用戶不需要直接引用 Matplotlib 也可以完成畫圖的工作。

1.折線圖
折線圖(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()


2.散布圖
散布圖(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)')


3.直方圖、長條圖
直方圖(Histogram Chart)通常用於同一欄位,呈現連續數據的分布狀況,與直方圖類似的另一種圖是長條圖(Bar Chart),用於檢視同一欄位,如圖 8.6 所示。
df[['sepallength(cm)','sepalwidth(cm)','petallength(cm)','petalwidth(cm)']].plot.hist()2df.target.value_counts().plot.bar()


4. 圓餅圖、箱形圖
圓餅圖(Pie Chart)可以用於檢視同一欄位各類別所占的比例,而箱形圖(Box Chart)則用於檢視同一欄位或比較不同欄位數據的分布差異,如圖 8.7 所示。
df.target.value_counts().plot.pie(legend=True)df.boxplot(column=['target'],figsize=(10,5))


數據探索實戰分享




本節利用兩個真實的數據集實際展示數據探索的幾種手法。

一、2013年美國社區調查
在美國社區調查(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個同學直接贈送。

開獎時間:「5月14日20:00」

END



未聞 Code·知識星球開放啦!

一對一答疑爬蟲相關問題

職業生涯諮詢

面試經驗分享

每周直播分享

......

未聞 Code·知識星球期待與你相見~

一二線大廠在職員工

十多年碼齡的編程老鳥

國內外高校在讀學生

中小學剛剛入門的新人

在「未聞 Code技術交流群」等你來!

入群方式:添加微信「mekingname」,備註「粉絲群」(謝絕廣告黨,非誠勿擾!)

愛點讚的人,運氣都不會太差
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()