Python可視化工具概述

介紹

在Python中,有不少數據可視化途徑。由於這種多樣性,形成很難選擇。本文包括一些比較常見的可視化工具的樣例,並將指導如何利用它們來建立簡單的條形圖。我將採用下面的工具來建立繪圖數據示例:html

Pandaspython

Seabornweb

ggplotapi

Bokeh瀏覽器

pygal服務器

Plotlysvg

在實例中,咱們利用pandas來操做數據,驅動可視化。大多數狀況下,這些工具的使用是不須要pandas的,但我以爲混用pandas和可視化工具比較常見,也是很好的起點。工具

Matplotlib是什麼?

python 可視化工具包起源於Matplotlib。它很是強大,也很複雜。你可使用它作幾乎全部的事情,然而,它並非很易於學習。我不打算講述純 Matplotlib實例,由於不少工具(尤爲是Pandas和Seaborn)都對它進行了封裝。若是你須要更多的瞭解,請參考個人simple graphing相關文章: http://pbpython.com/simple-graphing-pandas.htmlpost

我對Matplotlib抱怨最多的就是,要獲得合理的圖表,須要付出不少。在練習下面這些例子中,我發現不須要不少代碼,就能夠獲得很好看的 可視化效果。若是你須要一些較小例子,用來學習matplotlib詳細特徵,能夠在ggplot post中找到相關的實例:http://pbpython.com/simple-graphing-pandas.html性能

關於方法

本文中是我所提到的方法。我相信你們在閱讀時,也會想到更好的使用這些工具的方法。個人目標,不是在每一個示例中去建立徹底一致的圖表,而是關注,在每一個例子中以大體相同的方式對數據進行可視化,以及大體相同的時間的研究方案。

在學習過程當中,碰到的最大的挑戰,就是格式化x軸和y軸,使用大的標籤使數據看起來合理。一樣還須要時間弄清楚每一個工具須要格式化的數據。一旦搞清楚這些,其它的就相對簡單了。

另外一個須要考慮的地方,條形圖多是一種比較簡單的類型。這些工具容許你使用數據建立各類各樣的圖形。個人實例更多關注的是格式化相關的易用 性,而不是可視化創新。另外,由於標籤,一些圖佔用更多的空間,因此,我已進行處理,以便文章長度適中。最後,圖片大小也修改了,縮放後有些模糊,但不影 響學習。

最後,我試着使用另外一個工具代替Excel。我想讓個人例子能更直觀地顯示在報告,展現,郵件或者是靜態頁面。若是你正在評估工具的實時數據可視化或經過其它方式的共享機制,以及這些工具更多的功能,我在本文中暫時不做介紹。

數據集

在上一篇文章中(http://pbpython.com/web-scraping-mn-budget.html),描述了咱們用到的數 據。在數據抓取例子中,更深刻點,在每一個類別中肯定詳細的支出項。數據集包括125行支出項,但我只須要關注top10,這樣能夠簡單些。你能夠在此找到 詳細的數據集:http://pbpython.com/extras/mn- ... 4.csv

Pandas

我將使用pandas的DataFrame來開始畫各類圖形。幸運的是,pandas提供內置的圖表功能,它封裝了matplotlib。我將使用它來做爲基線。

首先,導入咱們的模塊,將數據讀入設定的DataFrame。咱們還須要對數據排序,並限制在top10中。

budget = pd.read_csv("mn-budget-detail-2014.csv")

budget = budget.sort('amount',ascending=False)[:10]

咱們將在全部實例中,使用一樣的設定,下面是查看到的top5狀況

Python可視化工具概述

    如今能夠創建display,使用更好的defaults,建立條形圖:

?

1
2
3
4
pd.options.display.mpl_style = 'default'
budget_plot = budget.plot(kind = "bar" ,x = budget\[ "detail" \],
                       title = "MN Capital Budget - 2014" ,
                       legend = False


    這使用"default"列建立的圖表,顯示標題,去掉了圖例。
    再加上下面的代碼,能夠將圖片保存爲png格式文件 。

?

1
2
fig = budget_plot.get_figure()
fig.savefig( "2014-mn-capital-budget.png" )


    看看生成的效果:

Python可視化工具概述

基本上,看起來很好了。想一想,還能夠在y軸上作更多的格式化處理,但這樣,就須要瞭解matplotlib了。好了,就這樣,僅經過pandas,咱們不能作更多的定製了。

Seaborn

Seaborn是一個可視化庫,基於matplotlib。它會使用數據看起來更具備吸引力,還能夠很簡單地建立更復雜的圖表,也能夠和pandas集成。

個人seaborn例子不能搞得太差別化了。有一件事,我喜歡seaborn各類內置的樣式,你能夠快速地改變調色板,這樣看起來更好一些。不然,對於簡單圖形,seaborn不能作更多了。

先import以及讀入數據:

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設置x軸上各項的順序。

下面的代碼設置順序,並設置圖表樣式和條形圖顏色:

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()

Python可視化工具概述

你能夠看到,我使用matplotlib旋轉x軸標題,這樣能夠看到它們。看起來,確實不錯了。再想一想,我還想格式化一下,在y軸上的點,在不使用matplotlib的plt.yticks的狀況下,但我不知道如何作。

ggplot

ggplot與seaborn類似,也是基於matplotlib,用於簡化matplotlib可視化,並改善可視化效果。與seaborn不一樣的是,它是R語言ggplot2的移值。所以,一些API對於python不太友好,但它確實很是強大。

我沒有在R中使用過ggplot,因此,這有點學習曲線。但我能夠開始瞭解下ggplot的魅力。這個庫還處在活躍的開發期,但願它一直髮展下 去,慢慢成熟,我以爲它將會是一個真正強大的工具。我花了些時間學習使用它,在看了代碼和google所需後,我可以解決大部分問題。

開始吧!導入並讀取數據:

import pandas as pd

from ggplot import *

budget = pd.read_csv("mn-budget-detail-2014.csv")

budget = budget.sort('amount',ascending=False)[:10]

如今能夠構造一些情節讓幾個ggplot命令一塊兒運行:

p = ggplot(budget, aes(x="detail",y="amount")) + \

geom_bar(stat="bar", labels=budget["detail"].tolist()) +\

ggtitle("MN Capital Budget - 2014") + \

xlab("Spending Detail") + \

ylab("Amount") + scale_y_continuous(labels='millions') + \

theme(axis_text_x=element_text(angle=90))

print p

 

Python可視化工具概述

 

Bokeh

Bokeh與前3個庫不同,它不依賴matplotlib,而是在瀏覽器中生成可視化。這意味着能夠產生交互的web可視化,這樣個人實例有點簡單了。

Import,而後讀取數據:

import pandas as pd

from bokeh.charts import Bar

budget = pd.read_csv("mn-budget-detail-2014.csv")

budget = budget.sort('amount',ascending=False)[:10]

bokeh不一樣的方面,在於,我須要明確地列出,咱們須要繪圖的值。

?

1
details = budget[ "detail" ].values.tolist()amount = list (budget[ "amount" ].astype( float ).values)

如今能夠畫圖了。下面的代碼能夠在瀏覽器中顯示HTML頁面,包括圖表。能夠保存爲png文件,用於其它目的。

bar = Bar(amount, details, filename="bar.html")

bar.title("MN Capital Budget - 2014").xlabel("Detail").ylabel("Amount")

bar.show()

png圖以下:

 

Python可視化工具概述

能夠看到圖片,很好,很清晰。尚未找到更易於格式化y軸的方式。Bokeh還有不少功能,在本例中不能一一列舉,請參考相關文檔。

Pygal

Pygal用來建立svg圖表。把依賴包都安裝好後,你也能夠保存圖表爲png文件。svg文件對於建立交互圖表很是有用。我一樣發現用這個工做,能夠很容易建立個性化的,視覺體驗很好的圖表。

下面導入,並讀取數據:

import pandas as pd

import pygal

from pygal.style import LightStyle

budget = pd.read_csv("mn-budget-detail-2014.csv")

budget = budget.sort('amount',ascending=False)[:10]

咱們須要創建圖表類型,並設置一些基本參數:

bar_chart = pygal.Bar(style=LightStyle, width=800, height=600,

legend_at_bottom=True, human_readable=True,

title='MN Capital Budget - 2014')

一個有趣的地方:human_readable 能夠很好地格式化數據,很管用。

再加些數據到圖表中。這個地方,與pandas的集成不是很緊密,但我發現它能很好的處理數據量小的狀況。對於大數據量的狀況,性能可能會是個問題。

for index, row in budget.iterrows():

bar_chart.add(row["detail"], row["amount"])

如今能夠渲染到svg和png文件中去了:

bar_chart.render_to_file('budget.svg')

bar_chart.render_to_png('budget.png')


Python可視化工具概述



我以爲svg演示,至關不錯,並且,我喜歡圖表擁有獨立,視覺愉悅的風格。我也發現用這個工具,哪些可作,哪些不可作,都比較容易瞭解。我建議你下載svg文件,在瀏覽器中查看圖表的交互效果。

Plotly

Plotly做爲在線工具,用來作數據分析和可視化,有點特別。它擁有健狀的API,包括python版本。去網上查查,就知道,它有很豐富的,交互的圖表。感謝這些文檔,建立條形圖至關簡單多了。

按照文檔,獲取API key。而後全部工做,都很容易進行了。須要注意的一點是,全部東西,都將發到web上,因此,請確保你對付web沒有問題。有一個選項,可讓圖表私有,這樣,你能夠在這方面進行控制。

Plotly能很好地與pandas集成。有問題的時候,能夠向開發方發郵件,能很快收到回覆。對他們的答覆很滿意。
好了,Import並讀入數據:

?

1
2
3
4
5
6
7
import plotly.plotly as py
import pandas as pd
from plotly.graph_objs import *
 
budget = pd.read_csv( "mn-budget-detail-2014.csv" )
budget.sort( 'amount' ,ascending = False ,inplace = True )
budget = budget[: 10 ]


設置數據和圖表類型:

?

1
2
3
4
5
6
data = Data([
Bar(
     x = budget[ "detail" ],
     y = budget[ "amount" ]
)
])


再加上layout信息:

?

1
2
3
4
5
6
7
8
9
10
11
layout = Layout(
title = '2014 MN Capital Budget' ,
font = Font(
     family = 'Raleway, sans-serif'
),
showlegend = False ,
xaxis = XAxis(
     tickangle = - 45
),
bargap = 0.05
)


最後,顯示圖表數據。這會打開瀏覽器,顯示已完成的圖表。我原本沒有看這些,但可使用py.image.save_as 保存爲圖像的。很酷吧!你不但能夠看到基於web的報告,還有能夠嵌入到文檔中的本地版本。

?

1
2
3
fig = Figure(data = data, layout = layout)
plot_url = py.plot(data,filename = 'MN Capital Budget - 2014' )
py.image.save_as(fig, 'mn-14-budget.png' )


Python可視化工具概述


打開這個連接,能夠在線看一下效果:https://plot.ly/~chris1610/12,還有其它更多例子在這個網站。

所見所得的圖表,很是吸引人,並且高度互動。得益於文檔和python API,起步入門是很容易的,我喜歡這個最終產品。總結 在Python生態系統中繪圖,既有優勢,也有缺點。好處是,有不少工具可用。缺點也是,有不少工具可用。找到適合本身的,取決於你需達到的目標。有時候,你須要試用這些工具後,才知道哪一個適合你。咱們不能判定哪一個好,哪一個很差。 下面是我總結的見解: 一、Pandas對於簡單繪圖,能夠隨手用,但你須要學習定製matplotlib。 二、Seaborn能夠支持更多複雜的可視化方式,但仍然須要matplotlib知識,上色功能是個亮點。 三、ggplot有不少功能,但還須要發展。 四、bokeh是一個有效的工具,若是你想創建一個可視化的服務器,這幾乎是殺雞用牛刀的事情。 五、pygal獨立運行,可用來生成交互的svg圖表和png文件。它沒有基於matploglib的方案那樣靈活。 六、Plotly可生成大多數可交互圖表。你能夠保存爲離線文件,而後創建豐富的基於web的可視化。

相關文章
相關標籤/搜索