整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

你真的会用Jupyter吗?这里有7个进阶功能助你效

你真的会用Jupyter吗?这里有7个进阶功能助你效率翻倍

作 Parul Pandey

郭一璞 编译

量子位 出品 | 公众号 QbitAI

作为一个超好用的交互式笔记本,Jupyter总是深受开发者的喜爱。

不过,除了基础的写文档之外,其实Jupyter还有N多功能,简直是一个集视频、图片、PPT、多种交互于一身的万花筒。

如果不会用,你可能错过了Jupyter 99%的功能。

Medium上走向数据科学(Towards Data Science)专栏的作者Parul Pandey就总结了七大Jupyter的进阶用法,量子位编译如下~

执行shell命令

Shell是一种与计算机进行文本交互的方式。

一般来讲,当你正在使用Python编译器,需要用到命令行工具的时候,要在shell和IDLE之间进行切换。

但是,如果你用的是Jupyter,就完全不用这么麻烦了,你可以直接在命令之前放一个“!”,就能执行shell命令,完全不用切换来切换去,就能在IPython里执行任何命令行。

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

注意,返回结果的数据类型不是列表。

给Jupyter换主题

使用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

现在可用的主题有:

chesterish

grade3

gruvboxd

gruvboxl monokai

oceans16

onedork

solarizedd

solarizedl

把名字填进去就好啦。

不过,每次换主题的时候都要重新加载Jupyter,才能看到主题变化。

另外我们上面讲的在命令之前加“!”也一样可用。

笔记本扩展

笔记本扩展(nbextensions)是一种JavaScript模块,可以加载到笔记本前端页面上,可以大大提升用户体验。

比如下面这些扩展工具,简直能让效率提升10000倍。

Hinterland

Hinterland功能可以让你每敲完一个键,就出现下拉菜单,可以直接选中你需要的词汇。

Snippets

Snippets在工具栏里加了一个下拉菜单,可以非常方便的直接插入代码段,完全不用手动敲。

拆分单元格

拆分笔记本中的单元格,改成相邻的模式,看起来就像分了两栏。

目录

这个功能可以自动找到所有的标题,生成目录。

并且这个目录还是移动的呦,你可以放在侧边栏,也可以拖动到任何你喜欢的地方悬浮起来。

折叠一个标题下的全部内容

如果你的代码太长,觉得滚动过去太麻烦,可以直接折叠掉。

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小工具

还有一些Jupyter小工具,比如滑块、文本框之类的部分,可以做一些方便的交互。

滑块

1def f(x):

2 return x

3# Generate a slider 

4interact(f, x=10,);

布尔值生成复选框

1# Booleans generate check-boxes

2interact(f, x=True);

字符串生成文本区域

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里用,Firefox和Safari不支持。

调色盘

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”功能自动创建UI控件,这是使用IPython最方便的方法。

1# Start with some imports!

2from ipywidgets import interact

3import ipywidgets as widgets

Qgrid

Qgrid也是一个Jupyter的小部件,不过它主要用于数据帧,装上之后,就可以像操作Excel里的筛选功能一样,方便的处理数据。

安装方法

用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

人在江湖飘,难免遇到要做PPT的时候。

但是,如果你的内容都已经放在Jupyter里了,再重新导入PPT,太麻烦了,我们自动转换吧。

一种方法是用Jupyter内置的PPT选项,依次点击菜单栏里的View → Cell Toolbar → Slideshow,之后每个单元格上面都会有一个灰色的横条,选Sub-Slide

然后输入以下代码:

1jupyter nbconvert *.ipynb --to slides --post serve

2# insert your notebook name instead of *.ipynb

好了,现在就变成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

然后调用JS和CSS:

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

2#enable the nbextension:

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

安装好啦,现在重新打开你的Jupyter Notebook,发现一个新的扩展,名叫“Enter/Exit RISE Slideshow”。

戳一下,一个可以边演示边改的PPT就好了。

嵌入链接和pdf

扔链接再跳转实在是太麻烦了,不如直接把素材放进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

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

量子位 QbitAI · 头条号签约作者

?'?' ? 追踪AI技术和产品新动态

Jupyter Lab 的GitHub Copilot、Cursor:免费开源的智能开发插件 Jupyter AI。


01


人工智能方面开发的朋友对Jupyter 应该不陌生,Jupyter官方昨天推出了Jupyter AI开源子项目,能连接各大模型,聊天就可以生产代码,添加注释,修改错误,阅读和学习本地文件。类似Idea的AI插件GitHub Copilot、Cursor。


使用者可以选择最适合需求的 LLM、嵌入模型和向量数据库。底层提示、链条和其他软件都是开源的,因此使用者可以准确了解数据的使用情况。


Jupyter AI 在每个 AI 生成的代码单元格中保存有关模型生成内容的元数据,使用者可以方便的一览在使用过程中AI 生成的代码。


Jupyter AI 仅在使用者明确请求时直接与 LLM 进行通信。它不会读取您的数据,也不会在未经明确同意的情况下将其传输给模型。


Jupyter AI 支持使用本地模型,意味着可以在本地部署国内开源的ChatGLM这类大模型,接入Jupyter使用,确保数据和代码安全。


(不过到目前为止此项功能尚未完成,还在讨论、测试中。

官方团队在Git Issues中讨论了接入本地模型的需要解决问题,感兴趣的可以阅读这个issues:

https://github.com/jupyterlab/jupyter-ai/issues/190)


Jupyter AI 连接的模型主要来自国外 AI21、Anthropic、AWS、Cohere、OpenAI 等各大模型厂商,目前暂时没见到国内厂家的身影。


Jupyter AI 将生成式人工智能引入 Jupyter 笔记本,提供了解释和生成代码、修复错误、总结内容、对本地文件提问,甚至根据自然语言提示生成整个笔记本的能力。


Jupyter AI 有两个版本,版本 1.0 适用于 JupyterLab 3,版本 2.0 适用于 JupyterLab 4,都是免费开源软件。


Jupyter AI 是 Project Jupyter 的官方子项目,现已作为免费开源软件提供。根据支持所有 Project Jupyter 原则进行设计:简单易用、模块化和可扩展,同时优先考虑道德和社会责任。


项目开源地址

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 交互。


  • 在 JupyterLab 中,可以使用聊天界面与 LLM 进行对话,用于辅助开发。

  • 在任何支持 notebook 或 IPython 的环境中,包括 JupyterLab、Notebook、IPython、Colab 和 Visual Studio Code,可以使用 %% ai 魔术命令调用 LLM。



02

使用


AI助手:Jupyternaut


安装完后,在Jupyter Lab界面左边会多出来一个 Jupyternaut。


Jupyternaut 是一个和大语言模型的对话代理。


Jupyternaut 主要通过文本进行通信,它还可以与 JupyterLab 中的文件进行交互。它可以作为通用 AI 助手回答问题,包括从笔记本中选择问题和问题,将 AI 生成的输出插入到笔记本中,学习本地文件并提出有关本地文件的问题,以及根据提示生成笔记本。


我们来试着问一个问题:“Python中元祖和列表有什么区别?”



还有选中一段代码,然后让Jupyternaut帮你生成注释。

选中左下角的“Replace selection”,可以用包含写好注释的代码块替换选中的代码。



根据文本提示生成笔记本

Jupyter AI 的聊天界面还可以根据文本提示生成整个笔记本Notebook。


只需要运行 /generate 命令并提供文本描述。Jupyternaut 将使用 AI 大语言模型来命名Notebook并用 Markdown 和代码单元填充它。


Jupyter Notebook 由一个单元格组成,每个单元格可以包含代码、公式或文本。代码单元可以用来执行代码,公式单元可以用来生成图表和图形,文本单元可以用来写注释或说明。Jupyter Notebook 支持Markdown。

Jupyternaut 生成 notebook 后,会发送一个包含文件名的消息,我们可以打开该文件进行查看。


学习并询问本地文件


我们可以使用「/learn」命令让 Jupyternaut 学习本地文件,随后使用「/ask」命令询问有关本地文件的问题。


例如,使用「/learn」命令,让 Jupyternaut 学习关于 Jupyter AI 文档的知识。



学习本地文件时,Jupyternaut 使用嵌入模型来转换数据,然后将输出存储在本地向量数据库中。


学习过程完成后,就可以使用/ask命令提出问题。Jupyternaut 使用检索增强生成将从其向量数据库中将相关信息附加到问题,然后使用 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参数自定义输出的格式,包括 HTML、数学、源代码和图像。

如果需要在提示中传递变量名或者表达式,可以将变量名称或表达式用花括号括起来的方式。

这种方式还适用于特殊变量In和Out变量,它们包含代码单元的输入和输出。请注意,单元格输出可以包含文本和 Markdown 值。


Jupyter AI 添加了一个特殊Err变量,用于存储执行代码时发生的错误。通过将此变量插入到提示中,可以使用 AI 语言模型来解释和更正代码中的错误。



官方博客地址:

https://blog.jupyter.org/generative-ai-in-jupyter-3f7174824862


文档地址:

https://jupyter-ai.readthedocs.io/

录一、安装 Jupyter notebook
二、启动 notebook 服务器
三、关闭 Jupyter
四、保存Notebook
运行幻灯片

  • What?
  • Why?
  • How?
  • ---安装
  • ---启动
  • ---关闭
  • ---保存
  • Markdown语法
  • Magic关键词
  • 转换notebook——toHTML
  • 创建幻灯片
  • 运行代码

What?

文字化编程

notebook 是 Donald Knuth 在 1984 年提出的文字表达化编程的一种形式。在文字表达化编程中,直接在代码旁写出叙述性文档,而不是另外编写单独的文档。用 Donald Knuth 的话来说:

让我们集中精力向人们解释我们希望计算机做什么,而不是指示计算机做什么。归根到底,代码是写给人看到,不是写给计算机看的。notebook 恰恰提供了这种能力。你能够直接在代码旁写出叙述性文档。这不仅对阅读 notebook 的人很有用,而且对你将来回头分析代码也很有用。

说点题外话:最近,文字表达化编程这个概念已经发展成为一门完整的编程语言,即 Eve。

notebook 如何工作

Jupyter notebook 源自 Fernando Perez 发起的 IPython 项目。IPython 是一种交互式 shell,与普通的 Python shell 相似,但具有一些很好的功能(例如语法高亮显示和代码补全)。最初,notebook 的工作方式是,将来自 Web 应用(你在浏览器中看到的 notebook)的消息发送给 IPython 内核(在后台运行的 IPython 应用程序)。内核执行代码,然后将结果发送回 notebook。当前架构与之相似,具体见下图。

摘自 Jupyter 文档核心是 notebook 的服务器。你通过浏览器连接到该服务器,而 notebook 呈现为 Web 应用。你在 Web 应用中编写的代码通过该服务器发送给内核,内核运行代码,并将结果发送回该服务器。之后,任何输出都会返回到浏览器中。保存 notebook 时,它将作为 JSON 文件(文件扩展名为 .ipynb)写入到该服务器中。

Why?

此架构的一个优点是,内核无需运行 Python。由于 notebook 和内核分开,因此可以在两者之间发送任何语言的代码。例如,早期的两个非 Python 内核分别是 R 语言和 Julia 语言。使用 R 内核时,用 R 编写的代码将发送给执行该代码的 R 内核,这与在 Python 内核上运行 Python 代码完全一样。IPython notebook 已被改名,因为 notebook 变得与编程语言无关。新的名称 Jupyter 由 Julia、Python 和 R 组合而成。如果有兴趣,不妨看看可用内核的列表。

另一个优点是,你可以在任何地方运行 notebook 服务器,并且可通过互联网访问服务器。通常,你会在存储所有数据和 notebook 文件的自有计算机上运行服务器。但是,你也可以在远程计算机或云实例(如 Amazon 的 EC2)上设置服务器。之后,你就可以在世界上任何地方通过浏览器访问 notebook。

How?

一、安装 Jupyter notebook

目前,安装 Jupyter 的最简单方法是使用 Anaconda。该发行版附带了 Jupyter notebook。你能够在默认环境下使用 notebook。

也就是说,只要你安装了anaconda,你就同时默认安装了jupyter notebook

要在 conda 环境中安装 Jupyter notebook,请使用

conda install jupyter notebook

也可以通过 pip 来获得 Jupyter notebook。

pip install jupyter notebook 

二、启动 notebook 服务器

在终端或控制台中输入

 jupyter notebook

服务器会在你运行此命令的目录中启动。

三、关闭 Jupyter

3.1 关闭running的notebook

通过在服务器主页上选中 notebook 旁边的复选框,然后点击“Shutdown”(关闭),你就可以关闭各个 notebook。但是,在这样做之前,请确保你保存了工作!否则,在你上次保存后所做的任何更改都会丢失。下次运行 notebook 时,你还需要重新运行代码。

3.2 关闭整个服务器

通过在终端中按两次 Ctrl + C,可以关闭整个服务器。再次提醒,这会立即关闭所有运行中的 notebook,因此,请确保你保存了工作!

四、保存Notebook

工具栏包含了保存按钮,但 notebook 也会定期自动保存。标题右侧会注明最近一次的保存。你可以使用保存按钮手动进行保存,也可以按键盘上的 Esc,然后按 s。按 Esc 键会变为命令模式,而 s 是“保存”的快捷键。

Markdown单元格

像代码单元格一样,按 Shift + Enter 或 Ctrl + Enter 可运行 Markdown 单元格,这会将 Markdown 呈现为格式化文本。加入文本可让你直接在代码旁写出叙述性文档,以及为代码和思路编写文档。

  • 链接
[Neo's home page](http://www.cnblogs.com/Neo007/)

效果:Neo's home page

  • 强调效果
    可以使用星号或下划线( * 或 _ )来表示粗体或斜体,从而添加强调效果。对于斜体,在文本两侧加上一个星号或下划线,例如 _gelato_ 或
    *gelato* 会呈现为 gelato

粗体文本使用两个符号,例如 **aardvark** 或 __aardvark__ 会呈现为 aardvark

只要在文本两侧使用相同的符号,星号和下划线的作用都一样。

  • 代码
    可以通过两种不同的方式显示代码,一种是与文本内联,另一种是将代码块与文本分离。要将代码变为内联格式,请在文本两侧加上反撇号。
    例如,
`string.punctuation`

会呈现为 string.punctuation。

要创建代码块,请另起一行并用三个反撇号将文本包起来:

import requests
response=requests.get('https://www.udacity.com')

或者将代码块的每一行都缩进四个空格。


xxxximport requests
xxxxresponse=requests.get('https://www.udacity.com')
  • 数学表达式

在 Markdown 单元格中,可以使用 LaTeX 符号创建数学表达式。notebook 使用 MathJax 将 LaTeX 符号呈现为数学符号。要启动数学模式,请在 LaTeX 符号两侧加上美元符号(例如 y=mx+by=mx+b),以创建内联的数学表达式。对于数学符号块,请使用两个美元符号:

$$
y=\frac{a}{b+c}
$$

此功能的确很有用,因此,如果你没有用过 LaTeX,请阅读这篇入门文档,它介绍了如何使用 LaTeX 来创建数学表达式。

Magic关键词

Magic-What?

1.Magic 关键字是可以在单元格中运行的特殊命令,能让你控制 notebook 本身或执行系统调用(例如更改目录)。2.Magic 命令的前面带有一个或两个百分号(% 或 %%),分别对应行 Magic 命令和单元格 Magic 命令。行 Magic 命令仅应用于编写 Magic 命令时所在的行,而单元格 Magic 命令应用于整个单元格。

注意:这些 Magic 关键字是特定于普通 Python 内核的关键字。如果使用其他内核,这些关键字很有可能无效。

Magic-How?

  1. 交互工作方式
%matplotlib

2.代码计时有时候,你可能要花些精力优化代码,让代码运行得更快。在此优化过程中,必须对代码的运行速度进行计时。可以使用 Magic 命令 timeit 测算函数的运行时间,如下所示:

如果要测算整个单元格的运行时间,请使用 %%timeit,如下所示:

3.在notebook 中嵌入可视化内容

4.在 notebook 中进行调试对于 Python 内核,可以使用 Magic 命令 %pdb 开启交互式调试器。出错时,你能检查当前命名空间中的变量。

在上图中,可以看到我尝试对字符串求和,这造成了错误。调试器指出了该错误,并提示你检查代码。

转换notebook


jupyter nbconvert --to html notebook.ipynb

创建幻灯片

运行幻灯片

要通过 notebook 文件创建幻灯片,需要使用 nbconvert:

    jupyter nbconvert notebook.ipynb --to slides

这只是将 notebook 转换为幻灯片必需的文件,你需要向其提供 HTTP 服务器才能真正看到演示文稿。

要转换它并立即看到它,请使用

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

这会在浏览器中打开幻灯片,让你可以演示它。

运行代码

提示:你可以通过单击代码区域,然后使用键盘快捷键 Shift+Enter 或 Shift+ Return 来运行代码。或者在选择代码后使用播放(run cell)按钮执行代码。

小结

这个简短的介绍到此结束,它主要介绍了在数据科学工作流程中的 Python 工具。充分利用 Anaconda 和 Jupyter notebook 不仅能提升你的工作效率,还会让你心情更愉快。要想充分发挥它们的作用,你还要学习很多东西(例如 Markdown 和 LaTeX),但很快你就会知道为何要以其他方式进行数据分析。