Jupyter-NoteBook-你應(yīng)該知道的N個(gè)小技巧

智能決策上手系列教程索引

不斷更新
部分內(nèi)容來自于翻譯整理

  1. 多行輸出

在Notebook的中開頭cell中添加以下代碼可以實(shí)現(xiàn)多行輸出:

from IPython.core.interactiveshell import InteractiveShell 
InteractiveShell.ast_node_interactivity = 'all' #默認(rèn)為'last'

例如:


如果需要一勞永逸的在每個(gè)文件中自動實(shí)現(xiàn)這個(gè)功能梗夸,可以在macOS的/Users/your_user_name/.ipython/profile_default/或者windows的C:\Users\your_profile.ipython\profile_default文件夾下創(chuàng)建ipython_config.py文件笼吟。(mac下你可以在終端進(jìn)入這個(gè)目錄touch ipython_config.py來創(chuàng)建)恶复。
然后打開ipython_config.py文件氮兵,添加以下兩行:

c = get_config()
c.InteractiveShell.ast_node_interactivity = "all"

保存绵患,重啟Notebook后生效亿眠。


更多設(shè)置點(diǎn)這里看官方說明

感謝離宮2提示這個(gè)技巧菲驴。

  1. module 'numpy' has no attribute 'version'

import pandas as pd就報(bào)這個(gè)錯誤,原因未知师溅,解決方法就是-f強(qiáng)制重新安裝:

conda install -f numpy
conda install -f pandas
  1. Jupyter Notebook可能是當(dāng)今最常用的數(shù)據(jù)科學(xué)工具

    寫Python代碼很多人會告訴你要用Pycharm,但那是開發(fā)Python項(xiàng)目用的盾舌, 那種由成百上千個(gè)文件組成墓臭、包含數(shù)萬行代碼的項(xiàng)目必須要很專業(yè)的復(fù)雜工具才行。
    但如果你的目的是數(shù)據(jù)分析妖谴、算法研究等方面的工作窿锉,那么Jupyter Notebook 最適合你,因?yàn)樗銐蚝唵蜗ゾ耍屇憧梢詫W⒂跀?shù)據(jù)和算法的邏輯而不是工具嗡载。

  2. JupyterNotebook不僅可以寫代碼還能輸出圖像、表格等

    你可以用用下面一些代碼實(shí)驗(yàn)(代碼來自天池實(shí)驗(yàn)室):

    %matplotlib inline
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.special import jn
    from IPython.display import display, clear_output
    import time
    x = np.linspace(0,5)
    f, ax = plt.subplots()
    ax.set_title("Bessel functions")
    for n in range(1,10):
       time.sleep(1)
       ax.plot(x, jn(x,n))
       clear_output(wait=True)
       display(f)    
    plt.close()
    

    得到如下圖所示:


    image.png

    常用的繪圖分析工具有Matplotlib仍稀、Seaborn洼滚、plot.ly。

  3. 使用Anaconda來安裝最省事

    如果你要快速開始Python編程技潘,直接下載Anaconda是最簡單的遥巴,它包含了你所需要的一切,甚至連Python都不需要單獨(dú)安裝享幽。
    開機(jī)铲掐,下載和安裝Anaconda,打開Anaconda navigator就看到Jupyter notebook了值桩。
    Anaconda3.5.2:
    百度網(wǎng)盤下載(非VIP較慢)
    官方下載(Windows電腦使用)
    官方下載(蘋果電腦使用)

  4. 更省事的是阿里云天池Notebook實(shí)驗(yàn)室

    這是一個(gè)在線版的Notebook摆霉,什么都不需要安裝就能開始編碼和運(yùn)行!
    唯一麻煩的就是需要你注冊并實(shí)名認(rèn)證奔坟。
    你在網(wǎng)頁里編寫Python代碼携栋,然后免費(fèi)在阿里云服務(wù)器上運(yùn)行并返回結(jié)果。你寫的代碼也存在服務(wù)器上咳秉,不用再擔(dān)心會丟失了婉支,它甚至包含了代碼版本管理功能!
    阿里云天池Notebook
    已知的確缺點(diǎn)有:

    • 不能隨意的安裝第三方功能模塊滴某。不過它已經(jīng)自帶了很多磅摹,大多數(shù)情況都足夠了。
    • 不能安裝Notebook插件霎奢』模基本上也不是問題困曙,沒事誰也不折騰這個(gè)价认。
    • 要命的是你不能像控制自己的電腦一樣控制遠(yuǎn)程服務(wù)器,當(dāng)你在爬取某個(gè)網(wǎng)站數(shù)據(jù)的時(shí)候库快,網(wǎng)站發(fā)現(xiàn)你的IP(阿里云服務(wù)器的IP)訪問不正常要求在瀏覽器內(nèi)做人工識別字符驗(yàn)證晤硕,這時(shí)候你就無助了悼潭”蛹桑——如果在你自己電腦上就只要打開瀏覽器操作一下就OK了。
  5. Ipython是Jupyter的前身

    Jupyter項(xiàng)目是從Ipython項(xiàng)目演進(jìn)過來的舰褪,所以當(dāng)你看到存儲的文件是.ipynb時(shí)候不要奇怪皆疹,就是ipython notebook的意思。實(shí)際上以后在很多地方都會看到Ipy字樣占拍。

  6. JupyterLab是Notebook的加強(qiáng)版

    在Anaconda navigator里面還有一個(gè)JupyterLab略就。Lab在Notebook基礎(chǔ)上增加了更多的功能,如果你已經(jīng)使用過一段時(shí)間的Notebook晃酒,那可以試試看Lab表牢。

  7. Shift+回車執(zhí)行單元代碼

    快速運(yùn)行并輸出結(jié)果,并跳轉(zhuǎn)到下一個(gè)單元贝次。

  8. 代碼自動完成

在代碼頂部添加%config IPCompleter.greedy=True這一行并且shift+回車運(yùn)行崔兴,對于接下來運(yùn)行過的內(nèi)容都會被列入自動提示中。

按Tab鍵彈出自動提示
如下圖蛔翅,輸入my然后Tab鍵就彈出上面自定義的兩個(gè)變量名敲茄,然后按回車直接輸入myCount,按向下箭頭鍵再回車就輸入myNum搁宾。

image.png

同樣對于import導(dǎo)入的功能模塊也可以提示折汞。比如下圖,輸入requ然后按tab就自動補(bǔ)全輸入requests(因?yàn)橐呀?jīng)導(dǎo)入盖腿,并且是唯一的,而剛才的myCountmyNum都是my開頭)损同。
輸入到requests.的時(shí)候按tab就會彈出requests包含的所有功能命令翩腐,繼續(xù)輸入g就得到下圖的情況。
image.png

但是每次都按【Tab】按鍵也并不方便膏燃,因?yàn)槿绻b了Jupyter notebook的擴(kuò)展插件包(參考下面擴(kuò)展插件部分)茂卦,只要用下面的命令來開啟自動完成即可。jupyter nbextension enable hinterland/hinterland组哩,成功OK之后重新打開Jupyter Notebook等龙,在輸入代碼的同時(shí)就會實(shí)現(xiàn)自動提示了。

  1. 不要把代碼都寫在一個(gè)單元cell里伶贰!

這非常重要蛛砰!
但也不要每行一個(gè)cell...
合理安排,一個(gè)cell就是一個(gè)小的邏輯單元黍衙,這樣既可以理清思路泥畅,又方便單獨(dú)運(yùn)行每個(gè)cell方便測試尋找問題。
推薦把相關(guān)的設(shè)置變量都集中放在最上面單獨(dú)一個(gè)或幾個(gè)cell琅翻,這樣以后使用時(shí)候可以集中修改位仁,不影響代碼邏輯柑贞。
比如下圖中的代碼,以后修改只要修改兩個(gè)變量num1聂抢、num2就可以直接運(yùn)行得到結(jié)果钧嘶。

image.png

另外一個(gè)建議就是把能夠獨(dú)立的代碼變?yōu)橐粋€(gè)def單獨(dú)拿出去作為cell內(nèi)容,比如下面把求整體方差avri分拆出了兩個(gè)def函數(shù),avg求平均數(shù)琳疏,sqr求兩數(shù)差的平方康辑。(代碼僅供示意)
image.png

  1. Cell不僅可以寫代碼,還能Markdown

    Markdown是用來寫文章的轿亮,比如這個(gè)簡書文章就是用markdown語法寫的疮薇。
    新建cell可以選markdown用來寫代碼注釋。

    寫起來是這樣的:
    image.png

    shift回車運(yùn)行后是這樣的(雙擊可以返回到修改模式):
    image.png
  2. 更改默認(rèn)打開的項(xiàng)目

    默認(rèn)Notebook總是打開電腦中我的文檔目錄我注,以下方法可以讓它打開指定的目錄按咒。
    打開命令行工具輸入
    jupyter notebook --generate-config
    然后會返回一個(gè)地址,找到它(可能是隱藏文件)但骨,用寫字板打開那個(gè)文件jupyter_notebook_config.py:

    image.png

    然后再頂部添加(等號后面引號內(nèi)換成你自己的文件夾地址)
    c.NotebookApp.notebook_dir = '/Users/zhyuzh/Desktop/Jupyter'
    然后重新打開Jupyter Notebook就會默認(rèn)打開這個(gè)文件夾了励七。

    蘋果電腦顯示隱藏文件的命令:
    defaults write com.apple.finder AppleShowAllFiles -bool YES
    蘋果電腦下復(fù)制當(dāng)前文件夾路徑快捷鍵
    Command+Option+C

    Windows電腦下如果失敗,請修改Jupyter Notebook的快捷方式奔缠,去掉【屬性-目標(biāo)】中的" %USERPROFILE%" 部分掠抬,并確保c.NotebookApp.notebook_dir='D:\\temp\\',后面的目錄必須使用雙斜線。

  3. 顯示全部在運(yùn)行的Notebook

命令jupyter notebook list列出全部端口上運(yùn)行的notebook服務(wù),這里也會顯示完整戴token的瀏覽器地址校哎。
命令jupyter notebook stop 8898關(guān)閉特定端口上的服務(wù)两波,Windows下如果失敗的話還是用任務(wù)管理器吧,如果任務(wù)管理器也找不到它的話闷哆,其實(shí)它就已經(jīng)被關(guān)閉了腰奋,只是windows沒更新。

  1. 擴(kuò)展插件

    插件可以讓Notebook變得更好用一些抱怔。一般情況我們不需要安裝插件劣坊,等你使用久了再慢慢了解。
    官方Github插件主題列表
    非官方contrib貢獻(xiàn)插件列表
    非官方貢獻(xiàn)版插件更多更容易安裝些屈留,因?yàn)榭梢砸淮味佳b上局冰,要用哪個(gè)再開啟哪個(gè)。
    安裝命令:
    conda install -c conda-forge jupyter_contrib_nbextensions
    運(yùn)行后可能稍等一下才有反應(yīng)灌危,根據(jù)提示按y康二。
    然后再啟用,比如啟用collapsible_headings:
    jupyter nbextension enable collapsible_headings/main
    注意/main是必須的。
    collapsible_headings插件可以讓Notebook把一個(gè)cell折疊起來乍狐,在cell菜單下出現(xiàn)insert head cell字樣:

    image.png

    這個(gè)插件在JupyterLab下面好像不能用赠摇。不過Lab自身就可以雙擊折疊一個(gè)cell,比這個(gè)更方便些。

    collapsible_headings/main其實(shí)是指文件夾collapsible_headings下的main.js文件藕帜。所有可用的文件夾名稱都可以在電腦里搜索nbextensions文件夾找到烫罩。蘋果電腦的位置類似/anaconda3/pkgs/jupyter_contrib_nbextensions-0.5.0-py36_0/lib/python3.6/site-packages/jupyter_contrib_nbextensions/nbextensions
    JupyterNoteBook的插件本質(zhì)都是NodeJs的npm插件。如果你了解nodejs那么很容易搞明白它的原理洽故。

  2. 格式化自動美化代碼

    代碼整齊很重要贝攒!
    對于Python來說混亂的代碼格式可能是致命的!
    這里介紹安裝code-pretty自動格式化插件时甚,先執(zhí)行命令開啟:
    jupyter nbextension enable code_prettify/code_prettify
    依照官方說明還需要執(zhí)行另外一個(gè)命令安裝必要的第三方功能模塊:
    conda install yapf
    然后就可以看到Notebook如下圖出現(xiàn)一個(gè)小錘頭工具隘弊。點(diǎn)擊它就能把當(dāng)前cell的代碼自動格式化變整齊了,也可以使用快捷鍵Ctrl+L(蘋果下也是ctrl不是Command)荒适。

    image.png

  3. ?輸出幫助提示

    比如下圖:


    image.png
  4. 運(yùn)行或載入外部Python文件

    使用%run代碼可以直接外部的執(zhí)行.py文件梨熙,比如在Notebook文件夾內(nèi)有一個(gè)a.py文件:

    aa='haha'
    print(aa)
    

    那么可以用下面代碼直接在Notebook內(nèi)運(yùn)行它(注意這里的./表示在同一文件夾下)

    %run ./a
    print('>>'+aa)
    

    image.png

    如果使用%load則直接把代碼讀進(jìn)來(下面是%load ./a運(yùn)行的結(jié)果):
    image.png

  5. 公式編輯器LaTeX

    Notebook的Markdown單元是支持LateX公式編輯的,比如輸入\\( P(A \mid B) = \frac{P(B \mid A) \, P(A)}{P(B)} \\)運(yùn)行得到下圖:

    image.png

    關(guān)于LaTeX語法可以在簡書里搜索刀诬。

  6. 可以保存為.py或pdf文件

    file菜單可以保存為多種格式咽扇。

  7. 查找和替換

edit/find and replace菜單可以彈出對話框如下,點(diǎn)擊豎向箭頭的小圖標(biāo)可以切換到搜索全部cell單元陕壹。此外還支持區(qū)分大小寫质欲、正則表達(dá)式(js語法)。
如果只是需要找到某些文字(定位到這些文字的位置)糠馆,可以直接使用瀏覽器自帶的Ctrl+F來查找嘶伟。

  1. 設(shè)置打開密碼

先執(zhí)行命令jupyter notebook --generate-config,這會生成相關(guān)配置文件又碌,然后jupyter notebook password命令輸入兩次相同的密碼九昧,再打開Notebook的時(shí)候就會提示要輸入密碼。
關(guān)閉密碼只需要找到jupyter_notebook_config.py文件赠橙,/Users/username/.jupyter/文件夾下耽装,Win/Mac都一樣,但Mac下這是個(gè)隱藏文件夾期揪。修改其中內(nèi)容,c.NotebookApp.password = ''然后重新打開Notebook就不需要密碼了规个。
這樣看凤薛,其實(shí)這個(gè)密碼也沒什么用,跟沒設(shè)置一樣诞仓。

  1. 去除token限制

復(fù)制地址換到別的瀏覽器打不開缤苫,要求輸入token的問題。
和上面密碼一樣墅拭,修改c.NotebookApp.token = ''并保存可以禁用token活玲。

  1. 快捷鍵復(fù)制行,復(fù)制單元cell

創(chuàng)建并編輯用戶文件夾下.jupyter/custom/custom.js文件并進(jìn)行編輯。
請參照這個(gè)文章進(jìn)行舒憾。
【編程】編寫Jupyter Notebook腳本

  1. 插件設(shè)置

從【編輯-nbextensions config】可以打開擴(kuò)展設(shè)置镀钓,直接開啟或關(guān)閉插件。

  1. Latex

行間的公式需要用$$開頭結(jié)尾镀迂,但是獨(dú)立行的應(yīng)該直接寫丁溅,不要再加$$了,比如

\begin{align}
a = \frac{1}{2} && b = \frac{1}{3} && c = \frac{1}{4} \\
a && b && c
\end{align}
  1. Latex公式放大字體

運(yùn)行后的Latex公式探遵,右鍵菜單可以找到【Scale All Math】菜單放大全部窟赏。另外的Zoom Factor是指鼠標(biāo)浮上去的時(shí)候字體放大,不實(shí)用箱季。

  1. 去掉輸出框的陰影

修改各種樣式涯穷,可以直接用%%html改css。如下

%%html
<style>
.dataframe td,.dataframe thead th {
    white-space: auto;
    text-align:left;
    border:1px solid;
    font-size:12px
}
.dataframe td,.dataframe thead th{
    font-size: 12px;
}
div.output_text {
    max-height: 300px;
}
div.output_area img{
    max-width:100%
}
div.output_scroll{
    box-shadow: none;
}
</style>
  1. 單元折疊

安裝hide_code插件藏雏,實(shí)現(xiàn)單元格折疊拷况。

pip install hide_code
jupyter nbextension install --py hide_code
jupyter nbextension enable --py hide_code
jupyter serverextension enable --py hide_code

效果如下。

更多信息參照下面網(wǎng)站诉稍。
https://github.com/kirbs-/hide_code/

更簡單的是直接使用【hide input】插件蝠嘉,


點(diǎn)擊向上的箭頭隱藏或者展開,如下圖杯巨,缺點(diǎn)是隱藏之后比較難找到蚤告。


  1. 代碼折疊

如果只要折疊代碼,那么打開codefold插件就可以服爷。

效果如下杜恰。


智能決策上手系列教程索引

每個(gè)人的智能決策新時(shí)代

如果您發(fā)現(xiàn)文章錯誤,請不吝留言指正仍源;
如果您覺得有用心褐,請點(diǎn)喜歡;
如果您覺得很有用笼踩,歡迎轉(zhuǎn)載~


END

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逗爹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嚎于,更是在濱河造成了極大的恐慌掘而,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件于购,死亡現(xiàn)場離奇詭異袍睡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)肋僧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門斑胜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來控淡,“玉大人,你說我怎么就攤上這事止潘〔籼浚” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵覆山,是天一觀的道長竹伸。 經(jīng)常有香客問我,道長簇宽,這世上最難降的妖魔是什么勋篓? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮魏割,結(jié)果婚禮上譬嚣,老公的妹妹穿的比我還像新娘。我一直安慰自己钞它,他們只是感情好拜银,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著遭垛,像睡著了一般尼桶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锯仪,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天泵督,我揣著相機(jī)與錄音,去河邊找鬼庶喜。 笑死小腊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的久窟。 我是一名探鬼主播秩冈,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼斥扛!你這毒婦竟也來了入问?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤稀颁,失蹤者是張志新(化名)和其女友劉穎队他,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體峻村,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年锡凝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了粘昨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖张肾,靈堂內(nèi)的尸體忽然破棺而出芭析,到底是詐尸還是另有隱情,我是刑警寧澤吞瞪,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布馁启,位于F島的核電站,受9級特大地震影響芍秆,放射性物質(zhì)發(fā)生泄漏惯疙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一妖啥、第九天 我趴在偏房一處隱蔽的房頂上張望霉颠。 院中可真熱鬧,春花似錦荆虱、人聲如沸蒿偎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诉位。三九已至,卻和暖如春菜枷,著一層夾襖步出監(jiān)牢的瞬間苍糠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工犁跪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留椿息,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓坷衍,卻偏偏與公主長得像寝优,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子枫耳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

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