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

在數(shù)據(jù)分析的道路上氏义,你一定曾有過為新發(fā)現(xiàn)而激動(dòng)不已的時(shí)刻锄列,此時(shí)你急于將自己的發(fā)現(xiàn)告訴大家,卻遇到了這樣的問題:如何將我的分析過程清晰地表述出來呢惯悠?

為了能與同行們有效溝通邻邮,你需要重現(xiàn)整個(gè)分析過程,并將說明文字克婶、代碼筒严、圖表、公式情萤、結(jié)論都整合在一個(gè)文檔中鸭蛙。顯然傳統(tǒng)的文本編輯工具并不能滿足這一需求,所以這兒隆重推薦一款神器 Jupyter Notebook筋岛,不僅能在文檔中執(zhí)行代碼娶视,還能以網(wǎng)頁形式分享。

下圖簡(jiǎn)單展示了Jupyter Notebook 文檔的樣式睁宰,更多示例可在 nbviewer 中找到肪获。

Jupyter Notebook 文檔示例

本文將按如下內(nèi)容來展開:

一、Jupyter Notebook 介紹

  • 文學(xué)編程
  • 歷史傳承
  • 優(yōu)點(diǎn)

二柒傻、Jupyter Notebook 使用入門

  • 安裝
  • 運(yùn)行
  • 界面

三孝赫、Jupyter Notebook 進(jìn)階功能

  • 數(shù)學(xué)公式編輯
  • 幻燈片制作
  • 魔術(shù)關(guān)鍵字

一、Jupyter Notebook 介紹

文學(xué)編程

在介紹 Jupyter Notebook 之前红符,讓我們先來看一個(gè)概念:文學(xué)編程 ( Literate programming )青柄,這是由 Donald Knuth 提出的編程方法伐债。傳統(tǒng)的結(jié)構(gòu)化編程,人們需要按計(jì)算機(jī)的邏輯順序來編寫代碼致开;與此相反峰锁,文學(xué)編程則可以讓人們按照自己的思維邏輯來開發(fā)程序。

簡(jiǎn)單來說喇喉,文學(xué)編程的讀者不是機(jī)器祖今,而是人。 我們從寫出讓機(jī)器讀懂的代碼拣技,過渡到向人們解說如何讓機(jī)器實(shí)現(xiàn)我們的想法千诬,其中除了代碼,更多的是敘述性的文字膏斤、圖表等內(nèi)容徐绑。這么一看,這不正是數(shù)據(jù)分析人員所需要的編碼風(fēng)格么莫辨?不僅要當(dāng)好一個(gè)程序員傲茄,還得當(dāng)好一個(gè)作家。那么 Jupyter Notebook 就是不可或缺的一款集編程和寫作于一體的效率工具沮榜。

歷史傳承

也許說到 Jupyter 你會(huì)覺得陌生盘榨,但想必你或多或少聽過鼎鼎大名的 IPython。其實(shí)Jupyter 脫胎于 IPython 項(xiàng)目蟆融,IPython 顧名思義草巡,是專注于 Python 的項(xiàng)目,但隨著項(xiàng)目發(fā)展壯大型酥,已經(jīng)不僅僅局限于 Python 這一種編程語言了山憨。Jupyter 的名字就很好地釋義了這一發(fā)展過程,它是 Julia弥喉、Python 以及 R 語言的組合郁竟,字形相近于木星(Jupiter),而且現(xiàn)在支持的語言也遠(yuǎn)超這三種了由境。

優(yōu)點(diǎn)

以下列舉了 Jupyter Notebook 的眾多優(yōu)點(diǎn):

  • 極其適合數(shù)據(jù)分析
    想象一下如下混亂的場(chǎng)景:你在終端中運(yùn)行程序棚亩,可視化結(jié)果卻顯示在另一個(gè)窗口中,包含函數(shù)和類的腳本存在其他文檔中虏杰,更可惡的是你還需另外寫一份說明文檔來解釋程序如何執(zhí)行以及結(jié)果如何讥蟆。此時(shí) Jupyter Notebook 從天而降,將所有內(nèi)容收歸一處嘹屯,你是不是頓覺靈臺(tái)清明攻询,思路更加清晰了呢从撼?

  • 支持多語言
    也許你習(xí)慣使用 R 語言來做數(shù)據(jù)分析州弟,或者是想用學(xué)術(shù)界常用的 MATLAB 和 Mathematica钧栖,這些都不成問題,只要安裝相對(duì)應(yīng)的核(kernel)即可婆翔。這里列出了 Jupyter 支持的所有語言拯杠,供您參考。

  • 分享便捷
    支持以網(wǎng)頁的形式分享啃奴,GitHub 中天然支持 Notebook 展示潭陪,也可以通過 nbviewer 分享你的文檔。當(dāng)然也支持導(dǎo)出成 HTML最蕾、Markdown 依溯、PDF 等多種格式的文檔。

  • 遠(yuǎn)程運(yùn)行
    在任何地點(diǎn)都可以通過網(wǎng)絡(luò)鏈接遠(yuǎn)程服務(wù)器來實(shí)現(xiàn)運(yùn)算瘟则,這里給出一個(gè)遠(yuǎn)程運(yùn)行的例子黎炉,可以體驗(yàn)一下 Jupyter Notebook。

  • 交互式展現(xiàn)
    不僅可以輸出圖片醋拧、視頻慷嗜、數(shù)學(xué)公式,甚至可以呈現(xiàn)一些互動(dòng)的可視化內(nèi)容丹壕,比如可以縮放的地圖或者是可以旋轉(zhuǎn)的三維模型庆械。這就需要交互式插件(Interactive widgets)來支持,更多內(nèi)容請(qǐng)參考這里菌赖。


二缭乘、Jupyter Notebook 使用入門

安裝

對(duì)于初學(xué)者,最簡(jiǎn)單的方法是安裝 Anaconda盏袄,因?yàn)樗詭Я?Jupyter Notebook忿峻。如果想進(jìn)一步了解 Anaconda 的使用方法,可參考我的上一篇文章《致Python初學(xué)者們 - Anaconda入門使用指南》辕羽。

對(duì)于有經(jīng)驗(yàn)的同學(xué)逛尚,自然使用命令行最為便捷。

如果在 conda 環(huán)境中刁愿,可以使用如下命令安裝:

conda install jupyter notebook

或者直接通過 pip 安裝:

pip install jupyter notebook

更多的安裝說明請(qǐng)參考官網(wǎng)绰寞。

運(yùn)行

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

jupyter notebook

此時(shí)你的 Web 瀏覽器被自動(dòng)打開滤钱,顯示文件目錄。通過點(diǎn)擊右上角的 new 創(chuàng)建新文檔脑题。

進(jìn)入 notebook

而關(guān)閉 notebook 文檔可以通過選擇文件名前的復(fù)選框后件缸,點(diǎn)擊 Shutdown 按鈕實(shí)現(xiàn)。如果要關(guān)閉整個(gè)服務(wù)叔遂,則在原來的終端中按 Control + C 兩次他炊。

退出 notebook

界面

Notebook 文檔是由一系列單元(Cell)構(gòu)成争剿,主要有兩種形式的單元:

  • 代碼單元:這里是你編寫代碼的地方,通過按 Shift + Enter 運(yùn)行代碼痊末,其結(jié)果顯示在本單元下方蚕苇。代碼單元左邊有 In [1]: 這樣的序列標(biāo)記,方便人們查看代碼的執(zhí)行次序凿叠。

  • Markdown 單元:在這里對(duì)文本進(jìn)行編輯涩笤,采用 markdown 的語法規(guī)范,可以設(shè)置文本格式盒件、插入鏈接蹬碧、圖片甚至數(shù)學(xué)公式偿衰。同樣使用 Shift + Enter 運(yùn)行 markdown 單元來顯示格式化的文本航唆。

Jupyter Notebook 編輯界面

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

  • 編輯模式:編輯文本和代碼恕曲。選中單元并按 Enter 鍵進(jìn)入編輯模式切心,此時(shí)單元左側(cè)顯示綠色豎線飒筑。

  • 命令模式:用于執(zhí)行鍵盤輸入的快捷命令。通過 Esc 鍵進(jìn)入命令模式绽昏,此時(shí)單元左側(cè)顯示藍(lán)色豎線协屡。

如果要使用快捷鍵,首先按 Esc 鍵進(jìn)入命令模式全谤,然后按相應(yīng)的鍵實(shí)現(xiàn)對(duì)文檔的操作肤晓。比如切換成代碼單元(Y)或 markdown 單元(M),或者在本單元的下方增加一單元(B)认然。查看所有快捷命令可以按H补憾。

盡管一開始需要花費(fèi)一些學(xué)習(xí)成本,但熟練使用快捷鍵將大大提高工作效率卷员。試想你在鍵盤上十指如飛時(shí)盈匾,如果還需要通過鼠標(biāo)來操作文檔,是不是很影響思考速度呢毕骡?


三削饵、Jupyter Notebook 進(jìn)階功能

數(shù)學(xué)公式編輯

如果你曾做過嚴(yán)肅的學(xué)術(shù)研究,一定對(duì) LaTeX 并不陌生未巫,這簡(jiǎn)直是寫科研論文的必備工具窿撬,不但能實(shí)現(xiàn)嚴(yán)格的文檔排版,而且能編輯復(fù)雜的數(shù)學(xué)公式叙凡。在 Jupyter Notebook 的 markdown 單元中我們也可以使用 LaTeX 的語法來插入數(shù)學(xué)公式劈伴。

在文本行中插入數(shù)學(xué)公式,使用一對(duì) $符號(hào)握爷,比如質(zhì)能方程 $E = mc^2$跛璧。如果要插入一個(gè)數(shù)學(xué)區(qū)塊苏遥,則使用一對(duì) $$ 符號(hào)。比如下面公式表示 z=x/y:

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

如何在 notebook 中使用 LaTeX赡模,可進(jìn)一步參考 A Primer on Using LaTeX in Jupyter Notebooks 這篇文章。

幻燈片制作

既然Jupyter Notebook 擅長(zhǎng)展示數(shù)據(jù)分析的過程师抄,除了通過網(wǎng)頁形式分享外漓柑,當(dāng)然也可以將其制作成幻燈片的形式。這里有一個(gè)幻燈片示例供參考叨吮,其制作風(fēng)格簡(jiǎn)潔明晰辆布。

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

  • Slide:主頁面惭蹂,通過按左右方向鍵進(jìn)行切換。
  • Sub-Slide:副頁面割粮,通過按上下方向鍵進(jìn)行切換盾碗。
  • Fragment:一開始是隱藏的,按空格鍵或方向鍵后顯示舀瓢,實(shí)現(xiàn)動(dòng)態(tài)效果廷雅。
  • Skip:在幻燈片中不顯示的單元。
  • Notes:作為演講者的備忘筆記京髓,也不在幻燈片中顯示航缀。
Jupyter Notebook 幻燈片設(shè)置

當(dāng)編寫好了幻燈片形式的 notebook,如何來演示呢堰怨?這時(shí)需要使用 nbconvert

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

在命令行中敲入上述代碼后芥玉,瀏覽器會(huì)自動(dòng)打開相應(yīng)的幻燈片。

魔術(shù)關(guān)鍵字

魔術(shù)關(guān)鍵字(magic keywords)备图,正如其名飞傀,是用于控制 notebook 的特殊的命令。它們運(yùn)行在代碼單元中诬烹,以 % 或者 %% 開頭砸烦,前者控制一行,后者控制整個(gè)單元绞吁。

比如幢痘,要得到代碼運(yùn)行的時(shí)間,則可以使用 %timeit家破;如果要在文檔中顯示 matplotlib 包生成的圖形颜说,則使用 % matplotlib inline购岗;如果要做代碼調(diào)試,則使用 %pdb门粪。但注意這些命令大多是在Python kernel 中適用的喊积,其他 kernel 大多不適用。有許許多多的魔術(shù)關(guān)鍵字可以使用玄妈,更詳細(xì)的清單請(qǐng)參考 Built-in magic commands 乾吻。


相關(guān)資源匯總

本文給出了許多擴(kuò)展鏈接供參考,這里匯總?cè)缦履怛撸┠鷧⒖迹?/p>

  1. Jupyter Notebook 官網(wǎng)
  2. 文學(xué)編程 Literate programming
  3. IPython 官網(wǎng)
  4. LaTeX官網(wǎng)
  5. LaTeX 語法:A Primer on Using LaTeX in Jupyter Notebooks
  6. 魔術(shù)關(guān)鍵字:Built-in magic commands
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市酝锅,隨后出現(xiàn)的幾起案子诡必,更是在濱河造成了極大的恐慌,老刑警劉巖搔扁,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爸舒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡稿蹲,警方通過查閱死者的電腦和手機(jī)碳抄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來场绿,“玉大人剖效,你說我怎么就攤上這事⊙娴粒” “怎么了璧尸?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)熬拒。 經(jīng)常有香客問我爷光,道長(zhǎng),這世上最難降的妖魔是什么澎粟? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任蛀序,我火速辦了婚禮,結(jié)果婚禮上活烙,老公的妹妹穿的比我還像新娘徐裸。我一直安慰自己,他們只是感情好啸盏,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布重贺。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪气笙。 梳的紋絲不亂的頭發(fā)上次企,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音潜圃,去河邊找鬼缸棵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谭期,可吹牛的內(nèi)容都是我干的堵第。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼崇堵,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了客燕?” 一聲冷哼從身側(cè)響起鸳劳,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎也搓,沒想到半個(gè)月后赏廓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡傍妒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年幔摸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颤练。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡既忆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嗦玖,到底是詐尸還是另有隱情患雇,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布宇挫,位于F島的核電站苛吱,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏器瘪。R本人自食惡果不足惜翠储,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望橡疼。 院中可真熱鬧援所,春花似錦、人聲如沸欣除。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至废酷,卻和暖如春瘟檩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背澈蟆。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工墨辛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人趴俘。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓睹簇,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親寥闪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子太惠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容