Python是資料科學家愛用的分析用開發語言,但除了統計和數學函式庫以外,Python的資料視覺化函式庫也越來越豐富,號稱涵蓋各種常用函式庫的Python懶人包發行版本Anaconda,其解決方案架構師Jim Bednar最近詳細地整理出Python資料視覺化函式庫的整個生態系,要讓資料科學家了解Python資料視覺化處理的威力

在Python資料視覺化函式庫的生態系中,可分為幾個群組,這些群組都來自不同的起源,但主要可劃分為科學視覺化(SciVis)和資訊視覺化(InfoVis)兩塊函式庫。其中科學視覺化函式庫主要用來視覺化地理位置資料,相關函式庫有VisPy、glumpy、GR、Mayavi、ParaView、VTK和yt。主要是建構於OpenGL圖形標準之上,可以為規則或不規則資料,提供三維或是四維的物理程序圖形視覺化。這些函式庫發展早於HTML5支援的網頁應用程式,通常被用於工程或是科學環境中。

除了科學視覺化函式庫這個區塊,其他的函式庫都屬於資訊視覺化(InfoVis)函式庫的群組,專注於對任意空間的資訊視覺化,以兩個維度的抽象空間,使用軸和標籤解釋多維空間的資料。Jim Bednar提到,資訊視覺化函式庫還可以進一步細分成多個子群組,區分成Matplotlib、JavaScript、JSON或是WebGL等各類型。

Matplotlib具有長久的歷史,也是極受歡迎的的資訊視覺化函式庫,支援廣泛的2D繪圖類型以及輸出格式,Matplotlib發展也早於有HTML5的網頁應用程式,因此主要是使用像是Qt和GTK的桌面GUI工具包,功能重點在於繪製靜態圖像,以及互動式圖形的呈現上。Matplotlib提供部分3D支援,但比起學視覺化函式庫有更多的限制。

而多年Matplotlib發展以來,有多種工具建立在Matplotlib的2D繪圖功能之上,Jim Bednar將其歸類成特定類型資料的渲染引擎,例如熊貓、NetworkX、Cartopy以及yt,而也有像是ggplot、plotnine、HoloViews和GeoViews函式庫,提供高階的繪圖API。

在HTML5出現後,瀏覽器支援更豐富的互動功能,許多函式庫開始為網頁或是Jupyter Notebooks提供2D互動圖形功能,無論是自定義Bokeh和Toyplot的函式庫,或是包裝既有的繪圖函式庫D3成更容易使用的函式庫的Plotly和bqplot。Jim Bednar提到,也由於D3這樣的JavaScript函式庫已經發展成熟,可以簡單地為任何語言包括Python產生JavaScript圖形,透過Altair舊能以JSON移植完整的圖形,並整合到許多類型的工具之中。

另外,對網頁應用程式很重要的WebGL技術,也能提供網頁豐富的繪圖功能,就像HTML5用於2D JavaScript繪圖的方式一樣,WebGL標準在瀏覽器和Jupyter Notebooks中,也可以實現互動3D體驗。Jim Bednar認為,雖然three.js、vtk.js或是regl,這些基於網頁3D的方法都沒有達到桌面科學視覺化函式庫的深度,但是因為跟Jupyter Notebooks良好整合,可以透過網頁和遠端分享,大幅增加了便利性。他也提到,雖然WebGL工具與科學視覺化工具有部分重疊,但性質還是偏向資訊視覺化領域。

不同的函式庫有適合不同的使用情境,Jim Bednar將用途歸類成6大類。幾乎所有資訊視覺化函式庫都能良好的製作統計圖,包括散點圖、線、面積、長條圖和直方圖,但表現較傑出的有Seaborn、bqplot、Altair、ggplot2和plotnine。圖像、規則網格和矩形網格,開發者可以使用Bokeh、Datashader、HoloViews、Matplotlib和Plotly,大多數科學視覺化函式庫也都有支援。

不規則的二維網格包括三角形網格,可以使用學視覺化函式庫以及Matplotlib、Bokeh、Datashader和HoloViews。無論是Matplotlib結合Cartopy,或是GeoViews、ipyleaflet與Plotly,都能用來繪製地理資料。網路(Networks)與圖(Graphs)則能使用NetworkX、Plotly、Bokeh、HoloViews以及Datashader。在3D網格或散點圖,則要使用Plotl、Matplotlib、HoloViews和ipyvolume,科學視覺化函式庫也都有良好的支援。

此外,不同函式庫也提供不同的介面,Jim Bednar將之區分為5大類,大多數函式庫都提供無頭操作,以生成靜態圖形,而像是科學視覺化函式庫、Matplotlib和Vaex,都可以創建特定作業系統的GUI視窗,另外,大多數的JavaScript和JSON的資料視覺化函式庫,都可以在沒有伺服器的情況下,產生互動式繪圖,透過電子郵件或發布到不支援Python的網頁伺服器上。

熱門的Jupyter Notebook受到廣大的資訊視覺化函式庫支援,大多數視覺化函式庫都能夠和Jupyter Notebook互通使用,開發者特別可以使用ipywidgets,以獲得更好的整合體驗。當然也有不少函式庫提供獨立的網頁儀表板和應用程序,Plotly圖表就能以Dash在獨立的應用程式中使用,Bokeh、HoloViews和GeoViews可以使用Bokeh Server進行部署。大部分的資訊視覺化函式庫都能使用Panel函式庫部署儀表板,包括Matplotlib、Altair、Plotly、Datashader、hvPlot、Seaborn、plotnine和yt都沒問題。

除了視覺化介面,資訊視覺化函式庫也都提供了豐富的API,讓不同類型的用戶都能建置適合的視覺呈現。Jim Bednar表示,這些函式庫提供的API都具有不同的背景和目標,適用於解決特定的任務,除了Matplotlib之外,大多數函式庫都支援一個或最多個備用API,開發者在解決問題之前,應該選擇適當的工具。

Matplotlib主要提供物件導向的API,開發者能掌握完全的控制和組合性,不過操作起來較為複雜。而ggplot、plotnine和Altair則屬聲明性圖形API,提供組合圖形的原語,讓開發者直覺地組成圖形。HoloViews和GeoViews則提供聲明性資料API,讓開發者能以高階的聲明和組合API,專注於標記、敘述和處理視覺化資料。

Jim Bednar提醒,大量且不同類型的Python資料視覺化函式庫,提供開發者大量建構圖形的不同方法,而這也意味著,開發者應該在深入投資開發資源前,先考慮這些差異帶來的影響。


Advertisement

更多 iThome相關內容