天天看點

必須要會的 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)來支援,更多内容請參考這裡。

對于初學者,最簡單的方法是安裝 anaconda,因為它自帶了 jupyter notebook。如果想進一步了解 anaconda 的使用方法,可參考:https://www.jianshu.com/p/169403f7e40c。

對于有經驗的同學,自然使用指令行最為便捷。

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

或者直接通過 pip 安裝:

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

如果使用 anaconda,可以在其 navigator 圖形界面中點選打開 notebook。但是最快捷的方法還是在指令行中輸入:

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

必須要會的 Jupyter Notebook

進入 notebook

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

必須要會的 Jupyter Notebook

退出 notebook

notebook 文檔是由一系列單元(cell)構成,主要有兩種形式的單元:

代碼單元:這裡是你編寫代碼的地方,通過按 shift + enter 運作代碼,其結果顯示在本單元下方。代碼單元左邊有 in [1]: 這樣的序列标記,友善人們檢視代碼的執行次序。

markdown 單元:在這裡對文本進行編輯,采用 markdown 的文法規範,可以設定文本格式、插傳入連結接、圖檔甚至數學公式。同樣使用 shift + enter 運作 markdown 單元來顯示格式化的文本。

必須要會的 Jupyter Notebook

jupyter notebook 編輯界面

類似于 linux 的 vim 編輯器,在 notebook 中也有兩種模式:

編輯模式:編輯文本和代碼。選中單元并按 enter 鍵進入編輯模式,此時單元左側顯示綠色豎線。

指令模式:用于執行鍵盤輸入的快捷指令。通過 esc 鍵進入指令模式,此時單元左側顯示藍色豎線。

如果要使用快捷鍵,首先按 esc 鍵進入指令模式,然後按相應的鍵實作對文檔的操作。比如切換成代碼單元(y)或 markdown 單元(m),或者在本單元的下方增加一單元(b)。檢視所有快捷指令可以按h。

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

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

在文本行中插入數學公式,使用一對 $符号,比如質能方程 $e = mc^2$。如果要插入一個數學區塊,則使用一對 $$ 符号。比如下面公式表示 z=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

jupyter notebook 幻燈片設定

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

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

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

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

本文給出了許多擴充連結供參考,這裡彙總如下,供您參考:

jupyter notebook 官網

文學程式設計 literate programming

ipython 官網

latex官網

latex 文法:a primer on using latex in jupyter notebooks

魔術關鍵字:built-in magic commands

必須要會的 Jupyter Notebook
必須要會的 Jupyter Notebook

繼續閱讀