- Python預(yù)測分析與機(jī)器學(xué)習(xí)
- 王沁晨編著
- 2496字
- 2023-08-25 11:18:33
2.1.2 Jupyter Notebook簡介及安裝
Jupyter Notebook是一款開源網(wǎng)頁程序。其主要應(yīng)用于實時執(zhí)行單段代碼,契合Python這種腳本語言的運(yùn)行方式。代碼可以分開寫入不同的cell(元件),單獨(dú)執(zhí)行。如圖2.15所示,被方框框起來的部分屬于同一個cell。
常用的cell有3種不同的類別——Code、Markdown和Raw cell。Code cell用于寫代碼,是添加新的cell時的默認(rèn)類別,內(nèi)容要求符合Python語言規(guī)范。在Code cell中執(zhí)行print或其他附帶輸出的Python代碼即可在該cell底部顯示。Markdown cell用于插入文字和圖片批注,同時可識別Markdown語言的特殊字符。Raw cell則會完全保留輸入內(nèi)容,不做任何編譯。
Jupyter Notebook允許鑲嵌式文字、表格和圖像展示,如圖2.15所示,讓代碼分享變得更直白易懂。擁有相同權(quán)限的用戶可以對同一Notebook進(jìn)行改寫,方便團(tuán)隊間的協(xié)作。
接下來通過幾個例子,對比一下使用Jupyter Notebook和傳統(tǒng)的本機(jī)運(yùn)行.py文件。
第1個差異是本機(jī)上運(yùn)行的Python腳本需要整個.py文件同時運(yùn)行,且運(yùn)行完成后變量再無法找回。這樣的不便在于,程序員無法立刻得到片段代碼的輸出。使用Python進(jìn)行數(shù)據(jù)分析時,由于數(shù)據(jù)量普遍較大,每一步驟的運(yùn)行時間也相應(yīng)增加。若將所有步驟集合在同一.py文件中,然后執(zhí)行整個文件,程序員將無法及時地根據(jù)腳本進(jìn)度做出相應(yīng)調(diào)整。舉個具體的例子,數(shù)據(jù)分析前需要讀取數(shù)據(jù),假設(shè)這個過程花費(fèi)一分鐘。為了對讀取的數(shù)據(jù)有一個初步的認(rèn)知,我們可能會讓腳本輸出數(shù)據(jù)的長度、內(nèi)容概述、數(shù)據(jù)類別等。若使用本機(jī)運(yùn)行.py文件,腳本輸出相應(yīng)信息后將會自動退出。這時如果想獲得數(shù)據(jù)的另一項信息或開始清理數(shù)據(jù),則需要在.py文件中加入相應(yīng)代碼后重新執(zhí)行腳本。這意味著重新花費(fèi)一分鐘讀取數(shù)據(jù)。而使用Jupyter Notebook,只要不主動終結(jié)Notebook的運(yùn)行,數(shù)據(jù)讀取成功后便會一直存儲在分配的變量中。而后可在新的一欄中,在無須重新讀取數(shù)據(jù)的情況下寫入新的腳本,輸出數(shù)據(jù)的各類信息或開始清理數(shù)據(jù)。

圖2.15 cell示例(圖源:Jupyter官網(wǎng))
如果在命令行使用過IPython,可能會覺得Jupyter Notebook的運(yùn)行模式與之有所相似,但不同于IPython,Jupyter Notebook將腳本存儲于一個.ipynb文件中,可供二次使用和分享。
第2個差異是輸出格式的差異。本機(jī)上運(yùn)行的.py文件產(chǎn)出的圖片信息往往以窗口的方式彈出,或直接在命令行界面做圖。窗口彈出不利于整理圖像與代碼之間的聯(lián)系,特別是當(dāng)代碼輸出多張圖片時;命令行界面則本質(zhì)上不適合做出高品質(zhì)圖表。Jupyter Notebook的鑲嵌式展示可以將表格圖片放置在相應(yīng)代碼附近。許多庫也專門為Jupyter Notebook這類網(wǎng)頁P(yáng)ython執(zhí)行軟件做過優(yōu)化,如Matplotlib的圖表繪制和Pandas的DataFrame打印,皆與本機(jī)中IPython不同。如Matplotlib在IPython中執(zhí)行.plot()會彈出窗口,而在Jupyter Notebook中執(zhí)行則會在相應(yīng)的Code cell下方直接繪制。Pandas的比對將在2.1.3節(jié)中講解。
第3個差異體現(xiàn)在分享或演示代碼時。在團(tuán)隊內(nèi)分享普通的.py文件往往需要大量的注釋,因為大段的代碼難以閱讀。另外,.py文件本質(zhì)上不太符合人類習(xí)慣閱讀的格式。使用Jupyter Notebook的cell可以合理區(qū)分模塊,并在模塊之間加入文字和圖片注解。如果是向不直接觸碰代碼的人演示——例如項目管理者,則更需要最大程度地優(yōu)化編排。這也是Jupyter Notebook取名精巧的地方,它的格式如同一個符合人類習(xí)慣閱讀的筆記本,其中穿插的代碼及其輸出可供使用者追溯筆記本內(nèi)所述結(jié)果的運(yùn)作原理。
Jupyter的官網(wǎng)子域(https://Jupyter.org/install.html)中提供了使用conda下載Jupyter Notebook的方法。
回到命令行界面,切換到test環(huán)境,執(zhí)行:

收到:

指示時輸入y,即可在新建的test環(huán)境內(nèi)安裝Jupyter Notebook。下載完成后執(zhí)行Jupyter Notebook,將在網(wǎng)頁中彈出一個顯示主機(jī)根目錄(Root directory)中所有文檔及文件夾的列表。
還通過Anaconda-Navigator的圖像界面直接安裝。由于Jupyter Notebook在數(shù)據(jù)科學(xué)這一領(lǐng)域十分常用,Anaconda-Navigator的主頁中設(shè)置了安裝快捷鍵。這里需要注意一點(diǎn),圖像界面重啟后會默認(rèn)進(jìn)入base環(huán)境,因此在安裝前要注意通過頂部Applications on后面的下拉式菜單事先切換到test環(huán)境中。如圖2.16所示,單擊Notebook下的Install按鈕即可下載。下載完成后,Notebook下方的Install會變成如VS Code下方一樣的Launch(啟動)。單擊Launch按鈕將與在命令行中執(zhí)行Jupyter Notebook產(chǎn)生同樣的效果——彈出網(wǎng)頁窗口列表。

圖2.16 下載Jupyter Notebook
可以通過網(wǎng)頁列表中的文件夾名稱到達(dá)一個想要存儲項目代碼的地方。如圖2.17所示,筆者將會把以下用于示范的代碼放入桌面上一個名為教學(xué)的文件夾中。
單擊右上方的New→Python 3,可以創(chuàng)建新的Python Notebook。在這里也可以單擊Folder建立新的文件夾,單擊Text File建立新的.txt文件,或單擊Terminal打開一個連接本機(jī)服務(wù)器的網(wǎng)頁終端。

圖2.17 新建Python Notebook
新建的Python Notebook的文件擴(kuò)展名為.ipynb,在Jupyter中打開新建的Python Notebook文件,如圖2.18所示。文件默認(rèn)名為Untitled,也就是未命名,單擊左上角文件名所在區(qū)域可為文件改名。

圖2.18 命名新建Notebook
文件頂部是一排用于操作cell的工具,下拉式菜單可以用來切換一個cell的類別。圖2.19所示是之前提到的不同類別的cell。Code cell和Raw cell單擊即可編輯,而Markdown cell編譯后想要重新編輯需要雙擊cell。

圖2.19 不同類別的cell
下面介紹幾個基本的按鍵。圖2.20所示的加號工具按鈕用來添加新的cell,單擊后會在當(dāng)前cell下方添加新的空白Code cell。
圖2.21所示的裁剪工具按鈕用來刪除當(dāng)前選中的cell。

圖2.20 添加新的cell

圖2.21 刪除選中的cell
如果想要恢復(fù)被刪除的cell,單擊菜單中Edit→Undo Deleted Cells即可恢復(fù)上一次刪除的cell,如圖2.22所示。

圖2.22 恢復(fù)刪除的cell
單擊圖2.23所示的復(fù)制工具按鈕可以用來復(fù)制選中的cell。

圖2.23 復(fù)制選中的cell
圖2.24所示的粘貼工具按鈕用來粘貼上一次復(fù)制的cell,粘貼位置將在當(dāng)前選中cell的下一格。注意,若使用裁剪鍵刪除cell后沒有使用過復(fù)制鍵,則上一次裁減的cell會被存儲為待復(fù)制的cell。可以運(yùn)用這一特質(zhì)移動距離目的地較遠(yuǎn)的cell。

圖2.24 粘貼復(fù)制的cell
圖2.25所示的上下兩個工具按鈕可用來移動距離目的地較近的cell,它們會分別將選中的cell向上或向下移動一格。
圖2.26所示的Run工具按鈕用來執(zhí)行單個cell。使用快捷鍵Shift+Enter可以達(dá)到同樣的效果。

圖2.25 上下移動cell

圖2.26 執(zhí)行單個cell中代碼
圖2.27所示的停止工具按鈕用來暫停還在運(yùn)行的cell。

圖2.27 暫停cell中運(yùn)行的代碼
圖2.28所示的重啟工具按鈕會清除所有的變量,Code cell前面記錄運(yùn)行順序的數(shù)字也會在下一次運(yùn)行一個cell的時候重新從1開始計數(shù)。

圖2.28 重新啟動Notebook
使用這一重啟工具按鈕,Code cell的輸出不會被清除,因此如果在某個cell中打印前面cell定義過的變量,這一輸出仍會出現(xiàn)在筆記本內(nèi),如圖2.29所示,但是重啟后若跳過圖2.29中的第1行定義直接執(zhí)行第2行,會得到NameError,因為此時變量a還未被定義。
若需要在重啟的同時清理全部輸出,單擊Kernel→Restart&Clear Output,如圖2.30所示。

圖2.29 重啟后輸出保留

圖2.30 重啟并清除輸出
圖2.31所示的重啟工具按鈕將在重啟的同時執(zhí)行所有cell。

圖2.31 重啟并執(zhí)行所有cell
- Unity 2020 By Example
- Java面向?qū)ο笏枷肱c程序設(shè)計
- Java EE框架整合開發(fā)入門到實戰(zhàn):Spring+Spring MVC+MyBatis(微課版)
- 技術(shù)領(lǐng)導(dǎo)力:程序員如何才能帶團(tuán)隊
- Java Web程序設(shè)計
- Web Application Development with MEAN
- 高級語言程序設(shè)計(C語言版):基于計算思維能力培養(yǎng)
- 學(xué)習(xí)正則表達(dá)式
- Python之光:Python編程入門與實戰(zhàn)
- Active Directory with PowerShell
- Kotlin開發(fā)教程(全2冊)
- C語言程序設(shè)計與應(yīng)用(第2版)
- Unity Android Game Development by Example Beginner's Guide
- 大數(shù)據(jù)時代的企業(yè)升級之道(全3冊)
- TypeScript全棧開發(fā)