官术网_书友最值得收藏!

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

主站蜘蛛池模板: 安阳市| 义乌市| 大悟县| 银川市| 东乡| 丹寨县| 区。| 南和县| 和顺县| 安丘市| 闽侯县| 泗洪县| 扬州市| 新泰市| 金阳县| 子洲县| 兴文县| 江山市| 鄂温| 丹棱县| 阿拉善左旗| 得荣县| 寻乌县| 麻江县| 闸北区| 当雄县| 深水埗区| 西林县| 东辽县| 元阳县| 蕲春县| 邢台县| 盐边县| 和顺县| 巴林左旗| 临沧市| 昌平区| 天门市| 乌恰县| 宁津县| 东乡族自治县|