在介紹 Jupyter Notebook 以前,讓咱們先來看一個概念:文學編程 ( Literate programming ),這是由 Donald Knuth 提出的編程方法。傳統的結構化編程,人們須要按計算機的邏輯順序來編寫代碼;與此相反,文學編程則可讓人們按照本身的思惟邏輯來開發程序。html
簡單來講,文學編程的讀者不是機器,而是人。 咱們從寫出讓機器讀懂的代碼,過渡到向人們解說如何讓機器實現咱們的想法,其中除了代碼,更多的是敘述性的文字、圖表等內容。這麼一看,這不正是數據分析人員所須要的編碼風格麼?不只要當好一個程序員,還得當好一個做家。那麼 Jupyter Notebook 就是不可或缺的一款集編程和寫做於一體的效率工具。python
也許說到 Jupyter 你會以爲陌生,但想必你或多或少聽過鼎鼎大名的 IPython。其實Jupyter 脫胎於 IPython 項目,IPython 顧名思義,是專一於 Python 的項目,但隨着項目發展壯大,已經不只僅侷限於 Python 這一種編程語言了。Jupyter 的名字就很好地釋義了這一發展過程,它是 Julia、Python 以及 R 語言的組合,字形相近於木星(Jupiter),並且如今支持的語言也遠超這三種了。git
如下列舉了 Jupyter Notebook 的衆多優勢:程序員
極其適合數據分析
想象一下以下混亂的場景:你在終端中運行程序,可視化結果卻顯示在另外一個窗口中,包含函數和類的腳本存在其餘文檔中,更可惡的是你還需另外寫一份說明文檔來解釋程序如何執行以及結果如何。此時 Jupyter Notebook 從天而降,將全部內容收歸一處,你是否是頓覺靈臺清明,思路更加清晰了呢?github
支持多語言
也許你習慣使用 R 語言來作數據分析,或者是想用學術界經常使用的 MATLAB 和 Mathematica,這些都不成問題,只要安裝相對應的核(kernel)便可。這裏列出了 Jupyter 支持的全部語言,供您參考。編程
分享便捷
支持以網頁的形式分享,GitHub 中自然支持 Notebook 展現,也能夠經過 nbviewer 分享你的文檔。固然也支持導出成 HTML、Markdown 、PDF 等多種格式的文檔。瀏覽器
遠程運行
在任何地點均可以經過網絡連接遠程服務器來實現運算,這裏給出一個遠程運行的例子,能夠體驗一下 Jupyter Notebook。ruby
交互式展示
不只能夠輸出圖片、視頻、數學公式,甚至能夠呈現一些互動的可視化內容,好比能夠縮放的地圖或者是能夠旋轉的三維模型。這就須要交互式插件(Interactive widgets)來支持,更多內容請參考這裏。bash
對於初學者,最簡單的方法是安裝 Anaconda,由於它自帶了 Jupyter Notebook。若是想進一步瞭解 Anaconda 的使用方法,可參考個人上一篇文章《致Python初學者們 - Anaconda入門使用指南》。服務器
對於有經驗的同窗,天然使用命令行最爲便捷。
若是在 conda 環境中,可使用以下命令安裝:
conda install jupyter notebook
或者直接經過 pip 安裝:
pip install jupyter notebook
更多的安裝說明請參考官網。
若是使用 Anaconda,能夠在其 Navigator 圖形界面中點擊打開 Notebook。可是最快捷的方法仍是在命令行中輸入:
jupyter notebook
此時你的 Web 瀏覽器被自動打開,顯示文件目錄。經過點擊右上角的 new
建立新文檔。
而關閉 notebook 文檔能夠經過選擇文件名前的複選框後,點擊 Shutdown
按鈕實現。若是要關閉整個服務,則在原來的終端中按 Control + C
兩次。
Notebook 文檔是由一系列單元(Cell)構成,主要有兩種形式的單元:
代碼單元:這裏是你編寫代碼的地方,經過按 Shift + Enter
運行代碼,其結果顯示在本單元下方。代碼單元左邊有 In [1]:
這樣的序列標記,方便人們查看代碼的執行次序。
Markdown 單元:在這裏對文本進行編輯,採用 markdown 的語法規範,能夠設置文本格式、插入連接、圖片甚至數學公式。一樣使用 Shift + Enter
運行 markdown 單元來顯示格式化的文本。
相似於 Linux 的 Vim 編輯器,在 notebook 中也有兩種模式:
編輯模式:編輯文本和代碼。選中單元並按 Enter
鍵進入編輯模式,此時單元左側顯示綠色豎線。
命令模式:用於執行鍵盤輸入的快捷命令。經過 Esc
鍵進入命令模式,此時單元左側顯示藍色豎線。
若是要使用快捷鍵,首先按 Esc
鍵進入命令模式,而後按相應的鍵實現對文檔的操做。好比切換成代碼單元(Y
)或 markdown 單元(M
),或者在本單元的下方增長一單元(B
)。查看全部快捷命令能夠按H
。
儘管一開始須要花費一些學習成本,但熟練使用快捷鍵將大大提升工做效率。試想你在鍵盤上十指如飛時,若是還須要經過鼠標來操做文檔,是否是很影響思考速度呢?
若是你曾作過嚴肅的學術研究,必定對 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中類型:
當編寫好了幻燈片形式的 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 。
本文給出了許多擴展連接供參考,這裏彙總以下,供您參考: