1. 程式人生 > >左手程式設計師,右手作家:你必須會的Jupyter Notebook

左手程式設計師,右手作家:你必須會的Jupyter Notebook

Python·Jupyter Notebook各種使用方法記錄·持續更新

一、 Jupyter NoteBook的安裝

1.1 新版本Anaconda自帶Jupyter

  • 目前,最新版本的Anaconda是自帶Jupyter NoteBook的,不需要再單獨安裝 
    image_1b4e5l3s6r5i18ok1rnd195i1u549.png-31.6kB

1.2 老版本Anacodna需自己安裝Jupyter

  • 安裝Jupyter Notebook的先決條件:已經安裝了python(python 2.7 或者是python3.3)

  • 具體的安裝方法:

    • 官方建議利用Anaconda安裝Jupyter
    • 安裝完成Anaconda後,如果該Anaconda並不自帶Jupyter Noterbook,那麼,開啟cmd,輸入:conda install jupyter
  • 這樣安裝完的jupyter不具有New a terminal的功能 
    經過各種查詢才知道,原來是因為windows不具有terminal需要的TTY,所以,windows下的jupyter是不支援Terminal模式的,而且短期內也沒有增加這種支援的計劃

這裡寫圖片描述

二、 更改Jupyter notebook的工作空間

2.1 Jupyter的工作空間在哪裡指定?

在其配置檔案ipython_notebook_config.py中,有如下一句

# The directory to use for notebooks and kernels.
# c.NotebookApp.notebook_dir = u''
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

該句就是用來指定其工作空間的,例如,預設的工作空間是:使用者名稱資料夾,例如,現在想要將工作空間變為D:\Jupyter,那麼,需要做如下更改(要記得刪掉註釋#)

# The directory to use for notebooks and kernels.
c.NotebookApp.notebook_dir = u'D:\Jupyter'
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

注意:路徑最後一級後面不要加符號“\”

2.2 如何找到該配置檔案?

  • 在cmd中輸入jupyter notebook --generate-config
  • 如果該配置檔案已經存在,那麼,會出現如下資訊,從中可以見到配置檔案存在的位置,注意,此時,輸入N,不要overwrite 
    image_1b4e641ot340t3g1asfdv81972m.png-16.9kB
  • 如果該配置檔案不存在,那麼,將會初始化產生一個配置檔案

在cmd中輸入:ipython profile create 
可以找到關於jupyter的配置檔案的位置

三、Jupyter的各種快捷鍵

  • 執行當前cell,並自動跳到下一個cell:Shift Enter

  • 執行當前cell,執行後不自動調轉到下一個cell:Ctrl-Enter

  • 是當前的cell進入編輯模式:Enter

  • 退出當前cell的編輯模式:Esc

  • 刪除當前的cell:雙D

  • 為當前的cell加入line number:單L

  • 將當前的cell轉化為具有一級標題的maskdown:單1

  • 將當前的cell轉化為具有二級標題的maskdown:單2

  • 將當前的cell轉化為具有三級標題的maskdown:單3

  • 為一行或者多行新增/取消註釋:Crtl /

  • 撤銷對某個cell的刪除:z

  • 瀏覽器的各個Tab之間切換:Crtl PgUpCrtl PgDn

  • 快速跳轉到首個cell:Crtl Home

  • 快速跳轉到最後一個cell:Crtl End

四、Jupyter Notebook如何匯入程式碼

即匯入程式碼到jupyter notebook的cell中

4.1 將本地的.py檔案load到jupyter的一個cell中

問題背景:有一個test.py檔案,需要將其載入到jupyter的一個cell中 
test.py內容如下:

import caffe
SolverName = "/root/workspace"
sovler = caffe.AdamSolver(SolverName)
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

方法步驟: 
(1)在需要匯入該段程式碼的cell中輸入

%load test.py #test.py是當前路徑下的一個python檔案
  • 1
  • 1

這裡寫圖片描述

(2)執行該cell 
利用快捷鍵“Shift+Enter”,可以看到如下結果: 
這裡寫圖片描述

(3)可以看到,執行後,%load test.py被自動加入了註釋符號#,test.py中的所有程式碼都被load到了當前的cell中

4.2 從網路load程式碼到jupyter

  • 在cell中輸入%load http://.....,然後執行該cell,就會將load後面所對應地址的程式碼load到當前的cell中;

    • 首先,在想要匯入該段程式碼的cell中輸入

      %load test.py #test.py是當前路徑下的一個python檔案
      • 1
      • 1
    • 然後,Shift+Enter執行,可以看到如下結果: 
      利用load匯入python檔案
      可以看到,執行後,%load test.py被自動加入了註釋符號#,test.py中的所有程式碼都被load到了當前的cell中

五、Jupyter執行python檔案

  • 利用jupyter的cell是可以執行python檔案的,即在cell中執行如下程式碼:
%run file.py
  • 1
  • 1

file.py為要執行的python程式,結果會顯示在該cell中 
這裡寫圖片描述
這裡寫圖片描述

六、Jupyter一些其他瑣碎用法

6.1 jupyter的cell可以作為unix command使用

具體方法為:在unitx command前面加入一個感嘆號“!”

例子: 
檢視python版本:!python --version 
執行python檔案:!python myfile.py

6.2 Magic functions

6.3 獲取current working directory

即當前執行的程式碼所在的路徑 
具體方法:current_path = %pwd 
這樣得到的current_path就是當前工作路徑的字元轉

6.4 使用Matplotlib繪圖

在Jupyter Notebook中,如果使用Matplotlib繪圖,有時是彈不出影象框的,此時,可以在開頭加入

%matplotlib inline
  • 1
  • 1

七、Jupyter中的Markdown

7.1 在jupyter中設定link,需要設定兩部分:

  • 要跳到的位置(the destination) 
    需要在要跳轉到的位置新增下面語句:

    <a id='the_destination'></a>
    • 1
    • 1

    這裡的id取值任意賦值,下面在新增連結時要用

  • 需要新增連結的文字(an internal hyperlink to the destination),即點選該處可以跳轉到the destination,在需要新增連結的文字後面加入:

    [需要新增連線的文字](#the_destination)
    • 1
    • 1
  • 下面是一個例子: 
    原始碼: 
    這裡寫圖片描述
    效果圖: 
    這裡寫圖片描述

7.2 為Jupyter Notebook新增目錄功能

  • 原始的Jupyter是不支援markdown新增目錄功能的
  • 具體方法: 
    • 利用Anaconda安裝Jupyter Notebook extensions 
      conda install -c conda-forge jupyter_contrib_nbextensions 
      image_1b4e9lcot1eo9ing1kk19l3t2713.png-71.7kB
    • 開啟Jupyter Notebook,在它的(新增的)Nbextensions標籤下勾選“Table of Contents(2)” 
      image_1b4ea0o2i1jofnhlu1avj53jl9.png-105.3kB
    • 開啟一個.jpynb檔案,發現,目錄功能可用了! 
      image_1b4ea6tov2ld1pckpnlujf4g513.png-101kB

在資料分析的道路上,你一定曾有過為新發現而激動不已的時刻,此時你急於將自己的發現告訴大家,卻遇到了這樣的問題:如何將我的分析過程清晰地表述出來呢?

為了能與同行們有效溝通,你需要重現整個分析過程,並將說明文字、程式碼、圖表、公式、結論都整合在一個文件中。顯然傳統的文字編輯工具並不能滿足這一需求,所以這兒隆重推薦一款神器 Jupyter Notebook,不僅能在文件中執行程式碼,還能以網頁形式分享。

下圖簡單展示了Jupyter Notebook 文件的樣式,更多示例可在 nbviewer 中找到。


Jupyter Notebook 文件示例

本文將按如下內容來展開:

一、Jupyter Notebook 介紹

  • 文學程式設計
  • 歷史傳承
  • 優點

二、Jupyter Notebook 使用入門

  • 安裝
  • 執行
  • 介面

三、Jupyter Notebook 進階功能

  • 數學公式編輯
  • 幻燈片製作
  • 魔術關鍵字

一、Jupyter Notebook 介紹

文學程式設計

在介紹 Jupyter Notebook 之前,讓我們先來看一個概念:文學程式設計 ( Literate programming ),這是由 Donald Knuth 提出的程式設計方法。傳統的結構化程式設計,人們需要按計算機的邏輯順序來編寫程式碼;與此相反,文學程式設計則可以讓人們按照自己的思維邏輯來開發程式。

簡單來說,文學程式設計的讀者不是機器,而是人。 我們從寫出讓機器讀懂的程式碼,過渡到向人們解說如何讓機器實現我們的想法,其中除了程式碼,更多的是敘述性的文字、圖表等內容。這麼一看,這不正是資料分析人員所需要的編碼風格麼?不僅要當好一個程式設計師,還得當好一個作家。那麼 Jupyter Notebook 就是不可或缺的一款集程式設計和寫作於一體的效率工具。

歷史傳承

也許說到 Jupyter 你會覺得陌生,但想必你或多或少聽過鼎鼎大名的 IPython。其實Jupyter 脫胎於 IPython 專案,IPython 顧名思義,是專注於 Python 的專案,但隨著專案發展壯大,已經不僅僅侷限於 Python 這一種程式語言了。Jupyter 的名字就很好地釋義了這一發展過程,它是 Julia、Python 以及 R 語言的組合,字形相近於木星(Jupiter),而且現在支援的語言也遠超這三種了。

優點

以下列舉了 Jupyter Notebook 的眾多優點:

  • 極其適合資料分析
    想象一下如下混亂的場景:你在終端中執行程式,視覺化結果卻顯示在另一個視窗中,包含函式和類的指令碼存在其他文件中,更可惡的是你還需另外寫一份說明文件來解釋程式如何執行以及結果如何。此時 Jupyter Notebook 從天而降,將所有內容收歸一處,你是不是頓覺靈臺清明,思路更加清晰了呢?
  • 支援多語言
    也許你習慣使用 R 語言來做資料分析,或者是想用學術界常用的 MATLAB 和 Mathematica,這些都不成問題,只要安裝相對應的核(kernel)即可。這裡列出了 Jupyter 支援的所有語言,供您參考。
  • 分享便捷
    支援以網頁的形式分享,GitHub 中天然支援 Notebook 展示,也可以通過 nbviewer 分享你的文件。當然也支援匯出成 HTML、Markdown 、PDF 等多種格式的文件。
  • 遠端執行
    在任何地點都可以通過網路連結遠端伺服器來實現運算,這裡給出一個遠端執行的例子,可以體驗一下 Jupyter Notebook。
  • 互動式展現
    不僅可以輸出圖片、視訊、數學公式,甚至可以呈現一些互動的視覺化內容,比如可以縮放的地圖或者是可以旋轉的三維模型。這就需要互動式外掛(Interactive widgets)來支援,更多內容請參考這裡

二、Jupyter Notebook 使用入門

安裝

對於初學者,最簡單的方法是安裝 Anaconda,因為它自帶了 Jupyter Notebook。如果想進一步瞭解 Anaconda 的使用方法,可參考我的上一篇文章《致Python初學者們 – Anaconda入門使用指南》

對於有經驗的同學,自然使用命令列最為便捷。

如果在 conda 環境中,可以使用如下命令安裝:

1conda install jupyter notebook

或者直接通過 pip 安裝:

1 pipinstalljupyternotebook

更多的安裝說明請參考官網

執行

如果使用 Anaconda,可以在其 Navigator 圖形介面中點選開啟 Notebook。但是最快捷的方法還是在命令列中輸入:

1jupyter notebook

此時你的 Web 瀏覽器被自動開啟,顯示檔案目錄。通過點選右上角的 new 建立新文件。


進入 notebook

而關閉 notebook 文件可以通過選擇檔名前的複選框後,點選 Shutdown 按鈕實現。如果要關閉整個服務,則在原來的終端中按 Control + C 兩次。


退出 notebook

介面

Notebook 文件是由一系列單元(Cell)構成,主要有兩種形式的單元:

  • 程式碼單元:這裡是你編寫程式碼的地方,通過按 Shift + Enter 執行程式碼,其結果顯示在本單元下方。程式碼單元左邊有 In [1]: 這樣的序列標記,方便人們檢視程式碼的執行次序。
  • Markdown 單元:在這裡對文字進行編輯,採用 markdown 的語法規範,可以設定文字格式、插入連結、圖片甚至數學公式。同樣使用 Shift + Enter 執行 markdown 單元來顯示格式化的文字。


Jupyter Notebook 編輯介面

類似於 Linux 的 Vim 編輯器,在 notebook 中也有兩種模式:

  • 編輯模式:編輯文字和程式碼。選中單元並按 Enter 鍵進入編輯模式,此時單元左側顯示綠色豎線。
  • 命令模式:用於執行鍵盤輸入的快捷命令。通過 Esc 鍵進入命令模式,此時單元左側顯示藍色豎線。

如果要使用快捷鍵,首先按 Esc 鍵進入命令模式,然後按相應的鍵實現對文件的操作。比如切換成程式碼單元(Y)或 markdown 單元(M),或者在本單元的下方增加一單元(B)。檢視所有快捷命令可以按H

儘管一開始需要花費一些學習成本,但熟練使用快捷鍵將大大提高工作效率。試想你在鍵盤上十指如飛時,如果還需要通過滑鼠來操作文件,是不是很影響思考速度呢?

三、Jupyter Notebook 進階功能

數學公式編輯

如果你曾做過嚴肅的學術研究,一定對 LaTeX 並不陌生,這簡直是寫科研論文的必備工具,不但能實現嚴格的文件排版,而且能編輯複雜的數學公式。在 Jupyter Notebook 的 markdown 單元中我們也可以使用 LaTeX 的語法來插入數學公式。

在文字行中插入數學公式,使用一對 $符號,比如質能方程 $E = mc^2$。如果要插入一個數學區塊,則使用一對美元$符號。比如下面公式表示 z=x/y:

1 $$z=frac{x}{y}$$

幻燈片製作

既然Jupyter Notebook 擅長展示資料分析的過程,除了通過網頁形式分享外,當然也可以將其製作成幻燈片的形式。這裡有一個幻燈片示例供參考,其製作風格簡潔明晰。

那麼如何用 Jupyter Notebook 製作幻燈片呢?首先在 notebook 的選單欄選擇 View > Cell Toolbar > Slideshow,這時在文件的每個單元右上角顯示了 Slide Type 的選項。通過設定不同的型別,來控制幻燈片的格式。有如下5中型別:

  • Slide:主頁面,通過按左右方向鍵進行切換。
  • Sub-Slide:副頁面,通過按上下方向鍵進行切換。
  • Fragment:一開始是隱藏的,按空格鍵或方向鍵後顯示,實現動態效果。
  • Skip:在幻燈片中不顯示的單元。
  • Notes:作為演講者的備忘筆記,也不在幻燈片中顯示。


Jupyter Notebook 幻燈片設定

當編寫好了幻燈片形式的 notebook,如何來演示呢?這時需要使用 nbconvert

1 jupyternbconvertnotebook.ipynb--toslides--postserve

在命令列中敲入上述程式碼後,瀏覽器會自動開啟相應的幻燈片。

魔術關鍵字

魔術關鍵字(magic keywords),正如其名,是用於控制 notebook 的特殊的命令。它們執行在程式碼單元中,以 % 或者 %% 開頭,前者控制一行,後者控制整個單元。

比如,要得到程式碼執行的時間,則可以使用 %timeit;如果要在文件中顯示 matplotlib 包生成的圖形,則使用 % matplotlib inline;如果要做程式碼除錯,則使用 %pdb。但注意這些命令大多是在Python kernel 中適用的,其他 kernel 大多不適用。有許許多多的魔術關鍵字可以使用,更詳細的清單請參考 Built-in magic commands 。