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