左手代碼,右手寫作:你必須會的Jupyter Notebook

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

為了能與同行們有效溝通,你需要重現整個分析過程,并將說明文字、代碼、圖表、公式、結論都整合在一個文檔中。顯然傳統的文本編輯工具并不能滿足這一需求,所以這兒隆重推薦一款神器 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 環境中,可以使用如下命令安裝:

conda install jupyter notebook

或者直接通過 pip 安裝:

pip install jupyter notebook

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

運行

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

jupyter 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:

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

如何在 notebook 中使用 LaTeX,可進一步參考 A Primer on Using LaTeX in Jupyter Notebooks 這篇文章。

幻燈片制作

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

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

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

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

jupyter nbconvert notebook.ipynb --to slides --post serve

在命令行中敲入上述代碼后,瀏覽器會自動打開相應的幻燈片。

魔術關鍵字

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

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


相關資源匯總

本文給出了許多擴展鏈接供參考,這里匯總如下,供您參考:

  1. Jupyter Notebook 官網
  2. 文學編程 Literate programming
  3. IPython 官網
  4. LaTeX官網
  5. LaTeX 語法:A Primer on Using LaTeX in Jupyter Notebooks
  6. 魔術關鍵字:Built-in magic commands
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,401評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,011評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,263評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,543評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,323評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,874評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,968評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,095評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,605評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,551評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,720評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,242評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,961評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,358評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,612評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,330評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,690評論 2 370

推薦閱讀更多精彩內容