Jupyter 笔记本#
简介#
Jupyter 笔记本是一个笔记本创作应用程序,属于 Project Jupyter 的一部分。基于强大的 计算笔记本格式,Jupyter 笔记本提供快速、交互式的新方法来原型和解释您的代码,探索和可视化您的数据,以及与他人分享您的想法。
笔记本扩展了基于控制台的交互式计算方法,朝着一个全新的方向发展,提供了一个基于 Web 的应用程序,适合捕获整个计算过程:开发、记录和执行代码,以及传达结果。Jupyter 笔记本结合了两个组件
Web 应用程序:一个基于浏览器的编辑程序,用于交互式创作计算笔记本,它为原型和解释代码、探索和可视化数据以及与他人分享想法提供了快速交互式环境
计算笔记本文档:一个可共享的文档,它结合了计算机代码、纯文本描述、数据、丰富的可视化效果(如 3D 模型、图表、数学、图形和图形)以及交互式控件
另请参阅
请参阅 安装指南,了解如何安装笔记本及其依赖项。
Web 应用程序的主要功能#
在浏览器中编辑代码,具有自动语法高亮、缩进和选项卡完成/内省。
能够从浏览器执行代码,并将计算结果附加到生成它们的代码。
使用丰富的媒体表示形式(如 HTML、LaTeX、PNG、SVG 等)显示计算结果。例如,[matplotlib] 库生成的出版质量图形可以内联包含。
使用 [Markdown] 标记语言在浏览器中编辑富文本,它可以为代码提供注释,而不限于纯文本。
能够使用 LaTeX 在 Markdown 单元格中轻松包含数学符号,并由 MathJax 本地渲染。
笔记本文档#
笔记本文件包含交互式会话的输入和输出,以及代码附带的额外文本,这些文本不应执行。这样,笔记本文件可以作为会话的完整计算记录,将可执行代码与解释性文本、数学和结果对象的丰富表示交织在一起。这些文档在内部是 JSON 文件,并使用 .ipynb
扩展名保存。由于 JSON 是一种纯文本格式,因此它们可以进行版本控制并与同事共享。
笔记本可以导出为多种静态格式,包括 HTML(例如,用于博客文章)、reStructuredText、LaTeX、PDF 和幻灯片,通过 [nbconvert] 命令。
此外,任何来自公共 URL 的 .ipynb
笔记本文件都可以通过 Jupyter Notebook Viewer <nbviewer> 共享。此服务从 URL 加载笔记本文件并将其呈现为静态网页。因此,结果可以与同事共享,或作为公共博客文章共享,而无需其他用户安装 Jupyter 笔记本。实际上,nbviewer 只是 [nbconvert] 作为一项 Web 服务,因此您可以使用 nbconvert 进行自己的静态转换,而无需依赖 nbviewer。
另请参阅
笔记本和隐私#
由于您在 Web 浏览器中使用 Jupyter,因此有些人会担心在处理敏感数据时使用它。但是,如果您按照标准 安装说明 进行操作,Jupyter 实际上是在您自己的计算机上运行的。如果地址栏中的 URL 以 http://localhost:
或 http://127.0.0.1:
开头,则您的计算机充当服务器。Jupyter 不会将您的数据发送到任何其他地方——而且它是开源的,其他人可以检查我们是否对此诚实。
您也可以远程使用 Jupyter:例如,您的公司或大学可能会为您运行服务器。如果您想在这些情况下处理敏感数据,请与您的 IT 或数据保护人员联系。
我们的目标是确保浏览器中的其他页面或同一台计算机上的其他用户无法访问您的笔记本服务器。有关此方面的更多信息,请参阅 安全文档。
启动笔记本服务器#
您可以使用以下命令从命令行启动运行笔记本服务器
jupyter notebook
这将在您的控制台中打印一些有关笔记本服务器的信息,并在 Web 浏览器中打开 Web 应用程序的 URL(默认情况下为 http://127.0.0.1:8888
)。
Jupyter 笔记本 Web 应用程序的登录页面,即 **仪表板**,显示了笔记本目录中当前可用的笔记本(默认情况下,笔记本服务器启动的目录)。
您可以使用 New Notebook
按钮从仪表板创建新的笔记本,或通过单击其名称打开现有的笔记本。您还可以将 .ipynb
笔记本和标准 .py
Python 源代码文件拖放到笔记本列表区域。
从命令行启动笔记本服务器时,您也可以直接打开特定的笔记本,绕过仪表板,使用 jupyter notebook my_notebook.ipynb
。如果未给出扩展名,则假定 .ipynb
扩展名。
当您在打开的笔记本中时,File | Open...
菜单选项将在新的浏览器选项卡中打开仪表板,以允许您从笔记本目录中打开另一个笔记本或创建新的笔记本。
注意
如果您想在不同的目录中处理笔记本,则可以同时启动多个笔记本服务器。默认情况下,第一个笔记本服务器在端口 8888 上启动,后面的笔记本服务器会在该端口附近搜索端口。您也可以使用 --port
选项手动指定端口。
创建新的笔记本文档#
您可以随时创建新的笔记本,无论是从仪表板还是使用活动笔记本中的
菜单选项。新笔记本将在同一目录中创建,并在新的浏览器选项卡中打开。它也会在仪表板上的笔记本列表中显示为新条目。打开笔记本#
一个打开的笔记本具有 **正好一个** 与内核连接的交互式会话,该会话将执行用户发送的代码并传回结果。如果关闭网页浏览器窗口,此内核将保持活动状态,从仪表板重新打开同一个笔记本将重新连接网页应用程序到同一个内核。在仪表板中,具有活动内核的笔记本旁边有一个 关闭
按钮,而没有活动内核的笔记本则在其位置有一个 删除
按钮。
其他客户端可以连接到同一个内核。当每个内核启动时,笔记本服务器会向终端打印类似以下的消息
[JupyterNotebookApp] Kernel started: 87f7d2c0-13e3-43df-8bb8-1bd37aaf3373
此长字符串是内核的 ID,足以获取连接到内核所需的信息。如果笔记本使用 IPython 内核,您还可以通过运行 %connect_info
魔法命令 来查看此连接数据,它将打印相同的 ID 信息以及其他详细信息。
然后,例如,您可以通过传递 ID 的一部分,从命令行手动启动连接到 *同一个* 内核的 Qt 控制台
$ jupyter qtconsole --existing 87f7d2c0
如果没有 ID,--existing
将连接到最近启动的内核。
使用 IPython 内核,您也可以在笔记本中运行 %qtconsole
魔法命令 以打开连接到同一个内核的 Qt 控制台。
另请参阅
笔记本用户界面#
当您创建一个新的笔记本文档时,您将看到 **笔记本名称**、**菜单栏**、**工具栏** 和一个空的 **代码单元格**。
**笔记本名称**: 页面顶部 Jupyter 徽标旁边显示的名称反映了 .ipynb
文件的名称。单击笔记本名称将弹出一个对话框,允许您重命名它。因此,在浏览器中将笔记本从“Untitled0”重命名为“My first notebook”,将 Untitled0.ipynb
文件重命名为 My first notebook.ipynb
。
**菜单栏**: 菜单栏提供不同的选项,可用于操作笔记本的功能。
**工具栏**: 工具栏提供了一种快速执行笔记本中最常用操作的方法,只需单击图标即可。
**代码单元格**: 默认类型的单元格;请继续阅读以了解单元格的解释。
笔记本文档的结构#
笔记本由一系列单元格组成。单元格是一个多行文本输入字段,其内容可以通过使用 Shift-Enter 来执行,或者通过单击工具栏上的“播放”按钮或菜单栏中的 单元格、运行 来执行。单元格的执行行为由单元格的类型决定。单元格有三种类型:**代码单元格**、**Markdown 单元格** 和 **原始单元格**。每个单元格最初都是一个 **代码单元格**,但可以通过使用工具栏上的下拉菜单(最初将是“代码”)或通过 键盘快捷键 来更改其类型。
有关您可以在笔记本中执行的不同操作的更多信息,请参阅 示例集合。
代码单元格#
代码单元格允许您编辑和编写新代码,并提供完整的语法高亮和选项卡补全功能。您使用的编程语言取决于内核,默认内核(IPython)运行 Python 代码。
当执行代码单元格时,它包含的代码将被发送到与笔记本关联的内核。从该计算返回的结果将显示在笔记本中作为单元格的输出。输出不仅限于文本,还有许多其他可能的输出形式,包括matplotlib
图形和 HTML 表格(例如,在pandas
数据分析包中使用)。这被称为 IPython 的富显示功能。
另请参阅
[富输出] 示例笔记本
Markdown 单元格#
您可以使用富文本以一种可读的方式记录计算过程,交替使用描述性文本和代码。在 IPython 中,这是通过使用 Markdown 语言标记文本来实现的。相应的单元格称为Markdown 单元格。Markdown 语言提供了一种简单的方法来执行此文本标记,即指定文本的哪些部分应该被强调(斜体)、粗体、形成列表等。
如果您想为文档提供结构,可以使用 Markdown 标题。Markdown 标题由 1 到 6 个井号 #
后跟一个空格和您的部分标题组成。Markdown 标题将被转换为笔记本部分的可点击链接。它也用作导出到其他文档格式(如 PDF)时的提示。
当执行 Markdown 单元格时,Markdown 代码将转换为相应的格式化富文本。Markdown 允许使用任意 HTML 代码进行格式化。
在 Markdown 单元格中,您还可以使用标准 LaTeX 符号以简单的方式包含数学:$...$
用于内联数学,$$...$$
用于显示数学。当执行 Markdown 单元格时,LaTeX 部分将自动在 HTML 输出中呈现为具有高质量排版的方程式。这是由MathJax 实现的,它支持LaTeX 功能的大部分子集
LaTeX 和 AMS-LaTeX(amsmath
包)定义的标准数学环境也适用,例如 \begin{equation}...\end{equation}
和 \begin{align}...\end{align}
。可以使用标准方法(例如 \newcommand
)定义新的 LaTeX 宏,方法是将它们放置在 Markdown 单元格中数学分隔符之间的任何位置。然后,这些定义将在整个 IPython 会话的其余部分可用。
另请参阅
[使用 Markdown 单元格] 示例笔记本
原始单元格#
原始单元格提供了一个可以直接写入输出的位置。原始单元格不会由笔记本评估。当通过 [nbconvert] 传递时,原始单元格将以未修改的形式到达目标格式。例如,您可以在原始单元格中键入完整的 LaTeX,它只有在通过 nbconvert 转换后才会由 LaTeX 呈现。
基本工作流程#
因此,笔记本中的正常工作流程与标准 IPython 会话非常相似,区别在于您可以多次就地编辑单元格,直到获得所需的结果,而不是必须使用 %run
魔术命令重新运行单独的脚本。
通常,您将分段处理计算问题,将相关想法组织到单元格中,并在前面的部分正确工作后继续前进。这对于交互式探索来说比将计算分解成必须一起执行的脚本要方便得多,尤其是在其中一部分需要很长时间才能运行的情况下。
要中断正在进行的计算,请使用内核,中断菜单选项,或i,i键盘快捷键。类似地,要重新启动整个计算过程,请使用内核,重启菜单选项或0,0快捷键。
笔记本可以下载为 .ipynb
文件,也可以使用菜单选项 文件,另存为 转换为其他格式。
另请参阅
[在 Jupyter Notebook 中运行代码] 示例笔记本
[笔记本基础] 示例笔记本
键盘快捷键#
笔记本中的所有操作都可以使用鼠标执行,但最常用的操作也可以使用键盘快捷键。需要记住的基本快捷键如下
Shift-Enter: 运行单元格 : 执行当前单元格,显示任何输出,并跳转到下面的下一个单元格。如果在最后一个单元格上调用 Shift-Enter,它将在下面创建一个新单元格。这等同于单击 单元格,运行 菜单项,或工具栏中的播放按钮。
Esc: 命令模式 : 在命令模式下,您可以使用键盘快捷键在笔记本周围导航。
Enter: 编辑模式 : 在编辑模式下,您可以编辑单元格中的文本。
有关可用快捷键的完整列表,请单击笔记本菜单中的 帮助,键盘快捷键。
搜索#
Jupyter Notebook 具有一个高级内置搜索插件,用于在笔记本或其他文档中查找文本,默认情况下使用 Ctrl-F (Cmd+F 适用于 macOS) 快捷键。
您的浏览器的 find
功能将给出意外的结果,因为它无法访问文档的完整内容(默认情况下),但您仍然可以使用浏览器菜单中的浏览器查找功能,或者您可以使用高级设置编辑器禁用内置搜索快捷键。
或者,您可以禁用窗口化笔记本渲染,以将完整的文档内容公开给浏览器,但会牺牲性能。
绘图#
Jupyter 笔记本的主要功能之一是能够显示运行代码单元格的输出的绘图。IPython 内核旨在与 [matplotlib] 绘图库无缝协作以提供此功能。特定绘图库集成是内核的一项功能。
安装内核#
有关如何安装 Python 内核的信息,请参阅 IPython 安装页面。
Jupyter wiki 有一个关于 其他语言的内核 的长列表。它们通常附带有关如何使内核在笔记本中可用的说明。
信任笔记本#
为了防止笔记本打开时不受信任的代码代表用户执行,我们存储每个受信任笔记本的签名。笔记本服务器在打开笔记本时验证此签名。如果找不到匹配的签名,则在通过重新执行单元格重新生成之前,不会显示 Javascript 和 HTML 输出。
您自己完全执行的任何笔记本都将被视为受信任的,并且其 HTML 和 Javascript 输出将在加载时显示。
如果您需要在不重新执行的情况下查看 HTML 或 Javascript 输出,并且您确定笔记本不是恶意的,您可以告诉 Jupyter 在命令行中信任它,方法是
$ jupyter trust mynotebook.ipynb
有关信任机制的更多详细信息,请参阅 安全文档。
浏览器兼容性#
Jupyter Notebook 旨在支持这些浏览器的最新版本
Chrome
Safari
Firefox
Opera 和 Edge 的最新版本也可能可以使用,但如果无法使用,请使用支持的浏览器之一。
使用带有 HTTPS 和不受信任证书的 Safari 无法正常工作(WebSockets 会失败)。