資料科學
大型綜合巡天望遠鏡(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