之前初學(xué)Python時(shí),老師推薦的是Jetbrains出品的PyCharm作為IDE,對(duì)初學(xué)者而言感覺PyCharm非常實(shí)用,但是隨著學(xué)習(xí)的深入也逐漸能感覺到使用PyCharm的一些缺陷:
- 不為項(xiàng)目創(chuàng)建虛擬環(huán)境的話,開啟項(xiàng)目需要花費(fèi)較多時(shí)間導(dǎo)入包;而創(chuàng)建虛擬環(huán)境又需要花時(shí)間安裝包,且徒占內(nèi)存。
- 腳本文件是一次性全部運(yùn)行的。雖然可以使用debug功能打斷點(diǎn),但是如果發(fā)現(xiàn)一小部分出錯(cuò)還是需要重新全部運(yùn)行。在模型訓(xùn)練等過程中這種情況可能是致命的。
- 僅在科學(xué)模式下能實(shí)時(shí)預(yù)覽matplotlib等可視化庫繪制的圖片,比較麻煩。
- 代碼注釋僅有
#和'''兩種形式,且不能富文本編輯,難以輔助代碼擴(kuò)展和可理解。
因此,需要一款能夠解決上述問題的IDE來加快數(shù)據(jù)科學(xué)學(xué)習(xí)和應(yīng)用過程——Jupyter Notebook。
Jupyter Notebook
Jupyter Notebook簡介
Jupyter Notebook是基于網(wǎng)頁的用于交互計(jì)算的應(yīng)用程序。其可被應(yīng)用于全過程計(jì)算:開發(fā)、文檔編寫、運(yùn)行代碼和展示結(jié)果。

與PyCharm不同,Jupyter Notebook沒有獨(dú)立的GUI界面和桌面應(yīng)用程序,是通過瀏覽器來使用的。Jupyter Notebook既可以安裝在本機(jī)電腦上通過本地服務(wù)器訪問,也可以安裝在遠(yuǎn)程服務(wù)器上遠(yuǎn)程使用。
Jupyter Notebook解析的文件后綴名為.ipynb。該類文件是以json形式書寫,但在Jupyter Notebook頁面內(nèi)主要解析為三種類型的塊(cell):代碼塊(code)、文檔塊(markdown)、純文本(Raw NBConvert)。
-
代碼塊包含代碼片和輸出片。Jupyter Notebook原名IPython Notebook,對(duì)Python語言提供支持,書寫的Python代碼支持代碼高亮,支持注釋、縮進(jìn)、Tab補(bǔ)全等基礎(chǔ)功能。輸出部分,相比于Pycharm等接近c(diǎn)md只支持文字輸出,Jupyter在瀏覽器中可以渲染出DataFrame表格、可交互的PyeCharts圖形、Matplotlib圖片等基于html、svg、png等格式的輸出。
Code Cell -
文檔塊原生支持Markdown語法,可以進(jìn)行簡單的富文本編輯和多媒體插入,同時(shí)也支持Latex語法的解析,可以輸入數(shù)學(xué)說明。
Markdown Cell
用戶可以自由控制插入代碼塊和文檔塊,形成交錯(cuò)易于解釋說明,同時(shí)也可自由控制代碼運(yùn)行順序,環(huán)境啟動(dòng)后運(yùn)行的代碼塊中保留的變量不會(huì)被刪除,可以跨代碼塊在其他塊中使用。
您可以訪問Jupyter官網(wǎng),在線試用JupyterNotebook。
安裝與啟動(dòng)
Jupyter官網(wǎng)也給出了安裝教程,摘錄如下:
如果您已經(jīng)安裝了conda,可以使用conda進(jìn)行安裝。在CMD/Terminal輸入如下命令:
conda install -c conda-forge notebook
或者,如果您想使用pip安裝,在安裝好pip之后可以在CMD/Terminal輸入如下命令:
pip install notebook
安裝完成后,在CMD/Terminal中輸入如下命令即可啟動(dòng):
jupyter notebook
一般而言,系統(tǒng)會(huì)幫您在默認(rèn)瀏覽器打開Jupyter Notebook主界面(文件系統(tǒng)),如果沒有自動(dòng)打開,您也可以參照命令行輸出在瀏覽器自行進(jìn)入。
簡單使用
基礎(chǔ)操作
文件列表頁面

在目錄頁面,用戶可以新建空腳本文件進(jìn)行編輯,也可以新建終端以Shell操作目錄(因此,可以進(jìn)行包的安裝)。Jupyter Notebook會(huì)對(duì)ipynb腳本文件進(jìn)行渲染,但同時(shí)也能夠以純文本打開其他文件。在此頁面選中文件可以選擇終止運(yùn)行、復(fù)制、重命名、打開、下載、刪除等操作。
腳本頁面

腳本頁面,用戶可以點(diǎn)擊文件名進(jìn)行文件的重命名,可以通過菜單欄和功能區(qū)進(jìn)行一些操作。就基礎(chǔ)操作而言,用戶可以使用功能區(qū)的+按鈕添加單元格,使用運(yùn)行按鈕執(zhí)行代碼塊或渲染文檔塊,使用下拉欄調(diào)整塊的類型。
當(dāng)然,也可以通過單擊代碼塊旁的運(yùn)行鍵來執(zhí)行代碼塊。
基礎(chǔ)快捷鍵
Jupyter Notebook的快捷鍵較多,這里按單元格的兩種模式分別歸納。單元格模式可分為命令模式和編輯模式,主要區(qū)別在單元格框線的顏色以及內(nèi)容是否可編輯,如圖。

命令模式
Enter:轉(zhuǎn)為編輯模式Shift+Enter:運(yùn)行本單元格并選中下個(gè)單元格Ctrl+Enter:運(yùn)行本單元格Alt+Enter:運(yùn)行本單元格并在下方插入新單元格Y:單元格變?yōu)榇a狀態(tài)M:單元格變?yōu)槲臋n狀態(tài)↑/K:選中上方單元格↓/J:選中下方單元格A:在上方插入新單元格B:在下方插入新單元格C/X/V:復(fù)制 / 剪切 / 粘貼單元格D:刪除單元格長按
Shift可連續(xù)選中
僅列舉部分常用快捷鍵。如需獲取全部快捷鍵,可以在命令模式下按H進(jìn)入快捷鍵幫助查看所有的快捷鍵。
編輯模式
-
Esc:進(jìn)入命令模式 -
Shift+Enter:運(yùn)行本單元格并選中下個(gè)單元格 -
Ctrl+Enter:運(yùn)行本單元格 -
Alt+Enter:運(yùn)行本單元格并在下方插入新單元格 -
Tab:縮進(jìn) / 代碼補(bǔ)全 -
Shift+Tab:查看工具提示 -
Ctrl+]:縮進(jìn) -
Ctrl+[:取消縮進(jìn) -
Ctrl+/:注釋當(dāng)前行 / 選中內(nèi)容 -
Ctrl+Z:撤銷 -
Ctrl+Y:重做 -
Ctrl+A:全選 -
Ctrl+S:保存
文件操作

可以在菜單欄的Files菜單中選擇各類文件操作,如新建、打開、保存等。
您可以給腳本設(shè)置檢查點(diǎn),便于版本回溯和重置。
同時(shí)也可以將其下載或?qū)С鰹槠渌袷剑阌诜窒?、打印、發(fā)布等操作。在之后的進(jìn)階操作中還會(huì)再提及。
進(jìn)階技巧
啟動(dòng)命令參數(shù)
在安裝與啟動(dòng)中已經(jīng)介紹過在CMD/Terminal中的啟動(dòng)方法:
jupyter notebook
執(zhí)行命令后,終端會(huì)顯示一系列服務(wù)器信息:
$ jupyter notebook
[I 08:58:24.417 NotebookApp] Serving notebooks from local directory: /Users/catherine
[I 08:58:24.417 NotebookApp] 0 active kernels
[I 08:58:24.417 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/
[I 08:58:24.417 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
出現(xiàn)以上信息表示服務(wù)開啟成功,瀏覽器會(huì)自動(dòng)打開窗口進(jìn)入主界面。
端口
默認(rèn)情況下一個(gè)Jupyter Notebook進(jìn)程會(huì)占用一個(gè)端口,默認(rèn)從8888開始,如果端口被占用則選用鄰近端口如8889、8890等。我們可以在啟動(dòng)時(shí)指定端口:
jupyter notebook --port <port_number>
其中<port_number>為指定的端口號(hào)。
文件目錄
一般而言打開Jupyter Notebook會(huì)進(jìn)入默認(rèn)的文件路徑,有的時(shí)候我們想要打開不再默認(rèn)路徑下的腳本文件,就可以選擇指定目錄啟動(dòng):
jupyter notebook <dir>
其中<dir>為需要打開的目錄,可以是相對(duì)路徑也可以是絕對(duì)路徑。
例如,在Windows下,我們可以在文件資源管理器的地址欄輸入cmd來快速啟動(dòng)命令行,隨后僅需鍵入jupyter notebook ./即可在Jupyter Notebook中打開當(dāng)前目錄。

或者,如果需要直接更改默認(rèn)文件目錄,只需要進(jìn)行配置文件的修改。方法如下:
-
首先,在命令行輸入命令得到j(luò)upyter notebook的安裝地址:
$ jupyter notebook --generate-config Overwrite C:\Users\PM\.jupyter\jupyter_notebook_config.py with default config? [y/N]y Writing default config to: C:\Users\PM\.jupyter\jupyter_notebook_config.py可以看到返回中給出了jupyter notebook的安裝地址,配置文件在此目錄下。
-
前往該目錄,使用vim等文本編輯方法編輯目錄下的
jupyter_notebook_config.py文件,找到如下代碼段:## The directory to use for notebooks and kernels. #c.NotebookApp.notebook_dir = ''將第二行內(nèi)容取消注釋,并將引號(hào)內(nèi)更改為您需要指定的工作空間地址即可。
隨后重新啟動(dòng)Jupyter Notebook即可在指定空間打開。
主題更換方法
基于Jupyterthemes
Jupyter Notebook默認(rèn)主題為淺色主題,雖然文字顯示清晰,但長時(shí)間使用可能對(duì)眼睛刺激較大。我們可以借用Jupyterthemes插件來為Notebook更換合適的主題。
首先在CMD/Terminal輸入如下命令安裝Jupyterthemes插件:
pip install jupyterthemes
安裝完成后即可使用。該庫在使用時(shí)僅取兩首字母jt為命令。完整的命令格式如下:
jt [-h] [-l] [-t THEME] [-f MONOFONT] [-fs MONOSIZE] [-nf NBFONT]
[-nfs NBFONTSIZE] [-tf TCFONT] [-tfs TCFONTSIZE] [-dfs DFFONTSIZE]
[-m MARGINS] [-cursw CURSORWIDTH] [-cursc CURSORCOLOR] [-vim]
[-cellw CELLWIDTH] [-lineh LINEHEIGHT] [-altp] [-altmd] [-altout]
[-P] [-T] [-N] [-r] [-dfonts]
例如,使用如下命令
jt -t monokai -ofs 10 -nfs 13 -tfs 13 -fs 12 -T -N -lineh 140
表明使用monokai主題,輸出字體大小10,notebook字體大小13,文檔塊字體大小13,代碼字體大小12,展示工具欄,展示文檔名和logo,行高140。
完整的參數(shù)解釋見jupyter-theme官方倉庫。
使用jt -l命令可以查看目前安裝的主題:
$ jt -l
Available Themes:
chesterish
grade3
gruvboxd
gruvboxl
monokai
oceans16
onedork
solarizedd
solarizedl

上圖展示了部分主題樣式基本情況,可根據(jù)喜好自行更換主題。
使用jt -r命令則可以重置主題。
基于Stylish
因?yàn)镴upyter Notebook是在瀏覽器呈現(xiàn),那么任意形式的更換樣式表就可以實(shí)現(xiàn)對(duì)主題的修改。例如較為著名的Stylish插件的社區(qū)中就有很多開發(fā)者分享了自己定制的Jupyter Notebook主題,這些主題的呈現(xiàn)效果整體上優(yōu)于jupyterthemes。
而且,如果您熟練掌握CSS語法,也可以自行基于Stylish定制合適的Jupyter Notebook主題。

魔法命令
魔法命令在代碼塊中執(zhí)行,但是不屬于Python語言的代碼。使用魔法命令可以在執(zhí)行代碼的同時(shí)執(zhí)行附加效果。
執(zhí)行Shell命令
執(zhí)行Shell命令并不是魔法命令的一部分,但是功能類似。
在代碼塊中鍵入!+shell命令即可在當(dāng)前目錄執(zhí)行。
典型的應(yīng)用場景例如,當(dāng)我們需要使用某個(gè)包但是Jupyter Notebook所用環(huán)境中并沒有此包,那么就可以利用此特性,在Notebook內(nèi)完成包的安裝。
!pip install selenium
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting selenium
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/80/d6/4294f0b4bce4de0abf13e17190289f9d0613b0a44e5dd6a7f5ca98459853/selenium-3.141.0-py2.py3-none-any.whl (904 kB)
|████████████████████████████████| 904 kB 1.2 MB/s eta 0:00:01
Requirement already satisfied: urllib3 in /root/anaconda3/lib/python3.8/site-packages (from selenium) (1.25.9)
Installing collected packages: selenium
Successfully installed selenium-3.141.0
或者,我們共享腳本給他人運(yùn)行時(shí),需要其下載一些文件,就可以使用wget命令來下載:
!wget https://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531810/test_a.csv.zip
--2021-01-08 21:51:25-- https://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531810/test_a.csv.zip
Resolving tianchi-competition.oss-cn-hangzhou.aliyuncs.com (tianchi-competition.oss-cn-hangzhou.aliyuncs.com)... 118.31.232.194
Connecting to tianchi-competition.oss-cn-hangzhou.aliyuncs.com (tianchi-competition.oss-cn-hangzhou.aliyuncs.com)|118.31.232.194|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 61986708 (59M) [application/zip]
Saving to: ‘test_a.csv.zip’
100%[======================================>] 61,986,708 14.6MB/s in 4.0s
2021-01-08 21:51:30 (14.9 MB/s) - ‘test_a.csv.zip’ saved [61986708/619867
常用魔法命令
%run
%run 腳本文件地址
可以在接下來的代碼塊中運(yùn)行指定的腳本文件。
%time系列
%time {一行代碼}
%%time
{代碼塊剩余內(nèi)容}
%timeit {一行代碼}
%%timeit
{代碼塊剩余內(nèi)容}
使用%time和%%time可以計(jì)算一行/一個(gè)單元格內(nèi)的代碼執(zhí)行一次所需的時(shí)間。這在模型訓(xùn)練和大文件讀取時(shí)是很實(shí)用的,有助于使用者把握時(shí)間和環(huán)境性能。
而%timeit和%%timeit會(huì)將指定代碼內(nèi)容執(zhí)行很多次,最后計(jì)算出平均運(yùn)行所需時(shí)間,一般用于算法的評(píng)估。
%whos
該命令可以查看本腳本中仍在占用內(nèi)存的變量的類型和值等情況
j = 9
i = 10
s = "This is a String"
%whos
Variable Type Data/Info
---------------------------------
i int 10
j int 9
np module <module 'numpy' from '/ro<...>kages/numpy/__init__.py'>
pd module <module 'pandas' from '/r<...>ages/pandas/__init__.py'>
s str This is a String
%del %reset
使用%del可以刪除某個(gè)變量;使用%reset可以清除所有變量。
%load
使用%load可以加載腳本文件內(nèi)容并填充到代碼塊中。值得一提的是%load后不僅可以接本地計(jì)算機(jī)上的絕對(duì)地址和相對(duì)地址,還可以接其他服務(wù)器的地址,例如使用%load獲取某網(wǎng)頁的原代碼:
%load http://crafts.mariozzj.cn/
%matplotlib inline
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
plt.plot(np.arange(20))
在使用matplotlib繪圖之前寫上這樣一行魔法命令可以讓繪制出的圖片直接顯示在輸出區(qū)域。
導(dǎo)出
Jupyter Notebook的代碼塊和文檔塊可以以合適的形式導(dǎo)出,導(dǎo)出的格式包括HTML、LaTeX、Markdown、PDF等。
導(dǎo)出的Markdown中,普通文檔塊成為Markdown文檔,而代碼塊成為Markdown的代碼塊,輸出部分也成為代碼塊(輸出的圖片、表格等不在代碼塊內(nèi),但是仍然會(huì)有效保存)。
導(dǎo)出的PDF是經(jīng)由LaTeX轉(zhuǎn)化的,最大限度地保留了原始腳本的呈現(xiàn)效果,在代碼塊和輸出區(qū)旁會(huì)顯示In/Out+編號(hào),調(diào)整適配到合適的紙張大小。需要注意的是在Jupyter Notebook中直接導(dǎo)出PDF,不支持顯示中文,但是也有可以導(dǎo)出含中文PDF的方法。
-
經(jīng)由md導(dǎo)出PDF
在Jupyter Notebook中以markdown格式導(dǎo)出文件后,使用Typora等markdown文本編輯器再對(duì)格式進(jìn)行轉(zhuǎn)換,可以生成PDF以供打印或?qū)С?。由于轉(zhuǎn)換為PDF的過程是在編輯器中進(jìn)行的,所以最終格式是由編輯器決定的,而且不會(huì)保留IN/OUT標(biāo)注等信息。
-
經(jīng)由LaTeX導(dǎo)出PDF
在Jupyter Notebook中可以以LaTeX格式導(dǎo)出,隨后可以用LaTeX編輯器進(jìn)行轉(zhuǎn)換,或者采取以下步驟以使轉(zhuǎn)換的PDF支持顯示中文:
安裝MiKTeX。下載鏈接
生成LaTeX文件,可以在CMD/Terminal中進(jìn)入腳本文件所在目錄,輸入
jupyter nbconvert --to latex 文件名.ipynb,等待后生成文件名.tex文件。-
使用文本編輯器打開文件名.tex文件,在
\documentclass{article}后或\documentclass[11pt]{article}后或\documentclass[11pt]{ctexart}后插入以下兩行語句,保存。\usepackage{fontspec, xunicode, xltxtra} \usepackage{ctex} \setmainfont{Microsoft YaHei}
-
再在CMD/Terminal中輸入
xelatex 文件名.tex即可完成轉(zhuǎn)化,生成的文件名.pdf在同目錄下。轉(zhuǎn)換操作
升級(jí)體驗(yàn)
Jupyter Notebook 已經(jīng)展現(xiàn)出了它在數(shù)據(jù)分析與處理方面的便捷性,但是使用下來還是有一些體驗(yàn)可以優(yōu)化,例如:
- 相比于傳統(tǒng) IDE,文件目錄和腳本操作頁面是分開的,如果需要切換文件可能比較麻煩
- Notebook 需要先單獨(dú)在終端啟動(dòng),才具有查看
.ipynb文件的能力,不能直接雙擊打開
這里提供兩個(gè)能夠緩解上述使用痛點(diǎn)的工具,因?yàn)橹皇巧?jí)體驗(yàn),這兩個(gè)工具的基本使用和 Notebook 類似,就不再贅述。
JupyterLab
Jupyter Lab 和 Jupyter Notebook 一樣同屬于 Jupyter Project,二者在使用上幾乎一致,個(gè)人認(rèn)為 Jupyter Lab 是在 Notebook 基礎(chǔ)上進(jìn)行了升級(jí)。
安裝與啟動(dòng)
Jupyter官網(wǎng) 也給出了安裝教程,摘錄如下:
如果您已經(jīng)安裝了conda,可以使用conda進(jìn)行安裝。在 CMD/Terminal 輸入如下命令:
conda install -c conda-forge jupyterlab
或者,如果您想使用pip安裝,在安裝好pip之后可以在 CMD/Terminal 輸入如下命令:
pip install jupyterlab
安裝完成后,在 CMD/Terminal 中輸入如下命令即可啟動(dòng):
jupyter-lab
一般而言,系統(tǒng)會(huì)幫您在默認(rèn)瀏覽器打開 Jupyter Lab 主界面(文件系統(tǒng)),如果沒有自動(dòng)打開,您也可以參照命令行輸出在瀏覽器自行進(jìn)入。
界面展示
Lab 最主要變化在于在頁面左側(cè)加入了文件目錄,打開的標(biāo)簽頁以內(nèi)嵌標(biāo)簽頁而不是瀏覽器標(biāo)簽頁展示。

對(duì) .ipynb 文件的操作,Lab 和 Notebook 完全相同,因此切換成本很低!
同時(shí),Jupyter Lab 支持渲染 csv 等結(jié)構(gòu)化數(shù)據(jù)為表格形式,對(duì)純文本文件也可以直接編輯。

VS Code
VS Code 是一款強(qiáng)大輕量級(jí) IDE,支持豐富的語言拓展,同時(shí)還有多種強(qiáng)力插件。
安裝與啟動(dòng)
如果沒有安裝 VS Code,可以前往官方頁面下載安裝: Download Visual Studio Code - Mac, Linux, Windows
如果已安裝 VS Code,但是沒有安裝 Python,可以在擴(kuò)展頁面安裝:

VS Code 安裝 Jupyter 擴(kuò)展后,就可以支持渲染 .ipynb 文件了,在擴(kuò)展頁面安裝即可:

界面展示
VS Code 對(duì) .ipynb 腳本的頁面操作也很類似,同時(shí)也支持文件樹、版本控制等,相對(duì)而言功能更加強(qiáng)大。
VS Code 相對(duì)于 Notebook 的提升在于:增加了文件目錄,同時(shí)能夠在文件夾中直接雙擊 .ipynb 文件打開預(yù)覽,不需要啟動(dòng)服務(wù)就可以渲染查看。



