本文概述并比較Python數(shù)據(jù)可視化包和工具,包括Pandas,Seaborn,ggplot,Bokeh,pygal,和Plotly。
介紹
在Python世界中,有大量數(shù)據(jù)可視化的選項(xiàng).因?yàn)楦鞣N各樣,要知道什么時(shí)候使用哪個(gè)是非常困難的.本文包含一些較為流行的樣例,并說(shuō)明如果使用其創(chuàng)建簡(jiǎn)單的條形圖.我會(huì)使用以下包/工具創(chuàng)建繪圖例子:
Pandas
Seaborn
ggplot
Bokeh
pygal
Plotly
在例子用,我將使用pandas操作數(shù)據(jù),并啟動(dòng)其可視化.在大多數(shù)情況下使用這些工具不需要pandas,但是我覺(jué)得pandas+可視化工具如此普遍,這是最好的起點(diǎn)。
Matplotlib怎么樣?
Matplotlib 是python可視化庫(kù)的祖父.它非常強(qiáng)大,但是太過(guò)復(fù)雜.你可以使用Matplotlib 做任何你需要做到的事情,但是并不容易弄明白.我不打算通過(guò)純Matplotlib 樣例講解,因?yàn)樵S多工具(尤其Pandas和Seaborn)是Matplotlib的thin wrappers.
對(duì)Matplotlib最大的抱怨是需要大量工作的到期望的圖表.在處理這些例子時(shí),我發(fā)現(xiàn)更容易獲得優(yōu)美的圖形,不需要大量大代碼.對(duì)于matplotlib冗余性的一個(gè)小例子,看一下這個(gè)ggplot后例子。
方法
我相信,只要人們開(kāi)始閱讀這一點(diǎn),他們會(huì)指出更好的方式來(lái)使用這些工具。我的目標(biāo)不是建立在每個(gè)例子完全相同的圖形.我想在搜索解決方案大致相同的時(shí)間以大致相同的方式可視化數(shù)據(jù).
按這個(gè)過(guò)程,最大的挑戰(zhàn)是格式化x和y軸,使得在給定一些大標(biāo)簽時(shí)數(shù)據(jù)看起來(lái)合理.也許花一些時(shí)間弄清楚每個(gè)工具希望數(shù)據(jù)如何格式化.一旦弄明白這些部分,剩下的部分比較簡(jiǎn)單的.
另外一個(gè)需要考慮的電視,條形圖可能是制作圖標(biāo)類(lèi)型最簡(jiǎn)單的一種.這些工具讓你能夠繪制更多類(lèi)型的圖標(biāo).我的示例更注重于易格式化性而不是創(chuàng)新可視化例子,因?yàn)闃?biāo)簽,一些圖表占用了很大空間,所以我削減了,只是為了保證文章的長(zhǎng)度管理.最后我調(diào)整了圖像,因此任何模糊是縮放問(wèn)題,并且不是實(shí)際輸出質(zhì)量.
最后,我接近使用其他工具替換Excel的心態(tài).我認(rèn)為我的例子更能說(shuō)明報(bào)告,演講,郵件或者靜態(tài)網(wǎng)頁(yè)中的展示.如果你評(píng)估實(shí)時(shí)數(shù)據(jù)可視化或者通過(guò)其他機(jī)制共享的工具,那么部分工具提供了很多我沒(méi)有提到的功能.
數(shù)據(jù)集
在上篇文章中介紹了我們將要處理的數(shù)據(jù).數(shù)據(jù)集中包含125行項(xiàng)目,但我選擇關(guān)注前10以保證簡(jiǎn)單點(diǎn).你可以在這找到完整的數(shù)據(jù).
Pandas
我使用pandas DataFrame作為所有各種圖標(biāo)的出發(fā)點(diǎn).幸運(yùn)的是,pandas為我們提供了內(nèi)置的matplotlib層繪圖能力.將使用它作為基準(zhǔn).首先,導(dǎo)入模塊,并將數(shù)據(jù)讀入DataFrame.我們希望對(duì)數(shù)據(jù)進(jìn)行排序,并限制為前10項(xiàng).
budget = pd.read_csv("mn-budget-detail-2014.csv")
budget = budget.sort('amount',ascending=False)[:10]
對(duì)所有例子我們使用同樣的budget.以下是前5項(xiàng)目樣子:
現(xiàn)在,設(shè)置展示使用更好的默認(rèn)值,并創(chuàng)建一個(gè)條形圖:
pd.options.display.mpl_style = 'default'
budget_plot = budget.plot(kind="bar",x=budget["detail"],
title="MN Capital Budget - 2014",
legend=False)
使用detail列創(chuàng)建圖標(biāo)同時(shí)展示標(biāo)題并區(qū)屬圖例.這是將圖片存為png的額外代碼.
fig = budget_plot.get_figure()
fig.savefig("2014-mn-capital-budget.png")
這是圖片樣子(階段是為了文章長(zhǎng)度管理).
看起來(lái)基本不錯(cuò).理想情況下,我想多做一些y軸的格式化,但需要matplotlib 的處理.這是個(gè)完美有用的可視化,但是不能通過(guò)pandas做更多純粹的定制.
Seaborn
Seaborn是一個(gè)基于matplotlib的可視化庫(kù).旨在讓默認(rèn)的數(shù)據(jù)可視化更加悅目.同時(shí)讓復(fù)雜的圖表更簡(jiǎn)單的創(chuàng)建.它和pandas集成.我的例子不允許Seaborn 顯著差異.我喜歡Seaborn 的一個(gè)原因是各種各樣的內(nèi)置樣式,讓你快速更改調(diào)色板以看起來(lái)更加漂亮.因此,關(guān)于簡(jiǎn)單的圖表Seaborn沒(méi)有為我們做很多. 標(biāo)準(zhǔn)導(dǎo)入并讀入數(shù)據(jù):
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
budget = pd.read_csv("mn-budget-detail-2014.csv")
budget = budget.sort('amount',ascending=False)[:>10]
使用x_order對(duì)x軸項(xiàng)目排序.這部分代碼設(shè)置排序,圖表風(fēng)格和條形圖顏色:
sns.set_style("darkgrid")
bar_plot = sns.barplot(x=budget["detail"],y=budget["amount"],
palette="muted",
x_order=budget["detail"].tolist())
plt.xticks(rotation=>90)
plt.show()
評(píng)論
查看更多