Pandas數據分析:快速圖表可視化各類操作詳解+實例代碼(一)

語言: CN / TW / HK

highlight: a11y-light

我正在參加「掘金·啟航計劃」

前言

一般我們做數據挖掘或者是數據分析,再或者是大數據開發提取數據庫裏面的數據時候,難免只能拿着表格數據左看右看,內心總是希望能夠根據自己所想立馬生成一張數據可視化的圖表來更直觀的呈現數據。而當我們想要進行數據可視化的時候,往往需要調用很多的庫與函數,還需要數據轉換以及大量的代碼處理編寫。這都是十分繁瑣的工作,確實只為了數據可視化我們不需要實現數據可視化的工程編程,這都是數據分析師以及擁有專業的報表工具來做的事情,日常分析的話我們根據自己的需求直接進行快速出圖即可,而Pandas正好就帶有這個功能,當然還是依賴matplotlib庫的,只不過將代碼壓縮更容易實現。下面就讓我們來了解一下如何快速出圖。

Pandas數據分析系列專欄已經更新了很久了,基本覆蓋到使用pandas處理日常業務以及常規的數據分析方方面面的問題。從基礎的數據結構逐步入門到處理各類數據以及專業的pandas常用函數講解都花費了大量時間和心思創作,如果大家有需要從事數據分析或者大數據開發的朋友推薦訂閲專欄,將在第一時間學習到Pandas數據分析最實用常用的知識。此篇博客篇幅較長,涉及到處理文本數據(str/object)等各類操作,值得細讀實踐一番,我會將Pandas的精華部分挑出細講實踐。博主會長期維護博文,有錯誤或者疑惑可以在評論區指出,感謝大家的支持。

一、基礎繪圖:plot

Series和DataFrame上的plot方法只是plt.plot()的簡單包裝,這裏我們用一段實際數據來進行可視化展示:

圖片.png

這是一段真實地鐵通行量特徵數據,我們用此數據進行展示:

df_flow['客流量'].plot()

圖片.png

如果索引由日期組成,則調用gcf().autofmt_xdate()方法可以很好地格式化x軸。

圖片.png

在DataFrame上,plot()可以方便地用標籤繪製所有列:

df_flow_mark[['濕度','風級','降水量']].plot()

圖片.png

可以使用plot()中的x和y關鍵字繪製一列與另一列的對比,比如我們想要使用星期六的客流量和星期日的客流量作對比:

df_flow_7=df_flow[df_flow['日期']=='星期日'].iloc[:7,:] df_flow_7.rename(columns={'客流量':'星期日客流量'},inplace=True) df_flow_6=df_flow[df_flow['日期']=='星期六'].iloc[:7,:] df_flow_6.rename(columns={'客流量':'星期六客流量'},inplace=True) df_compare=pd.concat([columns_convert_df(df_flow_7['星期日客流量']),columns_convert_df(df_flow_6['星期六客流量'])],axis=1) df_compare.plot(x='星期日客流量',y='星期六客流量')

圖片.png

二、底圖板塊

根據Pandas包裝後的kind關鍵字我們梳理一下底圖種類:

圖片.png

也可以使用DataFrame.plot方法創建這些其他繪圖而不是提供kind關鍵字參數。這使得更容易發現繪圖方法及其使用的特定參數

``` df.plot.area df.plot.barh df.plot.density df.plot.hist df.plot.line df.plot.scatter df.plot.bar df.plot.box df.plot.hexbin df.plot.kde df.plot.pie

``` 除了這些類型,還有DataFrame.hist()和DataFrame.boxplot()方法,它們使用單獨的接口。

最後,pandas中有幾個繪圖功能。以Series或DataFrame作為參數的繪圖。其中包括:

分別是: - 散射矩陣 - 安德魯斯曲線 - 平行座標 - 滯後圖 - 自相關圖 - 引導圖 - 拉德維茲圖

繪圖也可以用錯誤條或表格進行裝飾。

1.條形圖

df_flow_mark['客流量'].plot(kind='bar')

df_flow_mark['客流量'].plot.bar()

圖片.png

多個標籤圖表也可以一齊繪出:

df_flow_mark[['風級','降水量']].plot.bar()

圖片.png

要生成堆疊條形圖,傳遞stacked=True:

df_flow_mark[['風級','降水量']].plot.bar(stacked=True)

圖片.png

長久看這個maatplotlib的默認地圖有點疲勞了,我這裏換個主題,還是一樣的效果不礙事。

要獲得水平條形圖可以使用barh方法:

df_flow_mark[['風級','降水量']].plot.barh(stacked=True)

圖片.png

2.直方圖

可以使用DataFrame.plo.hist()和Series.plot.hist()方法繪製直方圖.

df4 = pd.DataFrame( { "a": np.random.randn(1000) + 1, "b": np.random.randn(1000), "c": np.random.randn(1000) - 1, }, columns=["a", "b", "c"], ) plt.figure(); df4.plot.hist(alpha=0.5)

圖片.png 直方圖可以使用stacked=True進行疊加。可以使用bins關鍵字更改bin大小。

df4.plot.hist(stacked=True, bins=20); 可以傳遞matplotlib hist支持的其他關鍵字。例如,水平和累積直方圖可以通過orientation='horizontal'cumulative=True繪製。

圖片.png

有關詳細信息,可以參閲hist方法和matplotlib hist文檔。\ 現有接口DataFrame.hist,但仍然可以使用hist繪製直方圖

plt.figure(); df_flow_mark['風級'].hist();

圖片.png

DataFrame.hist()可以在多個子地塊上繪製列的直方圖:

plt.figure(); df_flow_mark[['風級','降水量']].diff().hist(color="k", alpha=0.5, bins=50);

圖片.png

可以指定by關鍵字來繪製分組直方圖:

``` data = pd.Series(np.random.randn(1000))

data.hist(by=np.random.randint(0, 4, 1000), figsize=(6, 4)); ```

圖片.png

此外,還可以在DataFrame.plot.hist()中指定by關鍵字:

data = pd.DataFrame( { "a": np.random.choice(["x", "y", "z"], 1000), "b": np.random.choice(["e", "f", "g"], 1000), "c": np.random.randn(1000), "d": np.random.randn(1000) - 1 } ) data.plot.hist(by=["a", "b"], figsize=(10, 5));

圖片.png

點關注,防走丟,如有紕漏之處,請留言指教,非常感謝

以上就是本期全部內容。我是fanstuck ,有問題大家隨時留言討論 ,我們下期見

「其他文章」