內(nèi)容摘要:在前面講Python的時(shí)候到踏,我們談到過Jupyter筆記本,為什么今天要再專門討論一次呢昵济?因?yàn)檫@個(gè)工具太重要了智绸,除了是Python技術(shù)傳播和應(yīng)用的重要幫手,還可以為實(shí)現(xiàn)可重復(fù)科學(xué)研究提供技術(shù)保障访忿。JupyterNB是開源陣營(yíng)中的優(yōu)秀代表瞧栗,作為一款編輯器除了支持Python也可以支持R,現(xiàn)在已經(jīng)成為專業(yè)工具包教學(xué)與科研中必不可少的工具海铆。
1迹恐、Jupyter技術(shù)體系
Jupyter提供一套開源工具的生態(tài)系統(tǒng)來方便交互式計(jì)算和數(shù)據(jù)分析。在此分析中卧斟,讓用戶直接參與到計(jì)算過程(通過執(zhí)行代碼來理解一個(gè)問題殴边,并迭代式地改進(jìn)自己的方法)是Jupyter項(xiàng)目的初心。
最初的Jupyter是從IPython項(xiàng)目演變而來的珍语,2001年這個(gè)作為Notebook的萌芽找都,期望通過交互式的Python和科學(xué)Python生態(tài)系統(tǒng),讓研究結(jié)果可以無障礙地被共享廊酣。對(duì)于用戶可以專注于使用Python進(jìn)行交互式計(jì)算來應(yīng)對(duì)科學(xué)計(jì)算的需求和工作流程能耻。
為了更好地不依賴于操作系統(tǒng),不受平臺(tái)限制亡驰,Jupyter NB基于Web環(huán)境構(gòu)建晓猛,也就是你有瀏覽器就可以使用,無論本地還是遠(yuǎn)程凡辱。以Jupyter開頭的工具也是越來越多(https://github.com/jupyter
)戒职,除了Jupyter Notebook,還有:
- Jupyter Lab:下一代的Notebook透乾,提供一體化環(huán)境洪燥,有點(diǎn)IDE的感覺磕秤,包括:Notebook,Shell捧韵,Markdown編寫等市咆。
- Jupyter Hub:解決多用戶使用和認(rèn)證的問題,就是輸入密碼才能用再来。
- Jupyter Kernel Gateway:讓你的nb代碼秒變微服務(wù)接口的神器蒙兰。
- Jupyter Enterprise Gateway :支持分布式計(jì)算和多服務(wù)調(diào)度的私有云解決方案。
- mybinder:提供一鍵式部署的GitHub存儲(chǔ)庫(kù)芒篷,用來存放自己的代碼搜变、數(shù)據(jù)和notebook文件。
- Binderhub:下一代的binder针炉,與JupyterHub相配合挠他,提供從容器在云端部署的解決方案。
2篡帕、有代碼就出結(jié)果的即時(shí)體驗(yàn)
Jupyter NB的定位與Spyder和PyCharm這類的IDE不同殖侵,它主要是給用戶提供一個(gè)工作環(huán)境,更聚焦與解決問題赂苗。而不是開發(fā)類庫(kù)愉耙,搭建架構(gòu)贮尉。如果你是一個(gè)用戶拌滋,而不是開發(fā)者,哪直接選擇nb吧猜谚!NB猶如一個(gè)word文檔败砂,在里面你只要輸入計(jì)算公式,馬上就可以給出顯示結(jié)果魏铅。同時(shí)昌犹,你還可以在上面加入任何標(biāo)注和解釋。
其特有的ipynb文件览芳,可以保存成pdf斜姥,html甚至還原為py代碼。下圖是我的一個(gè)筆記本打開效果(圖1)沧竟。你之前運(yùn)行得到的結(jié)果都在上面铸敏,這對(duì)于科學(xué)研究用戶非常重要,因?yàn)橹苯幼x論文悟泵,無法知道每一步細(xì)節(jié)杈笔,但是看NB就能看到每一個(gè)參數(shù)是怎么設(shè)置的,這對(duì)于可重復(fù)的科學(xué)研究至關(guān)重要糕非!
可能有些小盆友注意到蒙具,我的界面不太一樣球榆,左上角工具欄的圖標(biāo)怎么沒見過(這是一個(gè)叫Zenmode的沉浸式編程模式)?感興趣的往下看...
3禁筏、必會(huì)的NB應(yīng)用技巧
Jupyter NB功能雖好持钉,但是比如內(nèi)存變量查看,代碼格式化等還是與在IDE中的體驗(yàn)差了點(diǎn)融师。這時(shí)候你要知道NB的擴(kuò)展功能右钾,即nbextension。首先我們看怎么安裝旱爆,同樣打開一個(gè)python的虛擬環(huán)境舀射,命令行模式下。
安裝命令
pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
#啟用 nbextensions
jupyter nbextension enable codefolding/main
安裝后怀伦,應(yīng)該看到如下圖2所示的效果脆烟,里面提供了上百種小擴(kuò)展。根據(jù)你的需要安裝擴(kuò)展(因?yàn)镴upyter是基于web的房待,所以很多Javascript的技術(shù)都能應(yīng)用邢羔,可擴(kuò)展的空間非常大)。
安裝完插件后桑孩,再打開一個(gè)ipynb文件后拜鹤,你會(huì)發(fā)現(xiàn)編輯器不一樣啦,比如我日常用的記事本效果是這樣地(圖3)流椒。變量編輯(1)敏簿,代碼長(zhǎng)短位置提示(2)、大綱視圖(3)都有宣虾。
一句話總結(jié):Jupyter notebook和Lab都是非彻咴#活躍的開源項(xiàng)目,集中了很多先進(jìn)的web技術(shù)绣硝,比如ArcGIS這類的平臺(tái)都推出了基于它的NB套件蜻势。如果你還不會(huì),我想Jupyter值得你花一些時(shí)間去學(xué)習(xí)鹉胖!