1. 程式人生 > >Jupyter Notebook 快速入門簡易教程

Jupyter Notebook 快速入門簡易教程

Jupyter Notebook(此前被稱為 IPython notebook)是一個互動式筆記本,支援執行 40 多種程式語言。在本文中,我們將介紹 Jupyter notebook 的主要特性,以及為什麼對於希望編寫漂亮的互動式文件的人來說是一個強大工具。

在開始使用 notebook 之前,我們先需要安裝該庫。你可以在 Jupyter 官網上找到完整的步驟。

譯者注:其實只要pip install jupyter就可以了

jupyter notebook

執行上面的命令之後,你將看到類似下面這樣的輸出:

[I 20:06:36.367 NotebookApp] Writing notebook server cookie secret to /run/user/1000/jupyter/notebook_cookie_secret
[I 20:06:36.813 NotebookApp] Serving notebooks from local directory: /home/your_username
[I 20:06:36.813 NotebookApp] 0 active kernels
[I 20:06:36.813 NotebookApp] The IPython Notebook is running at: http://localhost:8888/
[I 20:06:36.813 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

同時,會在你開啟 notebook 的資料夾中啟動 Jupyter 主介面,如下所示:

Jupyter 主介面

如果想新建一個 notebook,只需要點選New,選擇你希望啟動的 notebook 型別即可。

notebook 型別

這裡,因為我只有一個 Python 核心,所以我們執行一個 Python notebook。在新開啟的標籤頁中,我們會看到 notebook 介面,目前裡面什麼也沒有。

notebook 介面

notebook 介面由以下部分組成:

  1. notebook 的名稱
  2. 主工具欄,提供了儲存、匯出、過載 notebook,以及重啟核心等選項
  3. 快捷鍵
  4. notebook 主要區域,包含了 notebook 的內容編輯區

慢慢熟悉這些選單和選項。如果想要詳細瞭解有關 notebook 或一些庫的具體話題,可以使用選單欄右側的幫助選單。

下方的主要區域,由被稱為單元格的部分組成。每個 notebook 由多個單元格構成,而每個單元格又可以有不同的用途。

下方截圖中看到的是一個程式碼單元格(code cell),以[ ]開頭。在這種型別的單元格中,可以輸入任意程式碼並執行。例如,輸入1 + 2並按下Shift + Enter。之後,單元格中的程式碼就會被計算,游標也會被移動動一個新的單元格中。你會得到如下結果:

程式碼單元格

根據綠色邊框線,我們可以輕鬆地識別出當前工作的單元格。接下來,我們在第二個單元格中輸入些其他程式碼,例如:

for i in range(5):
    print(i)

對上面的程式碼求值時,你會得到:

jupyter 程式碼執行例項

和前一個示例一樣,程式碼被計算之後,馬上就會顯示結果。你應該注意到了,這次沒有出現類似Out[2]這樣的文字。這是因為我們將結果打印出來了,沒有返回任何的值。

notebook 有一個非常有趣的特性,就是可以修改之前的單元格,對其重新計算,這樣就可以更新整個文件了。試著把游標移回第一個單元格,並將1 + 2修改成2 + 3,然後按下Shift + Enter重新計算該單元格。你會發現結果馬上就更新成了 5。如果你不想重新執行整個指令碼,只想用不同的引數測試某個程式的話,這個特性顯得尤其強大。不過,你也可以重新計算整個 notebook,只要點選Cell -> Run all即可。

現在我們已經知道了如何輸入程式碼,為什麼不嘗試著讓這個 notebook 更加漂亮、內容更豐富?為此,我們需要使用其他型別的單元格,即 Header單元格和 Markdown單元格。

首先,我們在頂部新增一個 notebook 的標題。選中第一個單元格,然後點選Insert -> Insert單元格above(在上方插入單元格)。你會發現,文件的頂部馬上就出現了一個新的單元格。點選在快捷鍵欄中的單元格型別,將其變成一個標題單元格(heading cell):

變成一個標題 cell

選中下拉選項中的 Heading。然後會出現一個彈出訊息,告訴你如何建立不同層級的標題,這樣你就有了一個不同型別的 cell:

一個不同型別的 cell

這個單元格以#標記開頭,意味著這是一個一級標題。如果需要子標題,可以使用以下標記表示(改變單元格型別時彈出訊息中有解釋):

# : 一級標題
## : 二級標題
### : 三級標題
...

#之後寫下文件的標題,然後計算該單元格。你會發現一個樣式非常好看的標題。作為示例和練習,我還添加了其他幾個標題單元格:

添加了其他幾個標題 cell

新增好標題之後,我們在編寫一些解釋,介紹每個程式碼單元格中的情況。為此,我們要在相應的地方插入單元格,然後將其型別變成 Markdown。然後,計算新的單元格。就這樣,你的解釋文字就漂亮地渲染出來了!

解釋文字就漂亮地渲染出來了

最後,你可以重新命名該 notebook,點選Fiel -> Rename,然後輸入新的名稱。這樣,新的名稱將會出現在視窗的左上角,在 Jupyter 的標誌旁邊。

單元格操作

高階單元格操作,將讓編寫 notebook 變得更加方便。舉例如下:

  • 如果想刪除某個單元格,可以選擇該單元格,然後依次點選Edit -> Delete Cell
  • 如果想移動某個單元格,只需要依次點選Edit -> Move cell [up | down]
  • 如果想剪貼某個單元測,可以先點選Edit -> Cut Cell,然後在點選Edit -> Paste Cell [Above | Below]
  • 如果你的 notebook 中有很多單元格只需要執行一次,或者想一次性執行大段程式碼,那麼可以選擇合併這些單元格。點選Edit -> Merge Cell [Above | below]

記住這些操作,它們可以幫助你節省許多時間。

Markdown 單元格高階用法

我們再來看看 Markdown 單元格。雖然它的型別是 markdown,但是這類單元格也接受 HTML 程式碼。這樣,你就可以在單元格類實現更加豐富的樣式,新增圖片,等等。例如,如果想在 notebook 中新增 Jupyter 的 logo,將其大小設定為 100px x 100px,並且放置在單元格左側,可以這樣編寫:

<img src="http://blog.jupyter.org/content/images/2015/02/jupyter-sq-text.png"
style="width:100px;height:100px;float:left">

計算該單元格之後,會出現這樣的結果:

計算該單元格之後,會出現這樣的結果

另外,markdown 單元格還支援 LaTex 語法。例如:

$$\int_0^{+\infty} x^2 dx$$

計算上述單元格,將獲得下面的 LaTex 方程式:

LaTex 方程式

匯出功能

notebook 還有一個強大的特性,就是其匯出功能。可以將 notebook 匯出為多種格式:

  • HTML
  • Markdown
  • ReST
  • PDF(通過 LaTeX)
  • Raw Python

匯出 PDF 功能,可以讓你不用寫 LaTex 即可建立漂亮的 PDF 文件。你還可以將 notebook 作為網頁釋出在你的網站上。甚至,你可以匯出為 ReST 格式,作為軟體庫的文件。

Matplotlib 整合

如果你用 Python 繪製過圖形,那你肯定知道 matplotlib。Matplotlib 是一個用於建立漂亮圖形的 Python 庫,結合 Jupyter notebook 使用時體驗更佳。

要想在 Jupyter notebook 中使用 matplotlib,需要告訴 Jupyter 獲取 matplotlib 生成的所有圖形,並將其嵌入 notebook 中。為此,需要計算:

%matplotlib inline

譯註:要想執行成功,需要先pip install matplotlib

執行這個指令可能要花個幾秒鐘,但是在 notebook 中需要執行一次即可。接下來,我們來繪製一個圖形,看看具體的整合效果:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(20)
y = x**2

plt.plot(x, y)

上面的程式碼將繪製方程式 y=x^2 。計算單元格後,會得到如下圖形:

繪製方程式 y=x^2

我們看到,繪製出的圖形直接新增在了 notebook 中,就在程式碼的下面。我們可以之後修改程式碼,重新計算,這時圖形也會動態更新。這是每個資料科學家都想要的一個特性:將程式碼和圖片放在同一個檔案中,清楚地看出每段程式碼的效果。

非本地核心

我們可以非常容易地在一臺電腦上啟動 Jupyter,而且支援多人通過網路連線同一個 Jupyter 例項。在上一篇文章中,你有沒有注意啟動 Jupyter 時出現過這樣一段話:

The IPython Notebook is running at: http://localhost:8888/

這意味著,你的 notebook 是本地執行的,可以在瀏覽器上開啟 http://localhost:8888/ ,從而訪問 notebook。你也可以修改下配置,讓該 notebook 可以被公開訪問。這樣,任何知道 notebook 地址的人都可以連線到 notebook 進行遠端修改。

結語

從這兩篇快速入門介紹中,我們可以看到:Jupyter notebook 是一個非常強大的工具,可以建立漂亮的互動式文件,製作教學材料,等等。建議你馬上開始使用 Jupyter notebook,探索更多 notebook 的強大功能。