Python編程神器Jupyter Notebook使用的28個祕訣(附代碼)

Python編程神器Jupyter Notebook使用的28個秘訣(附代碼)

本文約2800字,建議閱讀8分鐘

本文總結了28種Jupyter Notebook的使用技巧。

[ 導讀 ]最近做實驗一直是用Jupyter Notebook編程,有一種打草稿的便捷感,在dataquest上看到一篇博客總結了28種Jupyter Notebook的使用技巧。為了方便大家理解,對原文一個簡略的地方進行了適當的解釋和擴充。希望大家在用Jupyter Notebook編程時可以更加爽快。

Python編程神器Jupyter Notebook使用的28個秘訣(附代碼)


00 Jupyter Notebook是什麼

Jupyter Notebook,以前稱為IPython Notebook,是一種靈活的python編程工具,可以用來創建可讀的分析。在Jupyter Notebook上可以將代碼、圖像、註釋、公式和可視化結果保存在一起。在這篇文章中,我們介紹了一些非常實用的Jupyter Notebook高級使用技巧,讓Jupyter Notebook成為你編程的超級利器!

Python編程神器Jupyter Notebook使用的28個秘訣(附代碼)


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
  • Entercommand 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-checkercode-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”獲取更多講座福利及優質內容。


分享到:


相關文章: