在智利北部安第斯山脈高達(dá)2700米的塞隆·帕切翁山巔,美國的“大型綜合巡天望遠(yuǎn)鏡”(LSST)正在緊鑼密鼓地施工著。到2022年,也就是LSST正式投入使用的時(shí)候,它將把30億像素的相機(jī)對(duì)準(zhǔn)太空,每晚完成30千兆的拍攝任務(wù),這會(huì)是人類研究宇宙暗物質(zhì)的一大基礎(chǔ).
而為了處理望遠(yuǎn)鏡每天自動(dòng)生成的TB級(jí)數(shù)據(jù),天文學(xué)家們開始轉(zhuǎn)向數(shù)據(jù)科學(xué),把數(shù)據(jù)科學(xué)家們熟悉且常用的一種工具——Jupyter notebook,納入天文學(xué)研究。
Jupyter是一個(gè)免費(fèi)的、開源的、交互式的網(wǎng)絡(luò)工具,它是一個(gè)計(jì)算筆記本,允許研究人員把軟件代碼、計(jì)算輸出、注釋性文本和多媒體資源集中在一個(gè)文檔中。就歷史來看,計(jì)算筆記本已經(jīng)在世上存在了幾十年,但是直到幾年前,以Jupyter為代表的notebook才開始被技術(shù)人員廣泛使用,并大受歡迎。
當(dāng)然,Jupyter的流行離不開用戶和開發(fā)者社區(qū)的共同努力。經(jīng)過架構(gòu)的重新設(shè)計(jì)和其他優(yōu)化,現(xiàn)在它已經(jīng)支持幾十種編程語言——這也反映在名稱變化上(Jupyter notebook原名IPython Notebook)。根據(jù)公司聯(lián)合創(chuàng)始人Fernando Pérez的說法,現(xiàn)在的名字Jupyter是數(shù)據(jù)科學(xué)常用的3種語言的組合:Julia(Ju)、Python(Py)和R。
上個(gè)月,代碼托管平臺(tái)GitHub發(fā)布了一份分析,指出當(dāng)前公開的Jupyter notebook數(shù)量大約在250萬份,而在2015年,這個(gè)數(shù)字只有不到20萬份。Pérez認(rèn)為這里面有應(yīng)用程序、網(wǎng)絡(luò)軟件經(jīng)過不斷升級(jí)迭代,性能超越競(jìng)品的原因,但更多應(yīng)該歸功于Python在科研領(lǐng)域的大面積應(yīng)用和數(shù)據(jù)科學(xué)的成熟——尤其是當(dāng)人們進(jìn)行科學(xué)研究和數(shù)據(jù)分析時(shí),發(fā)現(xiàn)遠(yuǎn)程數(shù)據(jù)過于龐大,超出了筆記本電腦的訪問上限,如LSST。
在很多情況下,把計(jì)算機(jī)接入數(shù)據(jù)比把數(shù)據(jù)輸入計(jì)算機(jī)要容易得多。Jupyter是基于云的,只要你告訴我你的數(shù)據(jù)在哪里,我就馬上能在那兒給你臺(tái)計(jì)算機(jī)。——Fernando Pérez
對(duì)于數(shù)據(jù)科學(xué)家來說,Jupyter已經(jīng)成為事實(shí)上的標(biāo)配。而在見識(shí)了這種工具之后,華盛頓大學(xué)的天文學(xué)家、負(fù)責(zé)協(xié)調(diào)LSST數(shù)據(jù)管理團(tuán)隊(duì)的馬里奧·尤里奇也表示:“我從未見過這么快的遷移,真的是太棒了!”
數(shù)據(jù)探索
類比來看,計(jì)算筆記本實(shí)際上就是用于科學(xué)計(jì)算的實(shí)驗(yàn)室筆記本,只不過上面寫的既不是用凝膠電泳分離DNA,也不是實(shí)驗(yàn)室指南,而是嵌入代碼、數(shù)據(jù)和文本來記錄“實(shí)驗(yàn)者”的計(jì)算方法。公司聯(lián)合創(chuàng)始人Brian Granger把它稱為“計(jì)算敘事”——一個(gè)允許研究人員用分析、假設(shè)和猜想來補(bǔ)充代碼和數(shù)據(jù)的文件。
這種工具能幫數(shù)據(jù)科學(xué)家極大地推進(jìn)數(shù)據(jù)探索。notebook是交互式的,用戶可以在這種環(huán)境中運(yùn)行代碼、查看發(fā)生的情況,然后重復(fù)這種發(fā)生在數(shù)據(jù)和研究人員之間的循環(huán)和迭代。這是人和數(shù)據(jù)對(duì)話的一種途徑,它允許用戶記錄這些對(duì)話,建立起與主題、理論,數(shù)據(jù)和結(jié)果之間更強(qiáng)大的聯(lián)系。當(dāng)然,Jupyter不是承載對(duì)話的唯一平臺(tái)——它的前身IPython Notebook是一種交互式Python解釋器,也可以充當(dāng)對(duì)話平臺(tái)。
此外,研究人員還可以用notebook為他們的軟件創(chuàng)建教程或交互式手冊(cè),這也是哈佛大學(xué)系統(tǒng)神經(jīng)科學(xué)家Mackenzie Mathis所做的嘗試。她和她的團(tuán)隊(duì)曾為神經(jīng)科學(xué)研究開發(fā)了一個(gè)代碼庫,這允許他們把notebook作為手稿和教具用于教學(xué)。而根據(jù)Barba——一名從2013年起就在每門課程中都用notebook教學(xué)的教授——的體驗(yàn),她認(rèn)為IPython Notebook是用于教授科學(xué)和工程計(jì)算的殺手級(jí)應(yīng)用程序,使她的學(xué)生能從中高效汲取課程知識(shí)。
愛我所愛
提到編程,編程語言最能挑動(dòng)技術(shù)人員神經(jīng)。Jupyter notebook有兩個(gè)組件。用戶在前端網(wǎng)頁中的矩形單元格輸入編程代碼或文本,然后,瀏覽器會(huì)將該代碼傳遞給后端“內(nèi)核”,由后端運(yùn)行代碼并返回結(jié)果。根據(jù)Pérez的統(tǒng)計(jì),現(xiàn)在Jupyter內(nèi)核的數(shù)量已經(jīng)達(dá)到100多個(gè),支持上百種編程語言。這是個(gè)極大的優(yōu)勢(shì),因?yàn)橥ǔG闆r下,每個(gè)notebook只能運(yùn)行一個(gè)內(nèi)核和一種語言,即便存在變通的方法,也只局限在Python、Julia、R和Fortran這4種之間。
重要的是,Jupyter的內(nèi)核不需要駐留在用戶的計(jì)算機(jī)上。未來,當(dāng)LSST的天文學(xué)家用Jupyter notebook分析數(shù)據(jù)時(shí),他們的代碼會(huì)在伊利諾伊州運(yùn)行,由超級(jí)計(jì)算機(jī)提供普通臺(tái)式機(jī)無法比擬的龐大算力。notebook也可以在云中運(yùn)行,例如谷歌的Colaboratory項(xiàng)目就為Jupyter提供了一個(gè)以谷歌為主題的前端,它允許用戶進(jìn)行協(xié)作、利用Google Cloud的代碼,并將文檔保存在Google Drive上。
今年1月,Jupyter推出下一代產(chǎn)品JupyterLab,可作為獨(dú)立軟件包或作為免費(fèi)的Anaconda科學(xué)計(jì)算環(huán)境的一部分。
Jason Grout是彭博社的軟件工程師,也是JupyterLab團(tuán)隊(duì)的成員之一。在他眼里,JupyterLab是Jupyter notebook的“下一代Web界面” ——它擴(kuò)展了原先notebook的概念,把文本編輯器、瀏覽器、數(shù)據(jù)文件查看器、文本編輯器、命令控制臺(tái)及其他自定義的內(nèi)容以標(biāo)簽的形式排列在工作區(qū)中。一般Jupyter notebook會(huì)為每個(gè)notebook分配了各自的內(nèi)核,而JupyterLab則是創(chuàng)建了一個(gè)允許共享這些組件的計(jì)算環(huán)境。這意味著用戶可以在一個(gè)窗口中查看notebook,在另一個(gè)窗口中編輯所需的數(shù)據(jù)文件,并在第三個(gè)窗口中記錄所有運(yùn)行的命令 ——所有這些都在一個(gè)Web瀏覽器界面中進(jìn)行。
用戶還可以自定義JupyterLab以適應(yīng)他們的工作流。它建立在可擴(kuò)展系統(tǒng)之上,能提供新的主題、文件編輯器和查看器,甚至可以顯示基因組比對(duì)或地理空間數(shù)據(jù)等內(nèi)容。為了方便用戶自定義擴(kuò)展,Pérez還自制了一個(gè)教學(xué)視頻,演示了如何創(chuàng)建了一個(gè)能顯示3D大腦成像數(shù)據(jù)的組件。
這是一個(gè)完全[神經(jīng)科學(xué)]領(lǐng)域的特定工具,顯然,Jupyter團(tuán)隊(duì)不需要編寫這些東西,但我們提供了正確的標(biāo)準(zhǔn),然后社區(qū)可以在24小時(shí)內(nèi)學(xué)會(huì)怎么做并自己寫一個(gè)。
此外,依靠另兩個(gè)工具,Jupyter的可用性也得到了大大加強(qiáng)。其中一個(gè)是JupyterHub,這項(xiàng)服務(wù)允許機(jī)構(gòu)向大量用戶提供Jupyter notebook。比如加州大學(xué)伯克利分校就用這種方法確保所有學(xué)生在所有課程下都擁有相同的計(jì)算環(huán)境。“我們不可能為800名學(xué)生一一提供IT支持,幫助他們?cè)诎惭b失敗時(shí)debug,這是不可行的。”
另一個(gè)是Binder,一種允許用戶在瀏覽器中使用GitHub上的Jupyter notebook、無需安裝軟件或任何編程庫的開源服務(wù)。
值得關(guān)注的問題
盡管Jupyter notebook通過簡(jiǎn)化代碼促進(jìn)代碼復(fù)現(xiàn),但作為使用者,掌握 notebook的正確用法還是很重要的。
今年早些時(shí)候,艾倫人工智能研究所的研究工程師Joel Grus在Jupyter開發(fā)者大會(huì)上發(fā)表了題為“I don’t like notebooks”的演講。他指出,當(dāng) notebook沒有按預(yù)期運(yùn)行時(shí),程序員們往往會(huì)感到手足無措,但出現(xiàn)這個(gè)問題的原因很可能是他們沒有按順序去運(yùn)行代碼塊。Jupyter notebook的簡(jiǎn)便從某種程度上來說是助紂為虐,它難以邏輯地組織代碼,將其分解為可重用的模塊并進(jìn)行開發(fā)測(cè)試,以確保代碼正常工作。所以被慣壞的用戶寫出來的代碼也越來越混亂不清。
Grus承認(rèn),雖然這些都不是難以解決的問題,但 notebook在執(zhí)行代碼時(shí)確實(shí)應(yīng)該注意遵守規(guī)則,比如 把分析代碼移動(dòng)到可以從 notebook中調(diào)用的外部文件、在notebook頂部定義關(guān)鍵變量以及 定期重新啟動(dòng)內(nèi)核并從頭開始運(yùn)行notebook。就像一名網(wǎng)友在Twitter上的打趣:“要么重新跑一遍,要么假裝什么都沒發(fā)生。”
這也是Barba每次用notebook給學(xué)生上課時(shí)會(huì)提醒的一點(diǎn):“從第一天起,我就對(duì)學(xué)生們說,你們可以用非線性的方式使用notebook,這能方便你們進(jìn)行探索,但強(qiáng)大功能背后是要打下更扎實(shí)的基礎(chǔ)。”
為了解決這個(gè)問題,一個(gè)可能有用的工具是Verdant,這是個(gè)能捕捉用戶歷史行為的插件。“作者構(gòu)建了一個(gè)擴(kuò)展,它允許用戶在里面部署靈活的工作流,同時(shí)捕獲用戶運(yùn)行的特定代碼、運(yùn)行順序和具體數(shù)據(jù)。”
谷歌軟件工程師兼Colaboratory團(tuán)隊(duì)成員Jake VanderPlas表示,Jupyter notebook就像錘子,它們很可能被誤用,也不適合所有領(lǐng)域,但對(duì)于數(shù)據(jù)探索和通信來說,notebook確實(shí)是個(gè)好工具。天文學(xué)界似乎非常認(rèn)同這個(gè)觀點(diǎn):“6年前,我們的計(jì)算機(jī)里完全不存在什么Jupyter notebook,但現(xiàn)在,每個(gè)人都愛它。”
-
python
+關(guān)注
關(guān)注
56文章
4783瀏覽量
84474 -
數(shù)據(jù)科學(xué)
+關(guān)注
關(guān)注
0文章
165瀏覽量
10046
原文標(biāo)題:Nature專欄:為什么數(shù)據(jù)科學(xué)家會(huì)選擇Jupyter
文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論