這學期(2018學年春季學期)我教授了一門關於資料視覺化的資料科學碩士課程。我們的資料科學碩士專案是一個為期15個月的強化專案,這個專案已經成功地培養了許多優秀的資料科學家。
該專案的學生背景多元,並且他們在上這門課前都對R和Python有了很深入的理解。透過各種課程的學習,他們已經能夠熟練使用ggplot2和matplotlib,為學習大型多變數資料視覺化打下了基礎。
作為一個資料視覺化的研究者,我想要介紹所有那些在資料視覺化領域湧現的絕妙技術。因此,我的課程的其中一部分將會是基於研究論文,線上視覺化和d3示例的講座。
Python中的資料視覺化
現在大部分的資料視覺化研究都是透過D3進行的。遺憾的是,我只有短短8周跟學生相處的時間,所以我只能專注於講授理論和實踐相結合的內容來幫助他們成為資料科學家。雖然學生樂於使用視覺化技術探索並解釋問題,但他們中的大多數對於使用D3建立美麗的自定義視覺化不太感興趣。根據之前教授這門課的教授反饋來看,在這麼短的時間內教授D3是不可能的。
鑑於我自己對Python的熱愛和Python給學生帶來的舒適體驗,我決定向他們介紹Python中神奇的(我希望是的!)軟體包,它們可以實現所有我向學生展示的內容。
Seaborn的靜態視覺化
鑑於我過去使用seaborn的經驗,我很高興能夠向學生介紹seaborn產生的美麗的視覺化圖案。 他們已經有了使用matplotlib的經驗,所以學習seaborn時很容易,且優勢巨大。 學生能夠製作散點圖(雙變數和多變數),swarmplots,小提琴圖,條形圖,箱形圖和帶有刻面的直方圖。他們瞭解到,使用大型資料集生成swarmplots非常耗時,而基於摘要的圖(如小提琴圖)是更好的選擇。
用Bokeh或Plot.ly實現互動式視覺化
雖然seaborn能夠產生美麗的視覺化圖形,但它們都是靜態的。我希望學生體驗使用互動技術(如梳理,過濾,縮放和懸停)的好處。為此,我介紹了視覺化庫Bokeh和Plot.ly,利用它們可以輕鬆實現互動式資料視覺化。對於時間序列視覺化分配,學生可以選擇使用Bokeh或 plot.ly來實現多線圖(multi line charts),熱圖(heatmaps),動畫氣泡圖(animated bubble charts)等。
視覺化樹,圖和網路
在討論分層資料視覺化的技術時,我很高興地展示樹狀圖視覺化技術,並將其與節點連結圖進行了比較。遺憾的是,當我深入挖掘時,卻沒有找到實現多級樹狀圖的方法L 即使在匯入了squarify庫之後,你也只能在Python中生成一個一級樹狀圖!
使用squarify包只能生成一級樹圖
圖片來源:The Python Graph Gallery
精彩的networkx軟體包可以被用來分析圖形和網路。 然而,網路視覺化只能透過matplotlib或igraph或plotly來實現(請參閱使用plotly實現網路視覺化的教程)。igraph有許多不同的選項可以幫助使用者嘗試配置圖形,但是設定起來很不方便,因此許多學生在使用時遇到了問題。另一方面,plot.ly使用順暢,但在自定義網路圖方面幾乎沒有選擇。
地學視覺化
鑑於建立互動式對映圖是資料視覺化的重要組成部分,我對於找到能夠建立等值區域圖(choropleth maps),符號圖(symbol maps),統計圖(cartograms),交通圖(transit maps)甚至流向圖(flow maps)的軟體包更有信心。以下是我在Python中發現的地學視覺化庫:
Plot.ly允許您建立等值區域圖和符號圖,但幾乎無法控制圖的建立過程。
geoplotlib是一個小巧好用的軟體包,它建立在pyglet上,但它有點不穩定,經常崩潰。它使用OpenStreetMap圖塊,甚至允許基於動畫的空間資料視覺化。我很喜歡這個包,因為它裡面有一些簡潔好用的示例。
geoplot看起來很完美,其中有一些很棒的例子,但是我和我們的學生都無法安裝它。鑑於我們大多數人都不使用conda,我們應該注意這個警告 - “請謹慎使用,因為這可能不適用於Windows,並且可能無法在OSX和Linux上執行。”
Cartopy和geopandas+matplotlib只生成靜態視覺化,所有我還沒有嘗試過。
文字視覺化
我們學習了很多關於各種文字視覺化技術的知識,例如標籤雲(tag clouds)(例如wordle),文件散(docubursts),平行標籤雲(parallel tag clouds),短語網路(phrase nets)和單詞樹(word trees),還介紹了主題探索和情感視覺化技術。
不幸的是,除了word_cloud軟體包之外,對於想要在Python中實現單個文件或大型文字集視覺化的人來說,幾乎沒有其他選項。
Web的互動式資料視覺化
當前,Bokeh和Plot.ly Dash是建立允許多檢視刷選和過濾的互動式儀表盤的主要選擇。Bokeh的示例非常少,而Plot.ly Dash對慣於在Python中建立視覺化的使用者來說則非常重要。
Plot.ly Dash是基於Flask,Plotly.js和React.js構建的,同時增加了建立同步多視點視覺化的障礙。我班上的一些學生團隊使用Plot.ly Dash完成期末專案,但他們學得非常快。以下連結中是一個關於Ryan Campa和Shikhar Gupta透過Dash實現TED演講資料集視覺化的簡單案例。
http://campa-gupta.herokuapp.com/
Altar會是理想的選擇嗎?
隨著課程的進展,出現了一些關於Python 和 Vega組合成為Altair的訊息!我欣喜地得知我所使用的Vega來自UW Interactive Data Lab。Jim Vallandingam出色的“Altair簡介”教程是一個很好的起點。
Altair的主要開發人員Jake VanderPlas最近釋出了他的Python筆記本和PyCon 2018影片的連結。我從那以後一直在玩它,我非常喜歡它!資料科學家們希望探索他們的資料並建立視覺化圖形來從內部和外部解釋它們。我希望它能滿足資料科學家的需求。
Altair示例庫中的互動式視覺化示例集合
圖片來源:Altair Gallery
總結
資料科學家喜歡使用Python中的視覺化庫和包,我希望像Altair這樣的工具就是最終的實現途徑。諸如plotly,seaborn,bokeh,geoplotlib等軟體包將繼續發展,並擁有更多功能。透過Python實現的互動式資料視覺化(用於Web)將有一個更光明的未來,我們期待這一天!
致謝
感謝Sophie Engle教授提供的講座筆記,讓我在整個學期的講課都很順利。感謝Shirley Wu和Robert Gove為早期的草稿提供了極有價值的反饋。
原文標題:
We need more Interactive Data Visualization tools (for the Web) in Python
原文連結:
https://medium.com/@alark/we-need-more-interactive-data-visualization-tools-for-the-web-in-python-ad80ec3f440e