绝了!Pandas绘图功能
柱狀圖箱線圖密度圖條形圖散點圖折線圖保存繪圖總結
可視化是用來探索性數據分析最強大的工具之一。Pandas庫包含基本的繪圖功能,可以讓你創建各種繪圖。Pandas中的繪圖是在matplotlib之上構建的,如果你很熟悉matplotlib你會驚奇地發現他們的繪圖風格是一樣的。
本案例用到的數據集是關于鉆石的。
import?numpy?as?np import?pandas?as?pd import?matplotlib%matplotlib?inline diamonds?=?pd.read_csv("diamonds.csv") diamonds?=?diamonds.drop("Unnamed:?0",?axis=1)print(diamonds.shape)????????diamonds.head(5) (53940,?10)輸出結果顯示,數據集包含53940個不同鉆石的10個特征,其中有數值變量也有分類變量。
柱狀圖
柱狀圖是一個單變量圖(注意區分柱狀圖和條形圖),它將一個數值變量分組到各個數值單元中,并顯示每個單元中的觀察值數量。直方圖是了解數值變量分布的一種有用工具。所用到的方法是df.hist()
diamonds.hist(column="carat",????????#?具體列figsize=(8,8),?????????#?圖片大小color="blue");?????????#?繪畫顏色從圖上我們可以看到鉆石重量的分布是十分傾斜的:大多數鉆石大約1克拉及以下,但也有極少量極端值。
為了獲得更多細節的數據,我們可以增加分箱的數量來查看更小范圍內的鉆石重量,通過限制x軸的寬度使整個圖形在畫布上顯得不那么擁擠。
這個直方圖讓我們更好地了解了分布中的一些細微差別,但我們不能確定它是否包含所有數據。將X軸限制在3.5可能會剔除一些異常值,以至于它們在原始圖表中沒有顯示。接下來看看有沒有鉆石大于3.5克拉:
diamonds[diamonds["carat"]?>?3.5]哦豁,真的有9顆鉆石比3.5克拉大,這些'怪種'鉆石我們應該關心嗎?出于數據探索的目的,我們完全可以舍棄這些點,但如果是把數據的全貌展示給別人看,我覺得有必要詳細說明:范圍之外還存在9個離群點。
箱線圖
箱線圖是另一種單變量圖, 方法pd.boxplot()
diamonds.boxplot(column="carat");箱線圖的中心框代表中間50%的觀察值,中心線代表中位數。
boxplot最有用的特性之一是能夠生成并排的boxplots。每個分類變量都在一個不同的boxside上繪制一個分類變量。接下來將鉆石價格按鉆石凈度分成兩部分來做一個并排的方框圖:
上面的箱線圖很奇怪:按理說清晰度更好的鉆石能賣到更高的價格,然而清晰度最高的鉆石(IF)的中間價卻比低凈度鉆石低!這是為什么呢?也許下面這個圖可以給我們一些啟示:
diamonds.boxplot(column="carat",????????by=?"clarity",?????????figsize=?(8,8));???????上面的圖表顯示,透明度較低的鉆石往往更大,透明度高的鉆石更加小巧。由于尺寸重量是決定鉆石價值的另一個重要因素,因此低透明度鉆石的中間價較高也就不足為奇了。
密度圖
密度圖以連續曲線顯示數值變量的分布。它類似于柱狀圖,但密度圖能更好地顯示分布的基本形狀。series.plot(kind="density")
diamonds["carat"].plot(kind="density",?figsize=(8,8),????xlim=?(0,5));?????條形圖
條形圖是直觀顯示分類變量計數的圖形,df.plot(kind="bar"):
carat_table?=?pd.crosstab(index=diamonds["clarity"],?columns="count") carat_table carat_table.plot(kind="bar",figsize=(8,8));可以使用二維表格創建堆積條形圖。堆積條形圖顯示每個條形圖中另一個變量的分布:
carat_table?=?pd.crosstab(index=diamonds["clarity"],?columns=diamonds["color"])carat_table carat_table.plot(kind="bar",?figsize=(8,8),stacked=True);分組條形圖是堆疊條形圖的另一種選擇,設置stacked=False即可:
carat_table.plot(kind="bar",?figsize=(8,8),stacked=False);散點圖
散點圖是雙變量圖,采用兩個數值變量,并在x/y平面上繪制數據點。創建單個散點圖使用方法df.plot(kind="scatter"):
diamonds.plot(kind="scatter",?????#?Create?a?scatterplotx="carat",??????????#?Put?carat?on?the?x?axisy="price",??????????#?Put?price?on?the?y?axisfigsize=(10,10),ylim=(0,20000));盡管上面的散點圖有許多重疊點,但它仍然讓我們對鉆石克拉重量和價格之間的關系有了一些了解:大鉆石通常更貴。
折線圖
折線圖通常用于繪制時間序列數據:
years?=?[y?for?y?in?range(1950,2016)]readings?=?[(y+np.random.uniform(0,20)-1900)?for?y?in?years]time_df?=?pd.DataFrame({"year":years,"readings":readings})time_df.plot(x="year",y="readings",figsize=(9,9));保存繪圖
如果要保存圖片供以后使用,兩步就可以輕松解決:首先用plot.get_figure(),然后用figure.savefig("filename")。圖片可以保存為多種常見的文件格式,例如png、jpeg和pdf。
my_plot?=?time_df.plot(x="year",????y="readings",figsize=(9,9))my_fig?=?my_plot.get_figure()????????????my_fig.savefig("line_plot_example.png")??總結
Python繪圖生態系統有許多不同的庫,大部分人可能會很難從中抉擇,不知道該如何人下手。Pandas繪圖函數使你能夠快速地可視化和瀏覽數據。Pandas繪圖函數并沒有提供盡善盡美的所有功能,但它們通常足以完成任務。
往期推薦: 收藏 | 49 個 Python 學習資源我都逛哪些技術網站?(程序員必備58個網站匯總)肝!精心整理了 50 個數據源網站!總結
以上是生活随笔為你收集整理的绝了!Pandas绘图功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一秒钟就破解!2020年最烂密码出炉,看
- 下一篇: 再见,Matplotlib!