Pandas資料分析:快速圖表視覺化各類操作詳解+例項程式碼(一)
highlight: a11y-light
我正在參加「掘金·啟航計劃」
前言
一般我們做資料探勘或者是資料分析,再或者是大資料開發提取資料庫裡面的資料時候,難免只能拿著表格資料左看右看,內心總是希望能夠根據自己所想立馬生成一張資料視覺化的圖表來更直觀的呈現資料。而當我們想要進行資料視覺化的時候,往往需要呼叫很多的庫與函式,還需要資料轉換以及大量的程式碼處理編寫。這都是十分繁瑣的工作,確實只為了資料視覺化我們不需要實現資料視覺化的工程程式設計,這都是資料分析師以及擁有專業的報表工具來做的事情,日常分析的話我們根據自己的需求直接進行快速出圖即可,而Pandas正好就帶有這個功能,當然還是依賴matplotlib庫的,只不過將程式碼壓縮更容易實現。下面就讓我們來了解一下如何快速出圖。
Pandas資料分析系列專欄已經更新了很久了,基本覆蓋到使用pandas處理日常業務以及常規的資料分析方方面面的問題。從基礎的資料結構逐步入門到處理各類資料以及專業的pandas常用函式講解都花費了大量時間和心思創作,如果大家有需要從事資料分析或者大資料開發的朋友推薦訂閱專欄,將在第一時間學習到Pandas資料分析最實用常用的知識。此篇部落格篇幅較長,涉及到處理文字資料(str/object)等各類操作,值得細讀實踐一番,我會將Pandas的精華部分挑出細講實踐。博主會長期維護博文,有錯誤或者疑惑可以在評論區指出,感謝大家的支援。
一、基礎繪圖:plot
Series和DataFrame上的plot方法只是plt.plot()的簡單包裝,這裡我們用一段實際資料來進行視覺化展示:
這是一段真實地鐵通行量特徵資料,我們用此資料進行展示:
df_flow['客流量'].plot()
如果索引由日期組成,則呼叫gcf().autofmt_xdate()方法可以很好地格式化x軸。
在DataFrame上,plot()可以方便地用標籤繪製所有列:
df_flow_mark[['溼度','風級','降水量']].plot()
可以使用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='星期六客流量')
二、底圖板塊
根據Pandas包裝後的kind關鍵字我們梳理一下底圖種類:
也可以使用DataFrame.plot方法建立這些其他繪圖
``` 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作為引數的繪圖。其中包括:
- Scatter Matrix
- Andrews Curves
- Parallel Coordinates
- Lag Plot
- Autocorrelation Plot
- Bootstrap Plot
- RadViz
分別是: - 散射矩陣 - 安德魯斯曲線 - 平行座標 - 滯後圖 - 自相關圖 - 引導圖 - 拉德維茲圖
繪圖也可以用錯誤條或表格進行裝飾。
1.條形圖
df_flow_mark['客流量'].plot(kind='bar')
df_flow_mark['客流量'].plot.bar()
多個標籤圖表也可以一齊繪出:
df_flow_mark[['風級','降水量']].plot.bar()
要生成堆疊條形圖,傳遞stacked=True:
df_flow_mark[['風級','降水量']].plot.bar(stacked=True)
長久看這個maatplotlib的預設地圖有點疲勞了,我這裡換個主題,還是一樣的效果不礙事。
要獲得水平條形圖可以使用barh方法:
df_flow_mark[['風級','降水量']].plot.barh(stacked=True)
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)
直方圖可以使用stacked=True進行疊加。可以使用bins關鍵字更改bin大小。
df4.plot.hist(stacked=True, bins=20);
可以傳遞matplotlib hist支援的其他關鍵字。例如,水平和累積直方圖可以通過orientation='horizontal'
和cumulative=True
繪製。
有關詳細資訊,可以參閱hist方法和matplotlib hist文件。\ 現有介面DataFrame.hist,但仍然可以使用hist繪製直方圖
plt.figure();
df_flow_mark['風級'].hist();
DataFrame.hist()可以在多個子地塊上繪製列的直方圖:
plt.figure();
df_flow_mark[['風級','降水量']].diff().hist(color="k", alpha=0.5, bins=50);
可以指定by關鍵字來繪製分組直方圖:
``` data = pd.Series(np.random.randn(1000))
data.hist(by=np.random.randint(0, 4, 1000), figsize=(6, 4)); ```
此外,還可以在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));
點關注,防走丟,如有紕漏之處,請留言指教,非常感謝
以上就是本期全部內容。我是fanstuck ,有問題大家隨時留言討論 ,我們下期見
- 一文速學數模-整合預測模型Boost(提升方法)原理以及框架 模型速覽
- Python-sklearn機器學習之旅:我的第一個機器學習實戰專案
- 斯皮爾曼相關(spearman)相關性分析一文詳解 python例項程式碼
- sklearn預測評估指標計算詳解:準確率(Accuracy)、精確率(Precision)、召回率(Recall)、F1score
- 機器學習:效能度量篇-Python利用鳶尾花資料繪製P-R曲線
- Pandas資料分析:快速圖表視覺化各類操作詳解 例項程式碼(一)
- Pandas資料分析:快速圖表視覺化各類操作詳解 例項程式碼(二)
- Pandas資料分析:處理文字資料(str/object)各類操作 程式碼一文詳解(一)
- 決策樹(Decision Tree)演算法詳解及python實現
- PCA(主成分分析法)原理以及應用 程式碼實現
- 機器學習:效能度量篇-Python利用鳶尾花資料繪製ROC和AUC曲線
- 深度學習面試常見問題
- 資料預處理歸一化詳細解釋
- 一文速學-熵權法實戰確定評價指標權重
- 機器學習:基於概率的樸素貝葉斯分類器詳解--Python實現以及專案實戰
- 機器學習:貝葉斯分類器詳解(一)-貝葉斯決策理論與樸素貝葉斯
- 秩和比綜合評價法(RSR)詳解及Python實現和應用
- SVM(Support Vector Machines)支援向量機演算法原理以及應用詳解 Python程式碼實現
- 機器學習:基於概率的樸素貝葉斯分類器詳解--Python實現以及專案實戰
- 機器學習:效能度量篇-Python利用鳶尾花資料繪製P-R曲線