根據使用者的意圖重新考慮Visual Dataframe工作流程
> Photo by Luis Tosta on Unsplash
"探索性資料分析是一種態度,一種靈活性,一種願意尋找那些我們認為不存在的事物以及我們認為存在的事物的意願。"—約翰·圖基(John W Tukey)
資料科學中資料視覺化的重要性和必要性不能得到足夠的重視。圖片價值一千個單詞的事實可以適當地應用於與資料相關的任何專案的生命週期。但是,很多時候,實現這些視覺化的工具不夠智慧。這實質上意味著,儘管我們有數百個視覺化庫,但其中大多數都需要使用者編寫大量程式碼才能繪製單個圖形。這將焦點轉移到視覺化的機制上,而不是資料內的關鍵關係上。
如果有一種工具可以透過向用戶推薦相關的視覺化檔案來簡化資料探索,那該怎麼辦?鎮上有一個名為Lux的新圖書館,它是為解決這些問題而開發的。
本文基於@Doris lee在2020年上升營期間在勒克斯(Lux)上的演講。特別感謝Doris使我能夠使用幻燈片中的資源和影象。
高效資料探索的當前挑戰如今,資料分析師可以使用多種工具進行資料探索。儘管互動式Jupyter筆記本可以進行迭代實驗,但還有強大的BI工具,如Power BI和Tableau,僅需單擊即可實現高階瀏覽。但是,即使這些功能強大的工具問世,仍然存在阻礙資料探索流程的挑戰。當我們從思考的問題轉向發現可行的見解時,尤其如此。讓我們看一下資料分析師當前面臨的三個主要可識別障礙:
1.程式碼與互動工具之間的脫節。> Image from the presentation with permission from the author
2.繪圖需要大量程式碼和事先決定> Image from the presentation with permission from the author
其次,要建立視覺化,我們首先需要考慮所有規格的視覺化外觀。然後,我們需要將所有這些規範詳細資訊轉換為程式碼。上圖顯示瞭如何在兩個流行的python庫(Matplotlib和Plotly)中需要大量程式碼,僅輸出一個條形圖。這又會影響資料瀏覽,尤其是當用戶對所要查詢的內容只有模糊的想法時
3.試錯是繁瑣而壓倒性的> Image from the presentation with permission from the author
每個EDA都需要連續不斷的反覆試驗。使用者必須先嚐試多種視覺化效果,然後才能確定最終的視覺化效果。分析人員有可能會錯過其資料集中的重要見解。另一個常見的問題是,分析人員可能不知道應該對資料執行哪些操作才能獲得所需的見解,並且常常會迷失方向或陷入分析之中。
人們如何推理和思考他們的資料與實際需要對資料做些什麼才能獲得這些見解之間存在明顯的差距。Lux是解決這些可能差距的一步。
LUX> Image from the presentation with permission from the author
Lux是一個Python庫,可透過使某些資料探查過程自動化來幫助使用者從其資料探查和發現有意義的見解。這是努力彌合程式碼與互動式介面之間的鴻溝。Lux具有一種意圖語言,允許使用者以草率的方式指定其分析意圖,並且它會自動推斷未指定的細節並確定適當的視覺化對映。
Lux的目標是,即使使用者對所要查詢的內容不瞭解,資料科學家也可以更輕鬆地探索他們的資料。
> Image from the presentation with permission from the author
· Lux將互動式視覺化的功能直接帶入Jupyter筆記本,以彌合程式碼和互動式介面之間的鴻溝。
· Lux具有強大的意圖語言,允許使用者指定其分析興趣以降低程式設計成本。
· Lux會自動向使用者提供資料框的視覺化建議。
現在,我們對Lux如何嘗試插入使用者在瀏覽資料時遇到的常見問題有了一個清晰的認識。現在讓我們來看一個如何使用Lux庫的示例。由於該想法只是為了提供一個快速演示,因此我將使用一個非常簡單的示例。一旦有了一個不錯的主意,便可以將其與您選擇的資料集結合使用。
案例研究:分析Palmer Penguins資料集> Artwork by @allison_horst
Palmer企鵝資料集目前已成為資料科學界的最愛,並且是過度使用的Iris資料集的直接替代品。該資料集包含344個企鵝的資料。資料由克里斯汀·高曼(Kristen Gorman)博士和南極洲帕爾默站(Palmer Station)收集並提供。首先,安裝並匯入Lux庫。您可以透過活頁夾在Jupyter筆記本中繼續閱讀本教程。
安裝pip install lux-api#Activating extension for Jupyter notebookjupyter nbextension install --py luxwidgetjupyter nbextension enable --py luxwidget# Activating extension for Jupyter labjupyter labextension install @jupyter-widgets/jupyterlab-managerjupyter labextension install luxwidget
有關將Lux與SQL引擎配合使用的更多詳細資訊,請閱讀該文件,該文件非常強大並且包含許多動手示例。
匯入必要的庫和資料集Lux庫安裝完成後,我們將其與資料集一起匯入。
import pandas as pdimport luxdf = pd.read_csv('penguins_size.csv')df.head()
> Image by Author
df.info()
> Image by Author
資料集中缺少一些值。讓我們擺脫這些。
df = df.dropna()
現在,我們的資料已儲存在記憶體中,我們都將著眼於Lux如何為我們簡化EDA流程。
具有Lux的EDA:支援可視資料框工作流程> Image from the presentation with permission from the author
df
當我們打印出資料框時,我們看到預設的Pandas表顯示。我們可以切換它以獲得由Lux自動生成的一組建議。
> Image by Author
lux中的建議由三個不同的選項卡組織,分別表示使用者可以在其探索中採取的後續措施。
"相關性"選項卡:顯示按最高相關性與最低相關性排序的定量屬性之間的一組成對關係。
> Image by Author
我們可以看到企鵝鰭的長度與體重呈正相關。企鵝的腔長和深度也顯示出一些有趣的模式,並且似乎存在負相關。具體來說,"門廳"是鳥嘴的上脊。
> Image by Author
分佈選項卡顯示了一組單變數分佈,其排列順序從斜度最大到斜度最小。
> Image by Author
事件選項卡顯示了一組可以從資料集中生成的條形圖。
> Image by Author
此選項卡顯示了三種不同的企鵝-Adelie,Chinstrap和Gentoo。還有三個不同的島嶼,分別是Torgersen,Biscoe和Dream。男性和女性物種都已包含在資料集中。
基於意圖的建議除了基本建議外,我們還可以指定分析意圖。比方說,我們想找出根莖長度隨物種變化的方式。我們可以在此處將意圖設定為['culmen_length_mm','species']。再次列印資料框時,我們可以看到建議已轉向與我們指定的意圖相關的內容。
df.intent = ['culmen_length_mm','species']df
在下圖的左側,我們看到的是與所選屬性相對應的Current Visualization。在右側,我們具有增強功能,即當我們向當前選擇中新增屬性時會發生什麼。我們還有"過濾器"選項卡,可在固定選定變數的同時新增過濾器。
> Image by Author
如果仔細觀察物種內部的相關性,則莖長度和深度是正相關的。這是辛普森悖論的經典例子。
> Image by Author
最後,透過檢視鰭狀肢的長度與標本的長度,可以很清楚地將這三個物種分開。
> Image by Author
從Widget匯出視覺化Lux還使匯出和共享生成的視覺化檔案變得非常容易。可以將視覺化檔案匯出為靜態HTML,如下所示:
df.save_as_html('file.html')
我們還可以透過屬性建議訪問為資料框生成的建議集。輸出為字典,由推薦類別的名稱作為關鍵字。
df.recommendation
> Image by Author
將視覺化匯出為程式碼我們不僅可以將視覺化匯出為HTML,還可以匯出為程式碼。下面的GIF顯示瞭如何在"發生"選項卡中檢視第一個條形圖的程式碼。然後可以將視覺化檔案匯出到Altair中的程式碼中,以進行進一步編輯或作為Vega-Lite規範。可以在文件中找到更多詳細資訊。
> Image by Author
資源和動手練習上面的演示只是一種簡單的入門方法。Lux的Github儲存庫包含許多資源以及有關如何使用Lux的互動式活頁夾筆記本。這可能是一個很好的起點。此外,還有詳細的文件。https://github.com/lux-org/lux-binder
結論與後續步驟在以上文章中,我們看到了如何透過使用Lux來完全轉換Jupyter筆記本中的資料分析工作流。Lux提供了更多的視覺豐富性,以鼓勵有意義的資料探索。Lux仍在積極開發中,其維護者希望從正在使用或可能對使用Lux感興趣的使用者那裡聽到訊息。