本文約2800字,建議閱讀8分鐘
本文總結了28種Jupyter Notebook的使用技巧。
[ 導讀 ]最近做實驗一直是用Jupyter Notebook編程,有一種打草稿的便捷感,在dataquest上看到一篇博客總結了28種Jupyter Notebook的使用技巧。為了方便大家理解,對原文一個簡略的地方進行了適當的解釋和擴充。希望大家在用Jupyter Notebook編程時可以更加爽快。
00 Jupyter Notebook是什麼
Jupyter Notebook,以前稱為IPython Notebook,是一種靈活的python編程工具,可以用來創建可讀的分析。在Jupyter Notebook上可以將代碼、圖像、註釋、公式和可視化結果保存在一起。在這篇文章中,我們介紹了一些非常實用的Jupyter Notebook高級使用技巧,讓Jupyter Notebook成為你編程的超級利器!
01 實用的快捷鍵
Jupyter Notebook有很多的快捷鍵,編程時使用這些快捷鍵將提高你的編程效率。想知道Jupyter Notebook有哪些快捷鍵,你可以在它的下拉菜單Help>Keyboard Shortcuts中找到。或者在command model中按下H查看。每次更新Jupyter的時候你都最好看看有哪些新的快捷鍵。
還有一個方法調用快捷鍵,那就是使用Ctrl + Shift + P 調出command palette。在這個對話框中你可以輸入快捷功能的名字來使用快捷鍵,比如你想重啟kernel,那就在對話框中輸入’restar’,command palette會自動顯示候選的功能。這個功能類似Mac上的Spotlight工具。
我的一些常用快捷鍵:
- Esc進入command mode
- 在command mode下:A/B可以在上/下方插入新的cell, M切換到Markdown模式下,Y切回編程模式,D+D刪除當前cell
- Enter從command mode返回edit mode
- Shift + Tab會顯示你剛才輸入對象的文檔
- Ctrl + Shift + -將會分割你的cell
- Esc + F查找替換代碼(不包含輸出部分)
- Esc + O隱藏cell的輸出
- 你還可以選對多個cell進行操作:Shift + J 或Shift + Down向下選擇,Shift + K 或Shift + Up向上選擇, Shift + M合併多個cell
02 整齊的變量輸出
當你的cell最後是一個變量名,那麼你不需要用print就可以輸出了。特別是你要輸出Pandas DataFrames的時候,這很有用。
不過我要教你一個少有人知道的技巧,指定ast_note_interactivity參數為all來一次性輸出多個變量而不用print。
<code>ore.interactiveshellimportInteractiveShellInteractiveShell.ast_node_interactivity="all"
frompydatasetimportdata
quakes=data('quakes')
quakes.head()
quakes.tail()
#輸出的效果是將head和tail都輸出,而不是隻有tail輸出/<code>
如果你希望所有Jupyter 的cell都這樣輸出,創建一個文件~/.ipython/profile_default/ipython_config.py並輸入以下代碼:
<code>c=get_config()
#Runallnodesinteractively
c.InteractiveShell.ast_node_interactivity="all"/<code>
03 快速鏈接文檔
你可以在Help菜單中看到一些常用庫,如NumPy, Pandas, SciPy and Matplotlib的文檔。不過你還可以在方法前面加?來查看對應的文檔。
<code>#執行下面這行代碼在JupyterNotebkook中
?str.replace()
#將顯示文檔
Docstring:
S.replace(old,new[,count])->str
ReturnacopyofSwithalloccurrencesofsubstringoldreplacedbynew.Iftheoptionalargumentcountisgiven,onlythefirstcountoccurrencesarereplaced.
Type:method_descriptor/<code>
04 在notebooks中繪圖
常用的繪圖庫包括:matplotlib, Seaborn, mpld3, bokeh, plot.ly, Altair
05-15 魔法命令
由於Jupyter是基於IPython內核的,所以Jupyter可以使用IPython內核中的Magics命令。
可以使用%lsmagic查看所有的magic命令。
- %env,設置環境變量
<code>#Running%envwithoutanyarguments
#listsallenvironmentvariables
#Thelinebelowsetstheenvironment
#variable
%envOMP_NUM_THREADS%envOMP_NUM_THREADS=4
#output
env:OMP_NUM_THREADS=4/<code>
- %run,執行python代碼
有時候你有一份已經寫好的*.py文件,你可以在Jupyter中執行它。
<code>#thiswillexecuteandshowtheoutputfrom
#allcodecellsofthespecifiednotebook
%run./two-histograms.ipynb/<code>
- %load,導入外部腳本
有時候你想運行一個外部腳本,但是想用Jupyter加一些代碼,那麼你可以先把它load進Jupyter。
<code>#你有一個hello_world.py文件
#內容是if__name__=="__main__":print("HelloWorld!")
#在Jupyter中先用%load載入
%load./hello_world.py
#運行%load./hello_world.py命令後,在你的cell中就出現以下幾行代碼(你執行的%run語句會顯示已經註釋)
#%load./hello_world.py
if__name__=="__main__":
print("HelloWorld!")/<code>
- %store,在notebook之間傳遞變量
<code>#在notebookA中
data='thisisthestringIwanttopasstodifferentnotebook'
%storedata
deldata#Thishasdeletedthevariable
#在notebookB中
%store-rdata
print(data)#顯示thisisthestringIwanttopasstodifferentnotebook/<code>
- %who,顯示所有的變量
<code>#某個cell中有以下四行代碼
one="forthemoney"
two="fortheshow"
three="togetreadynowgocatgo"
%whostr
#輸出為
onethreetwo/<code>
- %%time和%timeit
%%time將提供代碼單次運行的信息,%%timeit將默認運行你的代碼100,000次,提供最快運行三次的平均結果。
- %%writefile和pycat,導出單元格的內容/顯示外部腳本的內容
%%writefile保存cell內容到外部文件。%pycat 正好相反。
- %prun,顯示程序中每個函數的調用信息
- %pdb,代碼調試
詳細的介紹在:
https://docs.python.org/3.5/library/pdb.html#debugger-commands
- 為視網膜(Retina)屏輸出高分辨率圖像
<code>#常規圖像
x=range(1000)
y=[i**2foriinx]
plt.plot(x,y)
plt.show();
#視網膜(Retina)圖像
%configInlineBackend.figure_format='retina'
plt.plot(x,y)
plt.show();/<code>
16 在函數末尾加入分號可以抑制輸出
在函數末尾加分號可以抑制函數的輸出。
17 執行shell命令
在shell命令前面加!
<code>ore.interactiveshellimportInteractiveShellInteractiveShell.ast_node_interactivity="all"
frompydatasetimportdata
quakes=data('quakes')
quakes.head()
quakes.tail()
#輸出的效果是將head和tail都輸出,而不是隻有tail輸出/<code>
18 用LaTex寫公式
在markdown cell 中書寫LaTeX時,它會被 MathJax 渲染成一個公式
19 在一個notebook中運行多種kernel的代碼
如果想要的話,你可以在一個notebook中運行多種kernel的代碼。
在每個cell的開頭使用相關的魔法命令來聲明你想使用的 kernel。
<code>c=get_config()
#Runallnodesinteractively
c.InteractiveShell.ast_node_interactivity="all"/<code>
20 為Jupyter安裝其他的kernel
Jupyter其實不止可以用於python編程,安裝一個R內核它就可以用於R語言編程。
<code>#通過Anaconda安裝
condainstall-crr-essentials
#手動安裝
#你需要先從https://cloud.r-project.org下載安裝R
#然後在R控制檯下運行以下代碼
install.packages(c('repr','IRdisplay','crayon','pbdZMQ','devtools'))
devtools::install_github('IRkernel/IRkernel')
IRkernel::installspec()#toregisterthekernelinthecurrentRinstallation/<code>
21 在同一個notebook中運行R和Python
你可以安裝rpy2用pip install rpy2
<code>%load_extrpy2.ipython
%Rrequire(ggplot2)
array([1],dtype=int32)
importpandasaspd
df=pd.DataFrame({
'Letter':['a','a','a','b','b','b','c','c','c'],
'X':[4,3,5,2,1,7,7,5,9],
'Y':[0,4,3,6,7,10,11,9,13],
'Z':[1,2,3,1,2,3,1,2,3]
})
%%R-idf
ggplot(data=df)+geom_point(aes(x=X,y=Y,color=Letter,size=Z))/<code>
22 用其他語言來寫函數
有時numpy的速度不夠快,我需要寫一些快速的代碼。
原則上,可以在動態庫中編譯函數並編寫python包裝器…
但是把這個無聊的部分做完會更好,對吧?
您可以用cython或fortran編寫函數,並直接從python代碼中使用這些函數。
首先你需要安裝cython:
<code>!pipinstallcythonfortran-magic
%load_extCython
%%cython
defmyltiply_by_2(floatx):
return2.0*x
myltiply_by_2(23.)/<code>
就個人而言我建議使用fortran:
<code>%load_extfortranmagic
%%fortran
subroutinecompute_fortran(x,y,z)
real,intent(in)::x(:),y(:)
real,intent(out)::z(size(x,1))
z=sin(x+y)
endsubroutinecompute_fortran
compute_fortran([1,2,3],[4,5,6])/<code>
你可以在Jupyter中使用多行編輯模式,只需要按住Alt鍵。
24 在Jupyter上安裝插件
Jupyter-contrib extensions是一個插件庫,包含了很多實用的插件,包括jupyter spell-checker和code-formatter。
使用以下命令安裝Jupyter-contrib extensions
<code>#執行下面這行代碼在JupyterNotebkook中
?str.replace()
#將顯示文檔
Docstring:
S.replace(old,new[,count])->str
ReturnacopyofSwithalloccurrencesofsubstringoldreplacedbynew.Iftheoptionalargumentcountisgiven,onlythefirstcountoccurrencesarereplaced.
Type:method_descriptor/<code>
安裝成功後Jupyter-contrib extensions會以菜單欄的方式顯示在界面上。
25 從notebook中創建PPT
安裝RISE工具就可以從已有的notebook中創建powerpoint風格的演示了。
conda install -c damianavila82 rise或pip install RISE安裝RISE。
<code>#激活RISE
jupyter-nbextensioninstallrise--py--sys-prefix
jupyter-nbextensionenablerise--py--sys-prefix/<code>
26 Jupyter輸出系統
使用IPython.display這個庫可以將多媒體文件排列輸出。
27 大數據分析
推薦使用ipyparallel,pyspark工具以及%%sql魔法命令進行大數據查詢,處理。
28 分享notebooks
通常分享*.ipynb文件是最簡單的方式。但是如果你要給不用Jupyter的人分享有以下幾種選擇:
- 使用File - Download as - HTMLl菜單選項將筆記本轉換為html文件
- 在github或者gist.github.com上分享notebooks
- 使用jupyterhub搭建你自己的分享系統
- 在dropbox上存儲你的notebook並且將鏈接掛到https://nbviewer.jupyter.org上
- 使用File - Download as - PDF保存notebook為PDF
最後希望大家看完這篇“安利”後可以愉快地使用Jupyter Notebook~
28 Jupyter Notebook Tips, Tricks, and Shortcuts
https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts
與作者交流
github:
https://github.com/keloli
blog:
https://www.jianshu.com/u/d055ee434e59
校對:林亦霖
— 完 —
關注清華-青島數據科學研究院官方微信公眾平臺“THU數據派”及姊妹號“數據派THU”獲取更多講座福利及優質內容。
閱讀更多 數據派THU 的文章