為什么Jupyter是數據科學家們實戰工具的首選?
Jupyter 是一款免費、開源的交互式 web 工具。研究人員可以利用該工具將軟件代碼、計算輸出、解釋文本和多媒體資源組合在一個文檔中。計算筆記本已經發展了幾十年,但是過去幾年里,Jupyter 特別受歡迎,更是成為數據科學家們實戰工具的***。個中原因如何?本文帶你一探究竟。
數據科學
大型綜合巡天望遠鏡(Large Synoptic Survey Telescope,LSST)坐落在智利安第斯山脈帕穹山脊,計劃 2022 年啟用。它將自動探測南方的天空,每晚產生數兆字節的數據。為了處理這些數據,天文學家將要用到一個熟悉且日益流行的工具——Jupyter notebook。
Jupyter 是一款免費、開源的交互式 web 工具,是一種計算筆記本(computational notebook)。研究人員可以利用它將軟件代碼、計算輸出、解釋文本和多媒體資源組合在一個文檔中。計算筆記本已經發展了幾十年,但是過去幾年里 Jupyter 特別受歡迎。因為它的架構經過重新設計,允許 notebook「說」幾十種編程語言,所以深受開發人員的喜愛。而根據其共同創始人 Fernando Pérez 的說法,這一點更體現在它的名字中:Jupyter——Julia ( Ju )、Python ( Py )、R。
對代碼共享網站 GitHub 的一項分析顯示,截至 2018 年 9 月,Jupyter 上公開的 notebook 超過了 250 萬份,而 2015 年這一數字僅為 20 萬左右。Pérez 表示,Gmail 和 Google Docs 等 web 軟件的改進是驅動其使用量增長的一個原因;Python 和數據科學的成熟也是其中一個原因,尤其是 notebook 可以輕松地訪問遠程數據,因為有些數據可能無法下載(比如 LSST 的數據)。針對 Jupyter 基于云的能力,Pérez 表示,很多情況下,把計算機移動到數據比將數據移到計算機內要容易得多。因為這種架構相當于告訴讀者數據在哪里,而且還提供了一臺電腦。
華盛頓特區喬治·華盛頓大學的機械和航空工程師 Lorena Barba 說,對于數據科學家來說,Jupyter 已經成為事實上的標準。而負責協調 LSST 數據管理團隊的西雅圖華盛頓大學天文學家 Mario Jurić則表示,「我從未見過這么快的遷移,真是太好用了!」
數據勘探
可計算的 notebook 本質上是用于科學計算的實驗室 notebook。比如說,研究人員沒有將 DNA 凝膠黏貼在實驗室協議旁邊,而是嵌入代碼、數據和文本來記錄他們的計算方法。圣路易斯·奧比斯波加州理工州立大學的 Jupyter 聯合創始人 Brian Granger 說,這種做法的結果是產生了「計算敘事」——一種允許研究人員用分析、假設和推測補充其代碼和數據的文件。
對于數據科學家而言,這種格式可以推動探索。Barba 表示,notebook 是一種交互式計算方式,在這種環境中,用戶可以執行代碼,觀察結果,修改并重復研究人員與數據之間的一種迭代對話。它并不是這種對話的唯一載體,交互式 Python 解釋器 IPython(Jupyter 前身 IPython Notebook 的創建基礎)也是一種載體。但 notebook 允許用戶記錄這些對話,并在「主題、理論、數據和結果之間建立更強大的聯系」。
研究人員還可以用 notebook 為其軟件創建教程或交互式手冊。哈佛大學的系統神經科學家 Mackenzie Mathis 對 DeepLabCut 就是這么做的。DeepLabCut 是其團隊為行為神經科學研究開發的一個編程庫。他們可以用 notebook 來準備手稿,或者作為教具。自 2013 年開始,Barba 就在她所教的每門課程中實施了 notebook。在 2014 年的一次主題演講中,她還講述了 notebook 讓學生以課堂無法比擬的方式互動地參與課程并從中受益的經驗。她說,「IPython notebook 確實是科學和工程教學計算的一個殺手級應用程序。」
說我的語言
Jupyter notebook 有兩個組件。在前后端網頁中,用戶在矩形輸入框中輸入編程代碼或者文本。然后瀏覽器把代碼輸送到后端內核,后端內核運行該代碼并把結果反饋回來。據 Pérez 統計,已經有超過 100 個 Jupyter 內核被創建,支持數十種編程語言。正常來說,每個 notebook 只能夠運行一個內核和一種語言,但存在工作區。例如,一個 Demo notebook,支持 Python、Julia、R 和 Fortran。
重要的是,內核不需要駐留于用戶的計算機。當 LSST 的未來用戶使用 Jupyter notebook 來分析數據時,代碼會在位于伊利諾斯州的超級計算機上運行,提供臺式機、筆記本無法比擬的算力。Notebook 也可以在云上運行。例如谷歌的 Colaboratory 項目,為 Jupyter notebook 提供了以谷歌為主題的前后端。它使得用戶能夠協作、運行利用谷歌云資源的代碼,例如圖處理單元,可以把文檔保存在谷歌 Drive 上。
Jupyter 的***版本是 JupyterLab,于 2018 年 1 月作為測試版發布,它既能作為獨立的安裝包使用,又能作為免費 Anaconda 科學計算環境的一部分使用。
Jason Grout 是加州舊金山金融服務公司 Bloomberg 的一名軟件工程師,也是 JupyterLab 團隊的一員。他將 JupyterLab 稱為 Jupyter notebook 的「下一代 web 接口」,它通過拖放功能以及文件瀏覽器、數據查看器、文本編輯器和命令控制臺擴展了人們熟悉的 notebook 的內涵。標準 Jupyter notebook 向每個 notebook 分配單獨的內核,而 JupyterLab 創建了一個允許這些組件共享的計算環境。因此,用戶可以在一個窗口中查看 notebook,在第二個窗口中編輯一份所需的數據文件,在第三個窗口中記錄所有的執行命令——所有窗口都在一個 web 瀏覽器接口中。
用戶也可以對 JupyterLab 進行調整,使其適合自己的工作流程。例如,內置查看器用于查看圖片、文本和 CSV 文件,但用戶也可以構建自定義組件。這些組件可以展示基因組比對、地理空間數據等。參加 Pérez 的一名學員甚至還創建了一個用來展示 3D 大腦成像數據的組件。他表示,「顯然,這完全是一個神經科學領域專用工具——Jupyter 團隊沒有必要寫這種東西。但我們提供了正確的標準,那個團隊就可以在 24 小時之內寫出一個來。」
還有兩種工具增強了 Jupyter 的用途。一個是 JupyterHub,這種工具允許機構向大量用戶提供 Jupyter notebook。Pérez 任教的加州大學伯克利分校的 IT 團隊已經部署了這樣一個中心,Pérez 利用該中心確保參加其數據科學課程的所有學生擁有相同的計算環境。他表示,「我們不可能管理 800 名學生的 IT 支持,幫助他們調試電腦,以及找出他們筆記本電腦安裝程序后無法運行的原因;這根本行不通。」
另一個工具是 Binder,這是一種開源服務,允許用戶在 web 瀏覽器中的 GitHub 上使用 Jupyter notebook,無需安裝軟件或任何編程庫。用戶也可以在谷歌云上執行 Jupyter notebook,通過在 GitHub 上 notebook 里的 URL 之前鍵入 https://colab.research.google.com/github 或使用 Code Ocean 商業服務。9 月份,Code Ocean 為其基于云的代碼共享和代碼執行服務推出了一個新的用戶接口,同樣也基于 Jupyter。
值得注意的問題
這種工具通過簡化代碼重用來實現計算再現性。但用戶仍需知道如何正確使用 notebook。
Joel Grus 是華盛頓州西雅圖艾倫人工智能研究所(Allen Institute for Artificial Intelligence)的一名研究工程師,今年年初,他在紐約 Jupyter 開發者大會上做了一場主題為「我不喜歡 notebook」(I don't like notebooks)的演講。他說,他見過 notebook 不按預期運行時編程者受挫的樣子,通常是因為他們無意中運行了無序的代碼單元。他指出,在 Jupyter notebook 中將代碼按邏輯整理出來非常困難,因此編程實踐體驗很差,它將代碼分解成可重用的模塊,并開發測試來確保代碼正常工作。
Grus 坦言,這些并非不可逾越的困難,但 notebook 在執行代碼時的確需要規則:例如,將分析代碼移到可以從 notebook 中調用的外部文件中,在 notebook 的頂部定義關鍵變量,定期重啟內核以及自上向下地運行 notebook。一位 Twitter 用戶打趣道:「你得重啟并運行所有程序,否則沒辦法用。」
這是 Barba 試圖灌輸給學生的一課。「上課***天我就向學生解釋說,他們可以以非線性的方式與 notebook 交互,這激發了他們巨大的探索能力,」她說。「但力量越大,責任越大。」
Verdant 可能是一種有幫助的工具,它是 Jupyter 里面一個可以捕捉用戶活動歷史的插件。「作者構建了一個擴展,可以實現靈活的用戶工作流程,同時捕捉執行的特定代碼,以什么順序以及在什么樣的特定數據上,」加州州立理工大學 Jupyter 團隊的成員 Carol Willing 表示。
Jake VanderPlas 是谷歌的一名軟件工程師,也是 Colaboratory 的成員之一,他表示,notebook 就像錘子一樣:他們可能被濫用,也并非適用于所有應用。但在數據探索和溝通方面,notebook 表現出色。天文學界似乎同意這種說法。「大約六年前,還沒有 Jupyter notebook,現在我們卻每天都在用它,」Jurić表示。
原文鏈接:https://www.nature.com/articles/d41586-018-07196-1
【本文是51CTO專欄機構“機器之心”的原創譯文,微信公眾號“機器之心( id: almosthuman2014)”】