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