作 Parul Pandey
郭一璞 編譯
量子位 出品 | 公眾號 QbitAI
作為一個超好用的交互式筆記本,Jupyter總是深受開發(fā)者的喜愛。
不過,除了基礎的寫文檔之外,其實Jupyter還有N多功能,簡直是一個集視頻、圖片、PPT、多種交互于一身的萬花筒。
如果不會用,你可能錯過了Jupyter 99%的功能。
Medium上走向數(shù)據(jù)科學(Towards Data Science)專欄的作者Parul Pandey就總結了七大Jupyter的進階用法,量子位編譯如下~
Shell是一種與計算機進行文本交互的方式。
一般來講,當你正在使用Python編譯器,需要用到命令行工具的時候,要在shell和IDLE之間進行切換。
但是,如果你用的是Jupyter,就完全不用這么麻煩了,你可以直接在命令之前放一個“!”,就能執(zhí)行shell命令,完全不用切換來切換去,就能在IPython里執(zhí)行任何命令行。
1In [1]: !ls 2example.jpeg list tmp 3In [2]: !pwd 4/home/Parul/Desktop/Hello World Folder' 5In [3]: !echo "Hello World" 6Hello World 7
我們甚至可以將值傳遞給shell,像下面這樣:
1In [4]: files=!ls 2In [5]: print(files) 3['example.jpeg', 'list', 'tmp'] 4In [6]: directory=!pwd 5In [7]: print(directory) 6['/Users/Parul/Desktop/Hello World Folder'] 7In [8]: type(directory) 8IPython.utils.text.SList
注意,返回結果的數(shù)據(jù)類型不是列表。
使用Jupyter主題,不僅能讓你的Jupyter界面更好看、更舒服,還能讓屏幕上的代碼看起來更顯眼。
比如Chesterish主題:
solarizedl主題:
來看一下具體的操作方法:
第一步,安裝:
1pip install jupyterthemes
第二步,加載可用主題列表:
1jt -l
第三步,選擇你想要的主題:
1# selecting a particular theme 2jt -t <name of the theme> 3# reverting to original Theme 4jt -r
現(xiàn)在可用的主題有:
chesterish
grade3
gruvboxd
gruvboxl monokai
oceans16
onedork
solarizedd
solarizedl
把名字填進去就好啦。
不過,每次換主題的時候都要重新加載Jupyter,才能看到主題變化。
另外我們上面講的在命令之前加“!”也一樣可用。
筆記本擴展(nbextensions)是一種JavaScript模塊,可以加載到筆記本前端頁面上,可以大大提升用戶體驗。
比如下面這些擴展工具,簡直能讓效率提升10000倍。
Hinterland
Hinterland功能可以讓你每敲完一個鍵,就出現(xiàn)下拉菜單,可以直接選中你需要的詞匯。
Snippets
Snippets在工具欄里加了一個下拉菜單,可以非常方便的直接插入代碼段,完全不用手動敲。
拆分單元格
拆分筆記本中的單元格,改成相鄰的模式,看起來就像分了兩欄。
目錄
這個功能可以自動找到所有的標題,生成目錄。
并且這個目錄還是移動的呦,你可以放在側邊欄,也可以拖動到任何你喜歡的地方懸浮起來。
折疊一個標題下的全部內(nèi)容
如果你的代碼太長,覺得滾動過去太麻煩,可以直接折疊掉。
Autopep8
一鍵美化代碼,強迫癥的福音。
安裝方法
最后看一下怎么裝,需要用到conda:
1conda install -c conda-forge jupyter_nbextensions_configurator
或者用pip:
1pip install jupyter_contrib_nbextensions && jupyter contrib nbextension install 2#incase you get permission errors on MacOS, 3pip install jupyter_contrib_nbextensions && jupyter contrib nbextension install --user
然后把Jupyter打開,你就可以看到NBextensions這個選項卡了。
找不到的話就去菜單的Edit里面找。
搞定。
還有一些Jupyter小工具,比如滑塊、文本框之類的部分,可以做一些方便的交互。
滑塊
1def f(x): 2 return x 3# Generate a slider 4interact(f, x=10,);
布爾值生成復選框
1# Booleans generate check-boxes 2interact(f, x=True);
字符串生成文本區(qū)域
1# Strings generate text areas 2interact(f, x='Hi there!');
播放器
1play=widgets.Play( 2 # interval=10, 3 value=50, 4 min=0, 5 max=100, 6 step=1, 7 description="Press play", 8 disabled=False 9) 10slider=widgets.IntSlider() 11widgets.jslink((play, 'value'), (slider, 'value')) 12widgets.HBox([play, slider])
日歷
1widgets.DatePicker( 2 description='Pick a Date', 3 disabled=False 4)
不過這個部件只能咋Chrome和Edge里用,F(xiàn)irefox和Safari不支持。
調(diào)色盤
1widgets.ColorPicker(
2 concise=False,
3 description='Pick a color',
4 value='blue',
5 disabled=False
6)
標簽
1tab_contents=['P0', 'P1', 'P2', 'P3', 'P4'] 2children=[widgets.Text(description=name) for name in tab_contents] 3tab=widgets.Tab() 4tab.children=children 5for i in range(len(children)): 6 tab.set_title(i, str(i)) 7tab
其他的小部件,可以在文末的傳送門跳轉到GitHub尋找。
安裝方法
1# pip 2pip install ipywidgets 3jupyter nbextension enable --py widgetsnbextension 4# Conda 5conda install -c conda-forge ipywidgets 6#Installing ipywidgets with conda automatically enables the extension
使用“interact”功能自動創(chuàng)建UI控件,這是使用IPython最方便的方法。
1# Start with some imports! 2from ipywidgets import interact 3import ipywidgets as widgets
Qgrid也是一個Jupyter的小部件,不過它主要用于數(shù)據(jù)幀,裝上之后,就可以像操作Excel里的篩選功能一樣,方便的處理數(shù)據(jù)。
安裝方法
用pip安裝:
1pip install qgrid 2jupyter nbextension enable --py --sys-prefix qgrid 3# only required if you have not enabled the ipywidgets nbextension yet 4jupyter nbextension enable --py --sys-prefix widgetsnbextension
用conda安裝:
1# only required if you have not added conda-forge to your channels yet 2conda config --add channels conda-forge 3conda install qgrid
人在江湖飄,難免遇到要做PPT的時候。
但是,如果你的內(nèi)容都已經(jīng)放在Jupyter里了,再重新導入PPT,太麻煩了,我們自動轉換吧。
一種方法是用Jupyter內(nèi)置的PPT選項,依次點擊菜單欄里的View → Cell Toolbar → Slideshow,之后每個單元格上面都會有一個灰色的橫條,選Sub-Slide。
然后輸入以下代碼:
1jupyter nbconvert *.ipynb --to slides --post serve 2# insert your notebook name instead of *.ipynb
好了,現(xiàn)在就變成PPT樣式的了,顯示在端口8000,你也可以查看源代碼找到PPT文件。
你也可以提前換好主題,比如onedork主題,然后再轉換成PPT的的時候就是同一個主題風格的PPT了。
不過,用PyTorch默認方法生成的PPT代碼不能編輯,這個時候就要用到RISE插件了。
RISE用到reveal.js來運行PPT,可以不退出PPT,直接運行代碼。
先來安裝RISE,推薦用conda:
1conda install -c damianavila82 rise
其實不太推薦pip:
1pip install RISE
然后調(diào)用JS和CSS:
1jupyter-nbextension install rise --py --sys-prefix 2#enable the nbextension: 3jupyter-nbextension enable rise --py --sys-prefix
安裝好啦,現(xiàn)在重新打開你的Jupyter Notebook,發(fā)現(xiàn)一個新的擴展,名叫“Enter/Exit RISE Slideshow”。
戳一下,一個可以邊演示邊改的PPT就好了。
扔鏈接再跳轉實在是太麻煩了,不如直接把素材放進Jupyter里面。
嵌入鏈接
1#Note that http urls will not be displayed. Only https are allowed inside the Iframe 2from IPython.display import IFrame 3IFrame('https://en.wikipedia.org/wiki/HTTPS', width=800, height=450)
操作方式如下,當然你需要把鏈接換成你要放的鏈接:
嵌入pdf
1from IPython.display import IFrame 2IFrame('https://arxiv.org/pdf/1406.2661.pdf', width=800, height=450)
同樣,把pdf鏈接換成你需要用的pdf。
原文:Bringing the best out of Jupyter Notebooks for Data Science
Parul Pandey, Towards Data Science
https://towardsdatascience.com/bringing-the-best-out-of-jupyter-notebooks-for-data-science-f0871519ca29
Jupyter主題
https://github.com/dunovank/jupyter-themes
IPython小部件
https://github.com/jupyter-widgets/ipywidgets
— 完 —
誠摯招聘
量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節(jié),請在量子位公眾號(QbitAI)對話界面,回復“招聘”兩個字。
量子位 QbitAI · 頭條號簽約作者
?'?' ? 追蹤AI技術和產(chǎn)品新動態(tài)
Jupyter Lab 的GitHub Copilot、Cursor:免費開源的智能開發(fā)插件 Jupyter AI。”
01
—
人工智能方面開發(fā)的朋友對Jupyter 應該不陌生,Jupyter官方昨天推出了Jupyter AI開源子項目,能連接各大模型,聊天就可以生產(chǎn)代碼,添加注釋,修改錯誤,閱讀和學習本地文件。類似Idea的AI插件GitHub Copilot、Cursor。
使用者可以選擇最適合需求的 LLM、嵌入模型和向量數(shù)據(jù)庫。底層提示、鏈條和其他軟件都是開源的,因此使用者可以準確了解數(shù)據(jù)的使用情況。
Jupyter AI 在每個 AI 生成的代碼單元格中保存有關模型生成內(nèi)容的元數(shù)據(jù),使用者可以方便的一覽在使用過程中AI 生成的代碼。
Jupyter AI 僅在使用者明確請求時直接與 LLM 進行通信。它不會讀取您的數(shù)據(jù),也不會在未經(jīng)明確同意的情況下將其傳輸給模型。
Jupyter AI 支持使用本地模型,意味著可以在本地部署國內(nèi)開源的ChatGLM這類大模型,接入Jupyter使用,確保數(shù)據(jù)和代碼安全。
(不過到目前為止此項功能尚未完成,還在討論、測試中。
官方團隊在Git Issues中討論了接入本地模型的需要解決問題,感興趣的可以閱讀這個issues:
https://github.com/jupyterlab/jupyter-ai/issues/190)
Jupyter AI 連接的模型主要來自國外 AI21、Anthropic、AWS、Cohere、OpenAI 等各大模型廠商,目前暫時沒見到國內(nèi)廠家的身影。
Jupyter AI 將生成式人工智能引入 Jupyter 筆記本,提供了解釋和生成代碼、修復錯誤、總結內(nèi)容、對本地文件提問,甚至根據(jù)自然語言提示生成整個筆記本的能力。
Jupyter AI 有兩個版本,版本 1.0 適用于 JupyterLab 3,版本 2.0 適用于 JupyterLab 4,都是免費開源軟件。
Jupyter AI 是 Project Jupyter 的官方子項目,現(xiàn)已作為免費開源軟件提供。根據(jù)支持所有 Project Jupyter 原則進行設計:簡單易用、模塊化和可擴展,同時優(yōu)先考慮道德和社會責任。
項目開源地址
https://github.com/jupyterlab/jupyter-ai
安裝Jupyter AI
pip install 'jupyter-ai>=1.0,<2.0' # If you use JupyterLab 3
pip install jupyter-ai # If you use JupyterLab 4
安裝 Jupyter AI 后,在使用魔法命令之前,需要對要使用的每個模型提供程序進行身份驗證。文檔包含了配置模型提供程序的詳細說明,具體見文末地址。
Jupyter AI 提供了兩種不同的方式與 LLM 交互。
02
—
使用
AI助手:Jupyternaut
安裝完后,在Jupyter Lab界面左邊會多出來一個 Jupyternaut。
Jupyternaut 是一個和大語言模型的對話代理。
Jupyternaut 主要通過文本進行通信,它還可以與 JupyterLab 中的文件進行交互。它可以作為通用 AI 助手回答問題,包括從筆記本中選擇問題和問題,將 AI 生成的輸出插入到筆記本中,學習本地文件并提出有關本地文件的問題,以及根據(jù)提示生成筆記本。
我們來試著問一個問題:“Python中元祖和列表有什么區(qū)別?”
還有選中一段代碼,然后讓Jupyternaut幫你生成注釋。
選中左下角的“Replace selection”,可以用包含寫好注釋的代碼塊替換選中的代碼。
根據(jù)文本提示生成筆記本
Jupyter AI 的聊天界面還可以根據(jù)文本提示生成整個筆記本Notebook。
只需要運行 /generate 命令并提供文本描述。Jupyternaut 將使用 AI 大語言模型來命名Notebook并用 Markdown 和代碼單元填充它。
Jupyter Notebook 由一個單元格組成,每個單元格可以包含代碼、公式或文本。代碼單元可以用來執(zhí)行代碼,公式單元可以用來生成圖表和圖形,文本單元可以用來寫注釋或說明。Jupyter Notebook 支持Markdown。
Jupyternaut 生成 notebook 后,會發(fā)送一個包含文件名的消息,我們可以打開該文件進行查看。
學習并詢問本地文件
我們可以使用「/learn」命令讓 Jupyternaut 學習本地文件,隨后使用「/ask」命令詢問有關本地文件的問題。
例如,使用「/learn」命令,讓 Jupyternaut 學習關于 Jupyter AI 文檔的知識。
學習本地文件時,Jupyternaut 使用嵌入模型來轉換數(shù)據(jù),然后將輸出存儲在本地向量數(shù)據(jù)庫中。
學習過程完成后,就可以使用/ask命令提出問題。Jupyternaut 使用檢索增強生成將從其向量數(shù)據(jù)庫中將相關信息附加到問題,然后使用 AI 語言模型來回答問題。
魔法功能
Jupyter AI 提供了可以在 notebook cells 和 IPython 命令行界面中運行的 %% ai 命令,每個 %% ai 命令都需要一個模型,通常指定為 provider?id:model?id。
首先,運行%load_ext jupyter_ai_magics,這將加載 magics 擴展。然后,您可以通過魔法命令使用 Jupyter AI %%ai。
可以運行%ai help以了解可以使用%ai line magic 和%%ai cell magic 命令運行的所有選項和命令。
可以使用-f或--format參數(shù)自定義輸出的格式,包括 HTML、數(shù)學、源代碼和圖像。
如果需要在提示中傳遞變量名或者表達式,可以將變量名稱或表達式用花括號括起來的方式。
這種方式還適用于特殊變量In和Out變量,它們包含代碼單元的輸入和輸出。請注意,單元格輸出可以包含文本和 Markdown 值。
Jupyter AI 添加了一個特殊Err變量,用于存儲執(zhí)行代碼時發(fā)生的錯誤。通過將此變量插入到提示中,可以使用 AI 語言模型來解釋和更正代碼中的錯誤。
官方博客地址:
https://blog.jupyter.org/generative-ai-in-jupyter-3f7174824862
文檔地址:
https://jupyter-ai.readthedocs.io/
錄一、安裝 Jupyter notebook
二、啟動 notebook 服務器
三、關閉 Jupyter
四、保存Notebook
運行幻燈片
notebook 是 Donald Knuth 在 1984 年提出的文字表達化編程的一種形式。在文字表達化編程中,直接在代碼旁寫出敘述性文檔,而不是另外編寫單獨的文檔。用 Donald Knuth 的話來說:
讓我們集中精力向人們解釋我們希望計算機做什么,而不是指示計算機做什么。歸根到底,代碼是寫給人看到,不是寫給計算機看的。notebook 恰恰提供了這種能力。你能夠直接在代碼旁寫出敘述性文檔。這不僅對閱讀 notebook 的人很有用,而且對你將來回頭分析代碼也很有用。
說點題外話:最近,文字表達化編程這個概念已經(jīng)發(fā)展成為一門完整的編程語言,即 Eve。
Jupyter notebook 源自 Fernando Perez 發(fā)起的 IPython 項目。IPython 是一種交互式 shell,與普通的 Python shell 相似,但具有一些很好的功能(例如語法高亮顯示和代碼補全)。最初,notebook 的工作方式是,將來自 Web 應用(你在瀏覽器中看到的 notebook)的消息發(fā)送給 IPython 內(nèi)核(在后臺運行的 IPython 應用程序)。內(nèi)核執(zhí)行代碼,然后將結果發(fā)送回 notebook。當前架構與之相似,具體見下圖。
摘自 Jupyter 文檔核心是 notebook 的服務器。你通過瀏覽器連接到該服務器,而 notebook 呈現(xiàn)為 Web 應用。你在 Web 應用中編寫的代碼通過該服務器發(fā)送給內(nèi)核,內(nèi)核運行代碼,并將結果發(fā)送回該服務器。之后,任何輸出都會返回到瀏覽器中。保存 notebook 時,它將作為 JSON 文件(文件擴展名為 .ipynb)寫入到該服務器中。
此架構的一個優(yōu)點是,內(nèi)核無需運行 Python。由于 notebook 和內(nèi)核分開,因此可以在兩者之間發(fā)送任何語言的代碼。例如,早期的兩個非 Python 內(nèi)核分別是 R 語言和 Julia 語言。使用 R 內(nèi)核時,用 R 編寫的代碼將發(fā)送給執(zhí)行該代碼的 R 內(nèi)核,這與在 Python 內(nèi)核上運行 Python 代碼完全一樣。IPython notebook 已被改名,因為 notebook 變得與編程語言無關。新的名稱 Jupyter 由 Julia、Python 和 R 組合而成。如果有興趣,不妨看看可用內(nèi)核的列表。
另一個優(yōu)點是,你可以在任何地方運行 notebook 服務器,并且可通過互聯(lián)網(wǎng)訪問服務器。通常,你會在存儲所有數(shù)據(jù)和 notebook 文件的自有計算機上運行服務器。但是,你也可以在遠程計算機或云實例(如 Amazon 的 EC2)上設置服務器。之后,你就可以在世界上任何地方通過瀏覽器訪問 notebook。
目前,安裝 Jupyter 的最簡單方法是使用 Anaconda。該發(fā)行版附帶了 Jupyter notebook。你能夠在默認環(huán)境下使用 notebook。
也就是說,只要你安裝了anaconda,你就同時默認安裝了jupyter notebook
要在 conda 環(huán)境中安裝 Jupyter notebook,請使用
conda install jupyter notebook
也可以通過 pip 來獲得 Jupyter notebook。
pip install jupyter notebook
在終端或控制臺中輸入
jupyter notebook
服務器會在你運行此命令的目錄中啟動。
通過在服務器主頁上選中 notebook 旁邊的復選框,然后點擊“Shutdown”(關閉),你就可以關閉各個 notebook。但是,在這樣做之前,請確保你保存了工作!否則,在你上次保存后所做的任何更改都會丟失。下次運行 notebook 時,你還需要重新運行代碼。
通過在終端中按兩次 Ctrl + C,可以關閉整個服務器。再次提醒,這會立即關閉所有運行中的 notebook,因此,請確保你保存了工作!
工具欄包含了保存按鈕,但 notebook 也會定期自動保存。標題右側會注明最近一次的保存。你可以使用保存按鈕手動進行保存,也可以按鍵盤上的 Esc,然后按 s。按 Esc 鍵會變?yōu)槊钅J剑?s 是“保存”的快捷鍵。
像代碼單元格一樣,按 Shift + Enter 或 Ctrl + Enter 可運行 Markdown 單元格,這會將 Markdown 呈現(xiàn)為格式化文本。加入文本可讓你直接在代碼旁寫出敘述性文檔,以及為代碼和思路編寫文檔。
[Neo's home page](http://www.cnblogs.com/Neo007/)
效果:Neo's home page
粗體文本使用兩個符號,例如 **aardvark** 或 __aardvark__ 會呈現(xiàn)為 aardvark。
只要在文本兩側使用相同的符號,星號和下劃線的作用都一樣。
`string.punctuation`
會呈現(xiàn)為 string.punctuation。
要創(chuàng)建代碼塊,請另起一行并用三個反撇號將文本包起來:
import requests
response=requests.get('https://www.udacity.com')
或者將代碼塊的每一行都縮進四個空格。
xxxximport requests
xxxxresponse=requests.get('https://www.udacity.com')
在 Markdown 單元格中,可以使用 LaTeX 符號創(chuàng)建數(shù)學表達式。notebook 使用 MathJax 將 LaTeX 符號呈現(xiàn)為數(shù)學符號。要啟動數(shù)學模式,請在 LaTeX 符號兩側加上美元符號(例如 y=mx+by=mx+b),以創(chuàng)建內(nèi)聯(lián)的數(shù)學表達式。對于數(shù)學符號塊,請使用兩個美元符號:
$$
y=\frac{a}{b+c}
$$
此功能的確很有用,因此,如果你沒有用過 LaTeX,請閱讀這篇入門文檔,它介紹了如何使用 LaTeX 來創(chuàng)建數(shù)學表達式。
1.Magic 關鍵字是可以在單元格中運行的特殊命令,能讓你控制 notebook 本身或執(zhí)行系統(tǒng)調(diào)用(例如更改目錄)。2.Magic 命令的前面帶有一個或兩個百分號(% 或 %%),分別對應行 Magic 命令和單元格 Magic 命令。行 Magic 命令僅應用于編寫 Magic 命令時所在的行,而單元格 Magic 命令應用于整個單元格。
注意:這些 Magic 關鍵字是特定于普通 Python 內(nèi)核的關鍵字。如果使用其他內(nèi)核,這些關鍵字很有可能無效。
%matplotlib
2.代碼計時有時候,你可能要花些精力優(yōu)化代碼,讓代碼運行得更快。在此優(yōu)化過程中,必須對代碼的運行速度進行計時。可以使用 Magic 命令 timeit 測算函數(shù)的運行時間,如下所示:
如果要測算整個單元格的運行時間,請使用 %%timeit,如下所示:
3.在notebook 中嵌入可視化內(nèi)容
4.在 notebook 中進行調(diào)試對于 Python 內(nèi)核,可以使用 Magic 命令 %pdb 開啟交互式調(diào)試器。出錯時,你能檢查當前命名空間中的變量。
在上圖中,可以看到我嘗試對字符串求和,這造成了錯誤。調(diào)試器指出了該錯誤,并提示你檢查代碼。
jupyter nbconvert --to html notebook.ipynb
要通過 notebook 文件創(chuàng)建幻燈片,需要使用 nbconvert:
jupyter nbconvert notebook.ipynb --to slides
這只是將 notebook 轉換為幻燈片必需的文件,你需要向其提供 HTTP 服務器才能真正看到演示文稿。
要轉換它并立即看到它,請使用
jupyter nbconvert notebook.ipynb --to slides --post serve
這會在瀏覽器中打開幻燈片,讓你可以演示它。
提示:你可以通過單擊代碼區(qū)域,然后使用鍵盤快捷鍵 Shift+Enter 或 Shift+ Return 來運行代碼。或者在選擇代碼后使用播放(run cell)按鈕執(zhí)行代碼。
這個簡短的介紹到此結束,它主要介紹了在數(shù)據(jù)科學工作流程中的 Python 工具。充分利用 Anaconda 和 Jupyter notebook 不僅能提升你的工作效率,還會讓你心情更愉快。要想充分發(fā)揮它們的作用,你還要學習很多東西(例如 Markdown 和 LaTeX),但很快你就會知道為何要以其他方式進行數(shù)據(jù)分析。
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。