之前初學(xué)Python時同蜻,老師推薦的是Jetbrains出品的PyCharm作為IDE例嘱,對初學(xué)者而言感覺PyCharm非常實用员淫,但是隨著學(xué)習(xí)的深入也逐漸能感覺到使用PyCharm的一些缺陷:
- 不為項目創(chuàng)建虛擬環(huán)境的話,開啟項目需要花費較多時間導(dǎo)入包战惊;而創(chuàng)建虛擬環(huán)境又需要花時間安裝包,且徒占內(nèi)存甲献。
- 腳本文件是一次性全部運行的闲延。雖然可以使用debug功能打斷點,但是如果發(fā)現(xiàn)一小部分出錯還是需要重新全部運行告丢。在模型訓(xùn)練等過程中這種情況可能是致命的枪蘑。
- 僅在科學(xué)模式下能實時預(yù)覽matplotlib等可視化庫繪制的圖片,比較麻煩芋齿。
- 代碼注釋僅有
#
和'''
兩種形式腥寇,且不能富文本編輯,難以輔助代碼擴展和可理解觅捆。
因此赦役,需要一款能夠解決上述問題的IDE來加快數(shù)據(jù)科學(xué)學(xué)習(xí)和應(yīng)用過程——Jupyter Notebook。
Jupyter Notebook
Jupyter Notebook簡介
Jupyter Notebook是基于網(wǎng)頁的用于交互計算的應(yīng)用程序栅炒。其可被應(yīng)用于全過程計算:開發(fā)掂摔、文檔編寫术羔、運行代碼和展示結(jié)果。
與PyCharm不同乙漓,Jupyter Notebook沒有獨立的GUI界面和桌面應(yīng)用程序级历,是通過瀏覽器來使用的。Jupyter Notebook既可以安裝在本機電腦上通過本地服務(wù)器訪問叭披,也可以安裝在遠(yuǎn)程服務(wù)器上遠(yuǎn)程使用寥殖。
Jupyter Notebook解析的文件后綴名為.ipynb
。該類文件是以json形式書寫涩蜘,但在Jupyter Notebook頁面內(nèi)主要解析為三種類型的塊(cell):代碼塊(code)嚼贡、文檔塊(markdown)、純文本(Raw NBConvert)同诫。
-
代碼塊包含代碼片和輸出片粤策。Jupyter Notebook原名IPython Notebook,對Python語言提供支持误窖,書寫的Python代碼支持代碼高亮叮盘,支持注釋、縮進(jìn)霹俺、Tab補全等基礎(chǔ)功能柔吼。輸出部分,相比于Pycharm等接近cmd只支持文字輸出吭服,Jupyter在瀏覽器中可以渲染出DataFrame表格嚷堡、可交互的PyeCharts圖形、Matplotlib圖片等基于html艇棕、svg蝌戒、png等格式的輸出。
-
文檔塊原生支持Markdown語法沼琉,可以進(jìn)行簡單的富文本編輯和多媒體插入北苟,同時也支持Latex語法的解析,可以輸入數(shù)學(xué)說明打瘪。
用戶可以自由控制插入代碼塊和文檔塊友鼻,形成交錯易于解釋說明,同時也可自由控制代碼運行順序闺骚,環(huán)境啟動后運行的代碼塊中保留的變量不會被刪除彩扔,可以跨代碼塊在其他塊中使用。
您可以訪問Jupyter官網(wǎng)僻爽,在線試用JupyterNotebook虫碉。
安裝與啟動
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中輸入如下命令即可啟動:
jupyter notebook
一般而言习瑰,系統(tǒng)會幫您在默認(rèn)瀏覽器打開Jupyter Notebook主界面(文件系統(tǒng)),如果沒有自動打開秽荤,您也可以參照命令行輸出在瀏覽器自行進(jìn)入甜奄。
簡單使用
基礎(chǔ)操作
文件列表頁面
在目錄頁面,用戶可以新建空腳本文件進(jìn)行編輯王滤,也可以新建終端以Shell操作目錄(因此贺嫂,可以進(jìn)行包的安裝)滓鸠。Jupyter Notebook會對ipynb腳本文件進(jìn)行渲染雁乡,但同時也能夠以純文本打開其他文件。在此頁面選中文件可以選擇終止運行糜俗、復(fù)制踱稍、重命名、打開悠抹、下載珠月、刪除等操作。
腳本頁面
腳本頁面楔敌,用戶可以點擊文件名進(jìn)行文件的重命名啤挎,可以通過菜單欄和功能區(qū)進(jìn)行一些操作。就基礎(chǔ)操作而言卵凑,用戶可以使用功能區(qū)的+
按鈕添加單元格庆聘,使用運行按鈕執(zhí)行代碼塊或渲染文檔塊,使用下拉欄調(diào)整塊的類型勺卢。
當(dāng)然伙判,也可以通過單擊代碼塊旁的運行鍵來執(zhí)行代碼塊。
基礎(chǔ)快捷鍵
Jupyter Notebook的快捷鍵較多黑忱,這里按單元格的兩種模式分別歸納宴抚。單元格模式可分為命令模式和編輯模式,主要區(qū)別在單元格框線的顏色以及內(nèi)容是否可編輯甫煞,如圖菇曲。
命令模式
Enter
:轉(zhuǎn)為編輯模式Shift
+Enter
:運行本單元格并選中下個單元格Ctrl
+Enter
:運行本單元格Alt
+Enter
:運行本單元格并在下方插入新單元格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
:運行本單元格并選中下個單元格 -
Ctrl
+Enter
:運行本單元格 -
Alt
+Enter
:運行本單元格并在下方插入新單元格 -
Tab
:縮進(jìn) / 代碼補全 -
Shift
+Tab
:查看工具提示 -
Ctrl
+]
:縮進(jìn) -
Ctrl
+[
:取消縮進(jìn) -
Ctrl
+/
:注釋當(dāng)前行 / 選中內(nèi)容 -
Ctrl
+Z
:撤銷 -
Ctrl
+Y
:重做 -
Ctrl
+A
:全選 -
Ctrl
+S
:保存
文件操作
可以在菜單欄的Files菜單中選擇各類文件操作,如新建埃跷、打開蕊玷、保存等邮利。
您可以給腳本設(shè)置檢查點,便于版本回溯和重置垃帅。
同時也可以將其下載或?qū)С鰹槠渌袷窖咏欤阌诜窒怼⒋蛴∶吵稀l(fā)布等操作方庭。在之后的進(jìn)階操作中還會再提及。
進(jìn)階技巧
啟動命令參數(shù)
在安裝與啟動中已經(jīng)介紹過在CMD/Terminal中的啟動方法:
jupyter notebook
執(zhí)行命令后酱固,終端會顯示一系列服務(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ù)開啟成功械念,瀏覽器會自動打開窗口進(jìn)入主界面。
端口
默認(rèn)情況下一個Jupyter Notebook進(jìn)程會占用一個端口运悲,默認(rèn)從8888開始龄减,如果端口被占用則選用鄰近端口如8889、8890等班眯。我們可以在啟動時指定端口:
jupyter notebook --port <port_number>
其中<port_number>
為指定的端口號希停。
文件目錄
一般而言打開Jupyter Notebook會進(jìn)入默認(rèn)的文件路徑,有的時候我們想要打開不再默認(rèn)路徑下的腳本文件署隘,就可以選擇指定目錄啟動:
jupyter notebook <dir>
其中<dir>
為需要打開的目錄宠能,可以是相對路徑也可以是絕對路徑。
例如磁餐,在Windows下违崇,我們可以在文件資源管理器的地址欄輸入cmd來快速啟動命令行,隨后僅需鍵入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)容取消注釋泥张,并將引號內(nèi)更改為您需要指定的工作空間地址即可呵恢。
隨后重新啟動Jupyter Notebook即可在指定空間打開。
主題更換方法
基于Jupyterthemes
Jupyter Notebook默認(rèn)主題為淺色主題媚创,雖然文字顯示清晰渗钉,但長時間使用可能對眼睛刺激較大。我們可以借用Jupyterthemes插件來為Notebook更換合適的主題。
首先在CMD/Terminal輸入如下命令安裝Jupyterthemes插件:
pip install jupyterthemes
安裝完成后即可使用鳄橘。該庫在使用時僅取兩首字母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
因為Jupyter Notebook是在瀏覽器呈現(xiàn)晒衩,那么任意形式的更換樣式表就可以實現(xiàn)對主題的修改嗤瞎。例如較為著名的Stylish插件的社區(qū)中就有很多開發(fā)者分享了自己定制的Jupyter Notebook主題,這些主題的呈現(xiàn)效果整體上優(yōu)于jupyterthemes听系。
而且,如果您熟練掌握CSS語法虹菲,也可以自行基于Stylish定制合適的Jupyter Notebook主題靠胜。
魔法命令
魔法命令在代碼塊中執(zhí)行,但是不屬于Python語言的代碼级及。使用魔法命令可以在執(zhí)行代碼的同時執(zhí)行附加效果掺栅。
執(zhí)行Shell命令
執(zhí)行Shell命令并不是魔法命令的一部分硕并,但是功能類似。
在代碼塊中鍵入!
+shell命令即可在當(dāng)前目錄執(zhí)行址愿。
典型的應(yīng)用場景例如,當(dāng)我們需要使用某個包但是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
或者省艳,我們共享腳本給他人運行時娘纷,需要其下載一些文件,就可以使用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 腳本文件地址
可以在接下來的代碼塊中運行指定的腳本文件跋炕。
%time系列
%time {一行代碼}
%%time
{代碼塊剩余內(nèi)容}
%timeit {一行代碼}
%%timeit
{代碼塊剩余內(nèi)容}
使用%time和%%time可以計算一行/一個單元格內(nèi)的代碼執(zhí)行一次所需的時間赖晶。這在模型訓(xùn)練和大文件讀取時是很實用的,有助于使用者把握時間和環(huán)境性能辐烂。
而%timeit和%%timeit會將指定代碼內(nèi)容執(zhí)行很多次遏插,最后計算出平均運行所需時間捂贿,一般用于算法的評估。
%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
可以刪除某個變量胳嘲;使用%reset
可以清除所有變量眷蜓。
%load
使用%load
可以加載腳本文件內(nèi)容并填充到代碼塊中。值得一提的是%load后不僅可以接本地計算機上的絕對地址和相對地址胎围,還可以接其他服務(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)台夺,但是仍然會有效保存)径玖。
導(dǎo)出的PDF是經(jīng)由LaTeX轉(zhuǎn)化的,最大限度地保留了原始腳本的呈現(xiàn)效果颤介,在代碼塊和輸出區(qū)旁會顯示In/Out+編號梳星,調(diào)整適配到合適的紙張大小。需要注意的是在Jupyter Notebook中直接導(dǎo)出PDF滚朵,不支持顯示中文冤灾,但是也有可以導(dǎo)出含中文PDF的方法。
-
經(jīng)由md導(dǎo)出PDF
在Jupyter Notebook中以markdown格式導(dǎo)出文件后辕近,使用Typora等markdown文本編輯器再對格式進(jìn)行轉(zhuǎn)換韵吨,可以生成PDF以供打印或?qū)С觥S捎谵D(zhuǎn)換為PDF的過程是在編輯器中進(jìn)行的移宅,所以最終格式是由編輯器決定的归粉,而且不會保留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在同目錄下鲁捏。
升級體驗
Jupyter Notebook 已經(jīng)展現(xiàn)出了它在數(shù)據(jù)分析與處理方面的便捷性,但是使用下來還是有一些體驗可以優(yōu)化萧芙,例如:
- 相比于傳統(tǒng) IDE给梅,文件目錄和腳本操作頁面是分開的,如果需要切換文件可能比較麻煩
- Notebook 需要先單獨在終端啟動双揪,才具有查看
.ipynb
文件的能力动羽,不能直接雙擊打開
這里提供兩個能夠緩解上述使用痛點的工具,因為只是升級體驗渔期,這兩個工具的基本使用和 Notebook 類似运吓,就不再贅述。
JupyterLab
Jupyter Lab 和 Jupyter Notebook 一樣同屬于 Jupyter Project疯趟,二者在使用上幾乎一致拘哨,個人認(rèn)為 Jupyter Lab 是在 Notebook 基礎(chǔ)上進(jìn)行了升級。
安裝與啟動
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 中輸入如下命令即可啟動:
jupyter-lab
一般而言矾策,系統(tǒng)會幫您在默認(rèn)瀏覽器打開 Jupyter Lab 主界面(文件系統(tǒng)),如果沒有自動打開峭沦,您也可以參照命令行輸出在瀏覽器自行進(jìn)入贾虽。
界面展示
Lab 最主要變化在于在頁面左側(cè)加入了文件目錄,打開的標(biāo)簽頁以內(nèi)嵌標(biāo)簽頁而不是瀏覽器標(biāo)簽頁展示吼鱼。
對 .ipynb
文件的操作蓬豁,Lab 和 Notebook 完全相同,因此切換成本很低菇肃!
同時地粪,Jupyter Lab 支持渲染 csv 等結(jié)構(gòu)化數(shù)據(jù)為表格形式,對純文本文件也可以直接編輯琐谤。
VS Code
VS Code 是一款強大輕量級 IDE蟆技,支持豐富的語言拓展,同時還有多種強力插件。
安裝與啟動
如果沒有安裝 VS Code质礼,可以前往官方頁面下載安裝: Download Visual Studio Code - Mac, Linux, Windows
如果已安裝 VS Code旺聚,但是沒有安裝 Python,可以在擴展頁面安裝:
VS Code 安裝 Jupyter 擴展后眶蕉,就可以支持渲染 .ipynb
文件了砰粹,在擴展頁面安裝即可:
界面展示
VS Code 對 .ipynb
腳本的頁面操作也很類似,同時也支持文件樹造挽、版本控制等碱璃,相對而言功能更加強大。
VS Code 相對于 Notebook 的提升在于:增加了文件目錄饭入,同時能夠在文件夾中直接雙擊 .ipynb
文件打開預(yù)覽嵌器,不需要啟動服務(wù)就可以渲染查看。