Jupyter notebook使用技巧大全
Jupyter Notebook 簡介
Jupyter Notebook是一款開源的web應用,它允許使用者創(chuàng)建和分享包含代碼,公式,可視化圖表和純文本的文檔,并支持多種編程語言的交互式計算,對于python用戶來講更是一款十分方便的代碼編寫工具。只需要通過web瀏覽器就可以很方便地進行數(shù)據(jù)清洗和轉(zhuǎn)換,數(shù)值模擬,統(tǒng)計建模,數(shù)據(jù)可視化,機器學習等。本文主要介紹Jupyter Notebook結(jié)合python的使用。
Jupyter Notebook安裝
Jupyter Notebook的前身是IPython Notebook,對python2,python3都有很好的支持。相比于Pycharm,它安裝更方便,代碼塊可以分開運行,支持MarkDown和LaTex,是對于數(shù)據(jù)分析人員特別友好的一個很“輕”的工具。通常可以在本地啟動Jupyter Notebook服務(wù),通過web瀏覽器使用它。實際工作中,有些公司會統(tǒng)一部署在線的Jupyter Notebook服務(wù),同樣通過相應的鏈接就可以訪問,支持直接連接Hive表,使用pyspark等。另外,在一些數(shù)據(jù)平臺上,例如kaggle,科賽等,很多代碼也是通過notebook的形式進行分享,代碼運行結(jié)果,圖像等能夠保留,因此具有較強的易讀性。
對于本地的安裝,有以下方式。
方法一:Anaconda安裝
這是官方強烈推薦 的一種安裝方式。Anaconda本身包含了Python,Jupyter Notebook以及其他常用的數(shù)據(jù)科學包,如Pandas,Numpy等。安裝完Anaconda之后,通過Anaconda Navigator就可以快速啟動。也可以在終端中執(zhí)行jupyter notebook命令來啟動,windows下安裝好Anaconda之后,可以找到相應的導航器和Prompt命令行來啟動。

方式二:pip安裝
pip是python的一款包管理工具,通過pip install pkg_name可以完成很多python擴展包的安裝。jupyter notebook 同樣,執(zhí)行pip install jupyter即可完成安裝。
Jupyter Notebook入門
啟動
在終端中輸入
jupyter notebook是最常用的啟動方式,默認在本地的8888端口啟動。如果本地已經(jīng)有一個jupyter正在運行,再啟動一個就會運行在8889端口。運行完該命令,會在系統(tǒng)默認的瀏覽器打開一個網(wǎng)頁,網(wǎng)頁的地址是:http://localhost:8888/tree。
需要注意的是我們執(zhí)行該啟動命令的目錄就是啟動之后的根目錄。如果你是要打開已經(jīng)存在的.ipynb文件,最好切換到該文件所在目錄再啟動,或者啟動之后將文件移動(或復制)到啟動目錄下。
另外,如果想換一個瀏覽器打開jupyter notebook(我習慣用Chrome而不是默認的Safari),一種方式是可以復制瀏覽器的鏈接地址在目標瀏覽器中粘貼訪問,此時可能出現(xiàn)類似于如下的界面。此時需要回到終端中,復制一下token填入token框,點擊login即可正常訪問。

總體使用
如下圖所示,該頁面是啟動之后默認打開的頁面。我們可以看到當前目錄下已有的文件,可以查看已有的jupyter 文件(灰色表示未在運行,綠色表示正在運行),可以點擊查看子目錄下的內(nèi)容。

我們點擊右側(cè)的New,選擇Python3會在新的頁面中建立一個未命名的notebook文件,選擇Text File會新的頁面中建立一個未命名的txt文件,選擇Folder會在當前頁面中建立一個未命名文件夾,選擇Terminal會在新的頁面中建立Terminal。

可以在左側(cè)進行勾選,對文件夾進行重命名,移動或刪除,對文件進行復制,重命名,移動,下載,查看,編輯和刪除。

Running選項卡下可以看到當前正在運行的terminal和notebook,使我們可以對目前的資源使用情況進行一個直觀了解。

退出
如果要停止某個正在執(zhí)行的notebook文件,可以在file選項卡下勾選該文件,點擊shutdown(也可以用其他方式,見后文)。如果要關(guān)閉整個jupyter notebook,可以在終端中按下鍵盤上的Ctrl C即可。

Notebook使用說明
接下來我們重點說明一下新建“python3”之后的操作,這也是最常用的編寫python文件的操作。
1.總體布局

上面圖中大致說明了Notebook中每一部分的作用,對平常使用python運行程序來講,快捷命令已經(jīng)足夠。快捷命令工具條從左到后的圖標依次表示:保存文件,添加新cell,剪切選中的cell,復制選中的cell,粘貼選中的cell,將選中cell上移,將選中cell下移,執(zhí)行選中的cell,終止kernel,重啟kernel,重啟kernel并重新運行所有cell。Code點擊之后有四個選項,分別是:Code(寫python代碼),MarkDown(寫MarkDown代碼,通常用于注釋),Raw NBConvert(一個轉(zhuǎn)換工具),Heading(快捷添加MarkDown標題)。最后一個小鍵盤可以查看和搜索一些快捷鍵的操作。
2. 常用菜單操作:
修改文件名:可以點擊文件名稱,在彈出的框中直接修改或者File—>Rename
新建Notebook文件:File—>New Notebook—>python3
下載文件:File—>Download as —> 選擇目標格式即可下載
合并cell:Edit—>Merge Cell Above或Merge Cell Below
重啟Kernel并清除所有輸出:Kernel—>Restart & Clear Output
重啟Kernel并運行所有cell:Kernel—>Restart & Run All
停止當前Notebook運行:Kernel—>ShutDown
這里只列出了常用的菜單操作,沒有列出的并不表示不常用,而是可以用快捷鍵或者菜單欄下方的快捷工具代替。如果需要查看每一個菜單選項的含義和作用,推薦文章:https://blog.51cto.com/853056088/2162189,寫的非常詳細。
3. 命令模式和編輯模式
每一個cell有兩種模式:命令模式和編輯模式。如下圖所示:最左側(cè)是藍色的條是命令模式,是綠色的條表示編輯模式(此時cell中有光標,可以進行代碼編寫)。在命令模式下,按下enter或者鼠標單擊代碼框可以進入編輯模式。在編輯模式下,按下esc或者鼠標單擊代碼框左側(cè)區(qū)域即可進入命令模式。
4. 常用快捷(鍵)操作:代碼運行:
ctrl + enter:運行當前cell的代碼,運行完后依然保持在當前cell
shift + enter:運行當前cell的代碼,運行完后跳轉(zhuǎn)到下一個cell,如果是最后一個cell則會新增一個
工具條上的Run
創(chuàng)建新的cell:
命令模式下,按下字母a(above),會在當前cell上方增加一個cell
命令模式下,按下字母b(blove),會在當前cell下方增加一個cell
工具條上的?按鈕
刪除當前側(cè)cell
命令模式下,按下字母x,即可刪除當前cell
命令模式下,連續(xù)兩次按下字母d,即可刪除當前cell
工具條上的“剪刀”按鈕
合并cell
命令模式下,選中多個cell,shift + M可以進行合并
Edit—>Merge Cell Above/Merge Cell Down
拆分cell
編輯模式下,以光標所在之處為分界點,ctrl shift -(減號),可以進cell的拆分
Edit—>Split Cell
保存代碼
命令模式下,按下字母s,就能創(chuàng)建一個checkpoint
工具條上的保存按鈕
File—>Save and Checkpoint
查找替換
編輯模式下,ESC + F
Edit—>Find and Replace
折疊輸出:有時輸出過長的情況
編輯模式下,ESC+O
在cell左側(cè)位置上雙擊即可折疊
Cell—>Current Output—>Toggle
顯示代碼行號
命令模式下,按下字母l(L的小寫,鍵盤k右側(cè)的l)鍵,就能顯示當前cell的行號
shift + l,顯示所有cell的行號
View—>Toggle Line Numbers
切換代碼類型
命令模式下,按下m切換到MarkDown模式,再按下y切換到code模式
工具條上手動切換
Cell—>Cell Type—>選擇相應的代碼類型
注釋代碼
選中代碼,command+/ (windows下是control)
注:其他的快捷鍵可以點擊工具欄最后的小鍵盤查看。
tab鍵的使用
只輸入變量或者函數(shù)的前幾個字母,按下tab可以自動補全
已經(jīng)輸入函數(shù),連續(xù)按下shift+tab可以查詢函數(shù)的具體用法,(一直可以按4次)

執(zhí)行shell命令
英文狀態(tài)下的感嘆號+普通的shell命令,例如:
!pwd,!ls等,有些時候或許很有用。
5. 魔法函數(shù)

以上是一些常用的魔法函數(shù),其他的一些魔法函數(shù)依然可以查閱上面的鏈接,
Jupyter Notebook擴展
執(zhí)行以下代碼可以安裝jupyter notebook擴展
pip install jupyter_contrib_nbextensions && jupyter contrib nbextension install

安裝完之后,重新啟動一下jupyter 服務(wù),就可以看到Nbextensions選項卡。我們只需要勾選相應的插件,在每一個notebook的工具條中就會出現(xiàn)相應的擴展。選中每個擴展的時候,在其下方都會出現(xiàn)關(guān)于該擴展的說明,演示,配置等情況,通過仔細閱讀我們就能得知該擴展的用法。

比較好用的幾個擴展及其作用如下:
1.Table of Contents
這個擴展一般用于整個文件的目錄很多的時候。首先在Nbextensions選項卡中勾選該插件,然后在工具條中就可以看到該擴展按鈕。如果我們在notebook中使用了MarkDown設(shè)置了我們的標題,點擊該擴展,就會在左側(cè)生成目錄,點擊左側(cè)的齒輪,可以在最頂部添加一個cell專門用來顯示目錄。點擊左側(cè)和頂部的鏈接都可以快速跳轉(zhuǎn)到相應的位置。還可以進行目錄的折疊。注意到此時菜單欄上也多了一個“Navigate”標簽,同樣顯示了目錄的情況。

2.Autopep8
這是一個將代碼按照PEP8進行格式化的插件,前提是需要通過pip install autopep8安裝autopep8,安裝完之后需要重啟jupyter notebook服務(wù)才能生效。同樣在Nbextention選項卡中勾選Autopep8,在工具欄中會多一個“錘子”一樣的按鈕,可以幫助我們排版代碼,使其符合pep8標準。

3.Variable inspector
該插件可以幫助我們查看當前notebook中所有的變量的名稱,類型,大小和值。省去了df.shape,type()等語句的執(zhí)行,也代替了前文提到的魔法函數(shù)“%whos”的執(zhí)行,讀者可以自行嘗試一下。
4.Code folding
顧名思義,該插件可以對代碼進行一定的折疊,例如遇到class,def等關(guān)鍵字,而且主體代碼又很長時,折疊代碼會方便閱讀,這一點也讓jupyter notebook更像一個IDE。
5.Execute time
該插件可以顯示每一個cell中代碼的執(zhí)行時間。

除此之外還有一些其他常見的插件擴展,例如Notify,Collapsible headings等,讀者可以自行探索查看,并配置使用。
其他說明
制作幻燈片并放映:參考該鏈接的第二部分:
https://blog.csdn.net/qq_27825451/article/details/85050496
數(shù)學公式編輯:這個其實是MarkDown功能的延伸,需要將cell的代碼類型改為MarkDown,然后在一對美元符號之間寫入LaTex公式,(例如
$E=mc^2$),運行cell之后就可以正常顯示公式了。關(guān)于jupyter lab和jupyter hub
jupyter lab是基于jupyter notebook的新版本,是包括了Notebook的下一代的有模塊化的界面,可以在同一個窗口同時打開好幾個notebook或文件(HTML, TXT, Markdown等等),都以標簽的形式展示,于是就更像是一個IDE。除了界面上存在差異,使用方式上和notebook沒有大的差別。

jupyter hub是一個支持多用戶的 Jupyter Notebook 服務(wù)器,用于創(chuàng)建、管理、代理多個 Jupyter Notebook 實例。具有擴展性和可定制性。常見的場景是公司的運維人員對很多人使用的Notebook進行管理和資源分配。這里不太方便演示。
關(guān)于jupyter notebook與pycharm的差別
個人認為notebook是更“輕”量級的,適合小白使用。各個cell之間具有相對獨立,且變量共享的特點,某些時候特別有用。(例如在爬蟲時,請求一次就獲得了html源碼,后面進行頁面解析時就可以以此為基礎(chǔ)進行調(diào)試,無需再次請求,在處理對請求頻次有限制的網(wǎng)站時還是很有用的)。除此外,notebook能夠保存中間結(jié)果,方便演示,適合數(shù)據(jù)分析人員或者數(shù)據(jù)科學家使用。
pycharm更適合大型工程項目的管理,每一個文件是一次執(zhí)行的。如果一個項目工程中有很多個文件,這時最好使用pycharm。此外pycharm在代碼編輯時,隨時會有提示,而且支持代碼跳轉(zhuǎn),便于對源碼的查看學習。當然工具畢竟只是工具,適合自己的就是最好的,讀者可以根據(jù)自己的需求和使用習慣進行選擇。
總結(jié)
本文我們主要學習了jupyter notebook的使用,核心內(nèi)容在于一些快捷操作和擴展插件。希望對讀到這里的你有一定的幫助。


