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