[譯]27個(gè)Jupyter Notebook小提示與技巧

圖片鏈接已失效誊抛,歡迎前往我的博客查看最新版本

Jupyter Notebook

Jupyter notebook, 前身是IPython notebook, 它是一個(gè)非常靈活的工具赠潦,有助于幫助你構(gòu)建很多可讀的分析,你可以在里面同時(shí)保留代碼嗤谚,圖片,評(píng)論怔蚌,公式和繪制的圖像巩步。

screenshot
screenshot

Jupyter具有非常強(qiáng)的可擴(kuò)展性,支持很多編程語言桦踊,并且易于部署到你的個(gè)人電腦和幾乎所有的服務(wù)器上 -- 你只需要使用ssh或http接入即可椅野。最重要的是,它完全免費(fèi)籍胯。

Jupyter默認(rèn)設(shè)置使用Python kernel竟闪,正因此以前叫做IPython notebook. Jupyter notebook源自于Jupyter項(xiàng)目, Jupyter這個(gè)名字是它被設(shè)計(jì)所支持三個(gè)核心編程語言的縮寫詞:JUlia,PYThon, 和 R, 啟發(fā)自木星這個(gè)詞:Jupiter.

接下來的內(nèi)容將向你展示27個(gè)讓Jupyter用的更加舒心的建議與技巧。

1. Keyboard Shortcuts

每一個(gè)進(jìn)階用戶都知道杖狼,鍵盤快捷鍵將會(huì)為我們節(jié)省許多時(shí)間炼蛤。Jupyter在頂部的菜單里保留了許多快捷鍵:Help > keyboard Shortcuts. 每次更新Jupyter時(shí),都值得再次進(jìn)行查看蝶涩,因?yàn)樾碌目旖萱I總是不斷被添加進(jìn)來理朋。

另一個(gè)查看快捷鍵的方式是使用命令面板:Cmd + Shift + P(或者Linux和Windows上 Ctrl + Shift + P)。這個(gè)對(duì)話框?qū)?huì)幫助你通過名稱運(yùn)行任何命令 -- 這非常有用绿聘,尤其當(dāng)你不知道一個(gè)命令的快捷鍵或者你想要執(zhí)行的命令沒有快捷鍵時(shí)暗挑。這個(gè)功能非常類似與Mac上的Spotlight搜索,一旦你開始使用這個(gè)功能斜友,你就會(huì)發(fā)現(xiàn)沒有它的日子該怎么辦炸裆!

命令面板
命令面板

這里是一些我喜歡的快捷鍵:

  • Esc + F查找和替換你的代碼,但不包括代碼的輸出內(nèi)容鲜屏。

  • Esc + o打開代碼塊輸出烹看。

  • 選擇多個(gè)cell国拇。
    Shift + JShift + Down向下選中下一個(gè)cell. 你可以通過Shift + KShift + Up向上選中cell。

    • 一旦cell被選中惯殊,接著你可以進(jìn)行批量刪除/復(fù)制/剪切/粘貼.當(dāng)你需要移動(dòng)一部分notebook時(shí)酱吝,這非常有用。
    • 你也可以執(zhí)行Shift + M對(duì)多個(gè)cell進(jìn)行合并土思。
    interface
    interface

2. Pretty Display of Varibles

這部分內(nèi)容可能很多人都知道务热。如果對(duì)帶有一個(gè)變量或是未復(fù)制語句的cell執(zhí)行操作,Jupyter將會(huì)打印該變量而無需一個(gè)輸出語句己儒。這非常有用崎岂,尤其是使用Pandas DataFrames進(jìn)行處理時(shí),因?yàn)檩敵鰧?huì)被整齊地格式化為一個(gè)表格闪湾。

接下來的內(nèi)容可能沒那么人知道:你可以選擇修改ast_note_iteractivelykernal選項(xiàng)來使得Jupyter為每一行的變量或語句執(zhí)行這個(gè)操作冲甘,以便你可以立即看到多條語句一起輸出。

多條語句同時(shí)輸出
多條語句同時(shí)輸出

如果你想要所有的Jupyter實(shí)例(Notebook和Console)都設(shè)置該選項(xiàng)途样,只需創(chuàng)建~/.ipython/profile_default/ipython_config.py文件并寫入一下內(nèi)容:

c = get_config()
# Run all nodes interactively
c.InteractiveShell.ast_node_interactivity = "all"

3. Easy links to documentation

Help菜單你可以找到一些常用庫文檔的連接江醇,包括NumPy, Pandas, SciPy 和 Matplotlib.

同時(shí)別忘了在一個(gè)庫,方法或變量前加上?何暇,你可以獲得一個(gè)快速的語法說明陶夜。

快捷語法查看
快捷語法查看

4. Plotting in notebooks

在notebook中生成繪圖有許多選項(xiàng):

  • matplotlib, 使用%matplotlib inline進(jìn)行激活裆站。
  • %matplotlib notebook提供了一些交互性律适,不過可能會(huì)有點(diǎn)慢,因?yàn)殇秩居煞?wù)器端完成遏插。
  • mpld3為matplotlib代碼提供了另一個(gè)渲染器(使用d3)。非常漂亮纠修,不過尚未完整胳嘲。
  • bokeh是構(gòu)建交互性繪圖的一個(gè)更好的選擇。
  • plot.ly也可以生成漂亮的繪圖扣草,不過是付費(fèi)服務(wù)了牛。
交互式圖表
交互式圖表

5. Jupyter Magic Commands

上面的%matplotlib inline就是一個(gè)所謂的Jupyter Magic(Jupyter魔法)命令。

magic命令
magic命令

推薦閱讀the documentation for all Jupyter magic commands辰妙,你會(huì)發(fā)現(xiàn)這非常有用鹰祸。下面是一些我所喜愛的魔法命令:

6. Jupyter Magic - %env:Set Environment Variables

你可以管理notebook的環(huán)境變量而無需重啟jupyter server. 一些庫(比如theano)使用環(huán)境變量來控制行為,%env是最方便的一個(gè)途徑密浑。

%env環(huán)境變量
%env環(huán)境變量

7. Jupyter Magic - %run:Excute python code

%run可以從.py文件執(zhí)行Python代碼. 更少的人知道的是它也可以執(zhí)行其他的Jupyter notebook,這也非常有用蛙婴。

%run運(yùn)行python或jupyter notebook

注意使用%run并不等同于導(dǎo)入一個(gè)Python模塊.

8. Jupyter Magic - %load:Insert the code from an external script

這將會(huì)使用外部腳本來代替cell的內(nèi)容。你可以使用本地機(jī)器上的文件也可以使用一個(gè)URL.

%load加載外部腳本

9. Jupyter Magic - %store:Pass variables between notebooks

%store命令可以讓你在兩個(gè)不同的notebook間傳遞變量尔破。

10. Jupyter Magic - %who:List all variables of global scope.

不帶參數(shù)的%who命令將會(huì)列出全局范圍內(nèi)存在的所有變量街图。如果傳入?yún)?shù)浇衬,比如str,將會(huì)列出指定類型的所有變量餐济。

%who查看全局變量

11. Jupyter Magic - Timing

對(duì)于計(jì)時(shí)有兩個(gè)十分有用的魔法命令:%%time%timeit. 如果你有些代碼運(yùn)行地十分緩慢耘擂,而你想確定是否問題出在這里,這兩個(gè)命令將會(huì)非常方便絮姆。

  • %%time將會(huì)給出cell的代碼運(yùn)行一次所花費(fèi)的時(shí)間醉冤。
%time
  • %timeit使用Python的timeit模塊,它將會(huì)執(zhí)行一個(gè)語句100篙悯,000次(默認(rèn)情況下)蚁阳,然后給出運(yùn)行最快3次的平均值。
%timeit

12. Jupyter Magic - %%writefile and %pycat:Export the contents of a cell/Show the contents of an external script

使用%%writefile魔法保存cell的內(nèi)容到一個(gè)外部文件辕近。%pycat則剛好相反韵吨,并且會(huì)向你展示高亮后的外部文件。

%writefile & %pycat

13. Jupyter Magic - %prun:Show how much time your program spent in each function

使用%prun statement_name將會(huì)產(chǎn)生一個(gè)有序表格來展示在該語句中所調(diào)用的每個(gè)內(nèi)部函數(shù)調(diào)用的次數(shù)移宅,每次調(diào)用的時(shí)間與該函數(shù)累計(jì)運(yùn)行的時(shí)間归粉。

%prun

14. Jupyter Magic - Debugging with %pdb

Jupyter有一個(gè)自己的python調(diào)試器接口(pdb),這使得我們能夠進(jìn)入函數(shù)內(nèi)部看看到底發(fā)生了什么漏峰。

你可以在這里查看pdb的命令列表

15. Suppress the output of a final function

有時(shí)候你可能會(huì)想要抑制最后一行函數(shù)的輸出糠悼,比如當(dāng)我們繪制圖像的時(shí)候。為此浅乔,你只需加上一個(gè)分號(hào)即可倔喂。

取消輸出
取消輸出

16. Executing Shell Commands

在notebook中執(zhí)行shell命令非常容易,你可以像下面這樣列出當(dāng)前目錄下的文件:

!ls
shell命令
shell命令

或是檢查或管理包.

17. Using LaTeX for formulas

當(dāng)你在markdown cell中書寫LaTeX時(shí)靖苇,它會(huì)被MathJax渲染成一個(gè)公式席噩。

$$ P(A \mid B) = \frac{P(B \mid A) \, P(A)}{P(B)} $$

會(huì)被渲染成為:

$$ P(A \mid B) = \frac{P(B \mid A) , P(A)}{P(B)} $$

markdown是notebook中十分重要的一部分,別忘了使用它來傳達(dá)你的想法贤壁!

18. Run code from a different kernel in a notebooks

如果想要的話悼枢,你可以將多個(gè)kernel的代碼組合到一個(gè)notebook中。

在每個(gè)cell的開頭使用相關(guān)的魔法命令來聲明你想使用的kernel:

  • %%bash
  • %%HTML
  • %%python2
  • %%python3
  • %%ruby
  • %%perl
運(yùn)行多種類型的kernel
運(yùn)行多種類型的kernel

19. Install other kernels for Jupyter

Jupyter其中的一個(gè)重要特色就是能夠運(yùn)行不同語言脾拆,你只需安裝相關(guān)的kernel即可馒索。比如,下面的例子是如何安裝 R kernel.

  • 快捷選擇:使用anaconda安裝R kernel

如果你使用anaconda安裝你的環(huán)境名船,這會(huì)相當(dāng)簡(jiǎn)單绰上。你只需要在terminal中運(yùn)行下面的命令:

conda install -c r r-essentials
  • 不那么快捷的方式:手動(dòng)安裝R kernel

如果你不是使用anaconda, 這個(gè)過程可能稍顯復(fù)雜。首先你需要從CRAN安裝R渠驼, 如果你還沒有安裝的話蜈块。

安裝R完畢后,打開R console并運(yùn)行如下命令:

install.packages(c('repr', 'IRdisplay', 'crayon', 'pbdZMQ', 'devtools'))
devtools::install_github('IRkernel/IRkernel')
IRkernel::installspec()  # to register the kernel in the current R installation

20. Running R and Python in the same notebook

對(duì)于此最好的解決方案是安裝rpy2(需要一個(gè)可以工作的R版本), 通過pip可以很容易安裝:

pip install rpy2

你可以同時(shí)使用這兩種語言疯趟,甚至在它們之間傳遞變量:

一個(gè)很好的示例Revolutions Blog

21. Writing functions in other languages

有時(shí)候numpy的速度仍舊不夠快拘哨,我們需要自己寫一些更快的代碼。

原則上信峻,你可以以動(dòng)態(tài)鏈接庫的方式編譯函數(shù)倦青,然后用python進(jìn)行包裝。

不過如果有人能夠幫你完成這部分煩人的工作是不是非常棒呢盹舞?

你可以用cython或fortran寫函數(shù)并直接從Python代碼進(jìn)行調(diào)用产镐。

首先你需要安裝:

!pip install cython fortran-magic

個(gè)人來說我更喜歡使用fortran, 我發(fā)現(xiàn)它對(duì)數(shù)值統(tǒng)計(jì)函數(shù)十分方便。更多用法上的細(xì)節(jié)可以在這里找到.

也有一些其他方式可以加速你的Python代碼踢步。更多示例可以在這里找到/

22. Multicursor support

Jupyter支持多光標(biāo)操作癣亚,與Sublime Text類似。按住Alt進(jìn)行點(diǎn)擊和拖拽鼠標(biāo)即可获印。

23. Jupyter-contrib extensions

Jupyter-contrib extensions 是一系列能夠給Jupyter帶來許多功能的擴(kuò)展述雾,比如jupyter spell-checkercode-formatter.

插件擴(kuò)展
插件擴(kuò)展

24. Create a presentation from a Jupyter notebook

Damian Avila的 RISE允許你從已有的一個(gè)notebook創(chuàng)建一個(gè)powerpoint風(fēng)格的報(bào)告。

你可以通過conda安裝RISE:

conda install -c damianavila82 rise

或通過pip:

pip install RISE

然后執(zhí)行下面的代碼安裝并啟用擴(kuò)展:

jupyter-nbextension install rise --py --sys-prefix
jupyter-nbextension enable rise --py --sys-prefix

25. The Jupyter output system

notebook以HTML的方式進(jìn)行展示兼丰,cell的輸出也可以是HTML玻孟,所以事實(shí)上你可以返回任何東西:視頻/音頻/圖像。

下面的例子我掃描了

26. 'Big data' analysis

對(duì)于大規(guī)模數(shù)據(jù)樣本的查詢/處理也有一些解決方案:

27. Sharing notebooks

分享notebook最簡(jiǎn)單的方式是直接使用notebook文件(.ipynb).不過對(duì)于那些不使用Jupyter的人來說黍翎,你也可以這么做:

  • 使用菜單項(xiàng)File > Download as > HTML將notebook轉(zhuǎn)換成HTML。

  • 使用gist或github分享notebook艳丛,它們都會(huì)對(duì)notebook進(jìn)行渲染展示匣掸。

    • 如果你上傳notebook到一個(gè)github倉(cāng)庫,你可以使用十分便利的mybinder服務(wù)來允許第三者半小時(shí)的交互性身份接入你的倉(cāng)庫氮双。

[譯者]
useful links: https://github.com/dunovank/jupyter-themes
原文地址:27 Jupyter Notebook tips, tricks and shortcuts

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末造挽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子弄痹,更是在濱河造成了極大的恐慌饭入,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肛真,死亡現(xiàn)場(chǎng)離奇詭異谐丢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門乾忱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讥珍,“玉大人,你說我怎么就攤上這事窄瘟≈缘瑁” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵蹄葱,是天一觀的道長(zhǎng)氏义。 經(jīng)常有香客問我,道長(zhǎng)图云,這世上最難降的妖魔是什么惯悠? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮竣况,結(jié)果婚禮上克婶,老公的妹妹穿的比我還像新娘。我一直安慰自己丹泉,他們只是感情好情萤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嘀掸,像睡著了一般紫岩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上睬塌,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天泉蝌,我揣著相機(jī)與錄音,去河邊找鬼揩晴。 笑死勋陪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的硫兰。 我是一名探鬼主播诅愚,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼劫映!你這毒婦竟也來了违孝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤泳赋,失蹤者是張志新(化名)和其女友劉穎雌桑,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祖今,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡校坑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年拣技,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耍目。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡膏斤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出邪驮,到底是詐尸還是另有隱情莫辨,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布耕捞,位于F島的核電站衔掸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏俺抽。R本人自食惡果不足惜敞映,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望磷斧。 院中可真熱鬧振愿,春花似錦、人聲如沸弛饭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侣颂。三九已至档桃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間憔晒,已是汗流浹背藻肄。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拒担,地道東北人嘹屯。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像从撼,于是被迫代替她去往敵國(guó)和親州弟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

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