絕了!Pandas繪圖功能
柱狀圖箱線圖密度圖條形圖散點(diǎn)圖折線圖保存繪圖總結(jié)
可視化是用來探索性數(shù)據(jù)分析最強(qiáng)大的工具之一。Pandas庫包含基本的繪圖功能,可以讓你創(chuàng)建各種繪圖。Pandas中的繪圖是在matplotlib之上構(gòu)建的,如果你很熟悉matplotlib你會(huì)驚奇地發(fā)現(xiàn)他們的繪圖風(fēng)格是一樣的。
本案例用到的數(shù)據(jù)集是關(guān)于鉆石的。
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)

輸出結(jié)果顯示,數(shù)據(jù)集包含53940個(gè)不同鉆石的10個(gè)特征,其中有數(shù)值變量也有分類變量。
柱狀圖
柱狀圖是一個(gè)單變量圖(注意區(qū)分柱狀圖和條形圖),它將一個(gè)數(shù)值變量分組到各個(gè)數(shù)值單元中,并顯示每個(gè)單元中的觀察值數(shù)量。直方圖是了解數(shù)值變量分布的一種有用工具。所用到的方法是df.hist()
diamonds.hist(column="carat",????????#?具體列
??????????????figsize=(8,8),?????????#?圖片大小
??????????????color="blue");?????????#?繪畫顏色

從圖上我們可以看到鉆石重量的分布是十分傾斜的:大多數(shù)鉆石大約1克拉及以下,但也有極少量極端值。
為了獲得更多細(xì)節(jié)的數(shù)據(jù),我們可以增加分箱的數(shù)量來查看更小范圍內(nèi)的鉆石重量,通過限制x軸的寬度使整個(gè)圖形在畫布上顯得不那么擁擠。
diamonds.hist(column="carat",????????
??????????????figsize=(8,8),?????????
??????????????color="blue",??????????
??????????????bins=50,???????????????
??????????????range=?(0,3.5));???????

這個(gè)直方圖讓我們更好地了解了分布中的一些細(xì)微差別,但我們不能確定它是否包含所有數(shù)據(jù)。將X軸限制在3.5可能會(huì)剔除一些異常值,以至于它們在原始圖表中沒有顯示。接下來看看有沒有鉆石大于3.5克拉:
diamonds[diamonds["carat"]?>?3.5]

哦豁,真的有9顆鉆石比3.5克拉大,這些'怪種'鉆石我們應(yīng)該關(guān)心嗎?出于數(shù)據(jù)探索的目的,我們完全可以舍棄這些點(diǎn),但如果是把數(shù)據(jù)的全貌展示給別人看,我覺得有必要詳細(xì)說明:范圍之外還存在9個(gè)離群點(diǎn)。
箱線圖
箱線圖是另一種單變量圖, 方法pd.boxplot()
diamonds.boxplot(column="carat");

箱線圖的中心框代表中間50%的觀察值,中心線代表中位數(shù)。
boxplot最有用的特性之一是能夠生成并排的boxplots。每個(gè)分類變量都在一個(gè)不同的boxside上繪制一個(gè)分類變量。接下來將鉆石價(jià)格按鉆石凈度分成兩部分來做一個(gè)并排的方框圖:
diamonds.boxplot(column="price",????????
?????????????????by=?"clarity",?????????
?????????????????figsize=?(8,8));???????

上面的箱線圖很奇怪:按理說清晰度更好的鉆石能賣到更高的價(jià)格,然而清晰度最高的鉆石(IF)的中間價(jià)卻比低凈度鉆石低!這是為什么呢?也許下面這個(gè)圖可以給我們一些啟示:
diamonds.boxplot(column="carat",????????
?????????????????by=?"clarity",?????????
?????????????????figsize=?(8,8));???????

上面的圖表顯示,透明度較低的鉆石往往更大,透明度高的鉆石更加小巧。由于尺寸重量是決定鉆石價(jià)值的另一個(gè)重要因素,因此低透明度鉆石的中間價(jià)較高也就不足為奇了。
密度圖
密度圖以連續(xù)曲線顯示數(shù)值變量的分布。它類似于柱狀圖,但密度圖能更好地顯示分布的基本形狀。series.plot(kind="density")
diamonds["carat"].plot(kind="density",?
??????????????????????figsize=(8,8),????
??????????????????????xlim=?(0,5));?????

條形圖
條形圖是直觀顯示分類變量計(jì)數(shù)的圖形,df.plot(kind="bar"):
carat_table?=?pd.crosstab(index=diamonds["clarity"],?columns="count")
carat_table

carat_table.plot(kind="bar",
?????????????????figsize=(8,8));

可以使用二維表格創(chuàng)建堆積條形圖。堆積條形圖顯示每個(gè)條形圖中另一個(gè)變量的分布:
carat_table?=?pd.crosstab(index=diamonds["clarity"],?
??????????????????????????columns=diamonds["color"])
carat_table

carat_table.plot(kind="bar",?
?????????????????figsize=(8,8),
?????????????????stacked=True);

分組條形圖是堆疊條形圖的另一種選擇,設(shè)置stacked=False即可:
carat_table.plot(kind="bar",?
?????????????????figsize=(8,8),
?????????????????stacked=False);

散點(diǎn)圖
散點(diǎn)圖是雙變量圖,采用兩個(gè)數(shù)值變量,并在x/y平面上繪制數(shù)據(jù)點(diǎn)。創(chuàng)建單個(gè)散點(diǎn)圖使用方法df.plot(kind="scatter"):
diamonds.plot(kind="scatter",?????#?Create?a?scatterplot
??????????????x="carat",??????????#?Put?carat?on?the?x?axis
??????????????y="price",??????????#?Put?price?on?the?y?axis
??????????????figsize=(10,10),
??????????????ylim=(0,20000));

盡管上面的散點(diǎn)圖有許多重疊點(diǎn),但它仍然讓我們對(duì)鉆石克拉重量和價(jià)格之間的關(guān)系有了一些了解:大鉆石通常更貴。
折線圖
折線圖通常用于繪制時(shí)間序列數(shù)據(jù):
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")??

總結(jié)
Python繪圖生態(tài)系統(tǒng)有許多不同的庫,大部分人可能會(huì)很難從中抉擇,不知道該如何人下手。Pandas繪圖函數(shù)使你能夠快速地可視化和瀏覽數(shù)據(jù)。Pandas繪圖函數(shù)并沒有提供盡善盡美的所有功能,但它們通常足以完成任務(wù)。
往期推薦:
收藏 | 49 個(gè) Python 學(xué)習(xí)資源
我都逛哪些技術(shù)網(wǎng)站?(程序員必備58個(gè)網(wǎng)站匯總)
肝!精心整理了 50 個(gè)數(shù)據(jù)源網(wǎng)站!
