Jupyter notebook 介绍
notebook将基于控制台的方法扩展到交互式计算,并向一个全新的方向发展,它提供了一个基于web的应用程序,适用于捕获整个计算过程:开发、记录和执行代码,以及通信结果。Jupyter notebook由两部分组成:
web应用程序:
一种基于浏览器的工具,用于交互式创作文档,该文档结合了解释性文本、数学、计算及其丰富的媒体输出。
Notebook文档:
web应用程序中可见的所有内容的表示,包括计算、解释文本、数学、图像和对象的富媒体表示的输入和输出。
web应用程序的主要特点
- 在浏览器中编辑代码,自动语法高亮,缩进和标签完成/检查。
- 能够从浏览器执行代码,并将计算结果附加到生成这些代码的代码中。
- 使用HTML、LaTeX、PNG、SVG等丰富的媒体表示来显示计算结果。例如,matplotlib库呈现的发布质量数据可以内联包含。
- 使用Markdown标记语言(可以为代码提供注释)在浏览器中编辑富文本并不仅限于纯文本。
- 能够使用LaTeX轻松地在markdown单元格中包含数学符号,并由MathJax本地呈现。
Notebook 文档
Notebook文档包含交互式会话的输入和输出,以及随代码而来的附加文本,但不用于执行。通过这种方式,记事本文件可以作为会话的完整计算记录,将可执行代码与解释性文本、数学和结果对象的丰富表示形式交织在一起。这些文档在内部是JSON文件,并使用.ipynb扩展名保存。由于JSON是纯文本格式,因此可以对其进行版本控制并与同事共享。
可以通过nbconvert
命令将笔记本导出为一系列静态格式,包括HTML(例如,用于博客文章)、reStructuredText、LaTeX、PDF和幻灯片显示。
此外,可以通过Jupyter notebook Viewer (nbviewer)共享来自公共URL的任何.ipynb笔记本文件。该服务从URL加载notebook文档并将其呈现为一个静态web页面。因此,这些结果可以与同事共享,或者作为公共博客文章发布,而不需要其他用户自己安装Jupyter笔记本。实际上,nbviewer只是将nbconvert作为一个web服务,因此您可以使用nbconvert执行自己的静态转换,而不需要依赖于nbviewer。
笔记本和隐私
因为您在web浏览器中使用Jupyter,所以有些人会担心在敏感数据中使用它,这是可以理解的。但是,如果您按照标准安装说明操作,Jupyter实际上是在您自己的计算机上运行的。如果地址栏中的URL以http://localhost:或http://127.0.0.1:开始,则是您的计算机充当服务器。Jupyter不会把你的数据发送到其他任何地方——因为它是开源的,其他人可以检查我们是否诚实。
您还可以远程使用Jupyter:例如,您的公司或大学可能为您运行服务器。如果您想在这些情况下处理敏感数据,请与您的IT或数据保护人员讨论。
我们的目标是确保您的浏览器中的其他页面或同一台计算机上的其他用户不能访问您的笔记本服务器。有关这方面的更多信息,请参见Jupyter笔记本服务器中的安全性。
启动笔记本服务器
你可以用命令行模式打开笔记本服务器
jupyter notebook
这将在您的控制台中打印关于notebook服务器的一些信息,并打开web浏览器到web应用程序的URL(默认情下,http://127.0.0.1:8888)。
Jupyter notebook web应用程序的登录页面dashboard显示当前在notebook目录中可用的notebook(默认情况下,notebook服务器是从该目录启动的)。
您可以使用new Notebook
按钮在仪表板上创建新的记事本,或者通过单击它们的名称打开现有的记事本。还可以将.ipynb记事本和标准.py Python源代码文件拖放到记事本列表区域。
当从命令行启动一个notebook服务器时,还可以使用jupyter notebook my_notebook.ipynb
直接打开一个特定的notebook,从而绕过仪表板。如果没有给出扩展,则假定扩展名为.ipynb。
当您在打开的笔记本内时,File| open…菜单选项将在一个新的浏览器选项卡中打开仪表板,允许您从笔记本目录打开另一个笔记本或创建一个新的笔记本。
Besides
如果希望在不同目录下运行笔记本,可以同时启动多个笔记本服务器。默认情况下,第一个notebook服务器启动于端口8888,稍后的notebook服务器搜索该端口附近的端口。您还可以使用--port
选项手动指定端口。
创建一个新的笔记文档
随时可以创建一个新的笔记本,从仪表板,或使用File-->New menu
选项在一个活跃的笔记本。新笔记本是在同一个目录中创建的,将在一个新的浏览器选项卡中打开。而后仪表板上记事本列表中会出现一个新条目。文档会默认保存为untitled名字。点击Jupyter图标旁的untitled,可以重命名。
打开的笔记本
一个打开的记事本恰好有一个与内核连接的交互会话,内核将执行用户发送的代码并返回结果。如果关闭了web浏览器窗口,则此内核将保持活动状态,并且从仪表板重新打开相同的笔记本将重新将web应用程序连接到相同的内核。在仪表板中,带有活动内核的笔记本旁边有一个shutdown
按钮,而没有活动内核的笔记本旁边有一个delete
按钮。
其他客户机可能连接到相同的内核。当每个内核启动时,笔记本服务器向终端打印这样一条消息:
[NotebookApp] Kernel started:87f7d2c0-13e3-43df-8bb8-1bd37aaf3373
这个长字符串是内核的ID,它足以获得连接到内核所需的信息。如果笔记本使用IPython内核,您还可以通过运行%connect_info
magic,来查看连接数据,这将打印相同的ID信息和其他详细信息。
例如,您可以通过传递ID的一部分,从命令行手动启动连接到同一内核的Qt控制台:
$ jupyter qtconsole --existing 87f7d2c0
如果没有ID,--existing
将连接到最近启动的内核。
使用IPython内核,您还可以在笔记本中运行%qtconsole
magic,以打开连接到相同内核的Qt控制台。
笔记本用户界面
当你创建一个新的笔记文档的时候,你将会看到有如下显示:记事本名称(Notebook name)、菜单栏(menu bar)、工具栏(toolbar)和空代码单元格(code cell)。
笔记本名称:
页面顶部显示的名称,在Jupyter徽标旁边,反映了.ipynb文件的名称。单击记事本名称将弹出一个对话框,允许您重命名它。因此,将一个笔记本从浏览器中的“Untitled0”重命名为“My first notebook”,重命名为Untitled0.ipynb文件到My first notebook.ipynb
菜单栏:
菜单栏提供了不同的选项,可以用来操作笔记本的功能。
工具栏:
通过单击图标,工具栏提供了在笔记本中执行最常用操作的快速方法。
代码单元格:
单元格的默认类型;请继续阅读细胞的解释。
笔记文档的结构
笔记本由一系列单元格组成。单元格是一个多行文本输入字段,它的内容可以通过使用Shift-Enter
或单击工具栏上的“Play”
按钮或菜单栏中的单元格来Run
来执行。单元格的执行行为由单元格的类型决定。有三种类型的单元格:代码单元格、markdown单元格和raw cells。每个单元格一开始都是一个代码单元格,但是它的类型可以通过工具栏上的下拉菜单(最初是“code”)或键盘快捷键来更改。
有关可以在笔记本上做的不同事情的更多信息,请参见示例集。https://nbviewer.jupyter.org/github/jupyter/notebook/tree/master/docs/source/examples/Notebook/
代码单元格
代码单元格允许您编辑和编写新代码,并具有完整的语法高亮显示和tab填充。您使用的编程语言取决于内核,默认内核(IPython)运行Python代码。
当执行一个代码单元格时,它所包含的代码被发送到与该记事本关联的内核。计算返回的结果将作为单元格的输出显示在笔记本中。输出不仅限于文本,还有许多其他可能的输出形式,包括matplotlib图和HTML表(例如,在panda数据分析包中使用的)。这就是IPython丰富的显示功能。
Markdown 单元格
您可以用一种有文化的方式记录计算过程,使用富文本将描述性文本与代码交替。在IPython中,这是通过使用标记语言标记文本来实现的。相应的单元格称为标记单元格。Markdown语言提供了一种执行此文本标记的简单方法,即指定应该强调文本的哪些部分(斜体、粗体、表单列表等)。
如果希望为文档显得层次感,可以使用markdown标题。Markdown标题由1到6个散列#符号#
、空格和节的标题组成。标记标题将转换为笔记本某部分的可单击链接。当导出到其他文档格式(如PDF)时,也可以使用它作为提示。
执行Markdown单元格时,将Markdown代码转换为相应的格式化富文本。Markdown允许任意HTML代码进行格式化。
在Markdown单元格中,还可以使用标准LaTeX符号直接包含数学:$…$
用于内联数学,$$…$$
用于显示数学。当执行标记单元格时,LaTeX部分将自动在HTML输出中呈现为具有高质量排版的方程式。这是MathJax实现的,它支持LaTeX功能的一个很大子集.
LaTeX和AMS-LaTeX (amsmath包)定义的标准数学环境也可以工作,比如\begin{equation}…\{end{equation}
,和\begin{align}…\end{align}
。可以使用标准方法定义新的LaTeX宏,比如\newcommand
,方法是将它们放在标记单元格中的数学分隔符之间。然后,在IPython会话的其余部分中都可以使用这些定义。
Raw cells
原始单元格提供了一个可以直接写入输出的位置。原始单元格不通过笔记本进行评估。当通过nbconvert
时,原始单元格以未修改的目标格式到达。例如,您可以将完整的LaTeX输入到原始单元格中,该单元格仅在nbconvert转换后由LaTeX呈现。
基本工作流程
因此,笔记本中的正常工作流与标准的IPython会话非常相似,不同之处在于,您可以多次就地编辑单元格,直到获得所需的结果,而不必使用%run
命令重新运行单独的脚本。
通常情况下,您将分块处理一个计算问题,将相关的思想组织到单元中,并在前面的部分正确工作后继续前进。对于交互式探索,这要比将计算分解成必须一起执行的脚本方便得多,而这在以前是必要的,尤其是如果其中的一部分需要很长时间运行。
要中断耗时太长的计算,可以使用kernel
、interrupt
菜单选项或i、i
键盘快捷方式。类似地,要重新启动整个计算过程,可以使用kernel
、Restart
菜单选项或0,0
快捷方式。
笔记本可以下载为.ipynb文件,也可以使用菜单选项File
,Download as
下载成其他文件
see also:
在笔记本里执行代码
https://nbviewer.jupyter.org/github/jupyter/notebook/blob/master/docs/source/examples/Notebook/Running Code.ipynb
键盘快捷键
笔记本中的所有操作都可以用鼠标执行,但最常见的快捷键也可以使用键盘快捷键。记住以下这些基本的快捷方式:
-
Shift-Enter:run cell(执行)
执行当前单元格,显示任何输出,然后跳转到下面的下一个单元格。如果在最后一个单元格上调用Shift-Enter,它将在下面生成一个新单元格。这相当于单击单元格、Run
菜单项或工具栏中的Play按钮。 -
Esc:commad mode (命令行模式)
在命令模式下,您可以使用键盘快捷键在笔记本上导航。 -
Enter:Edit mode(编辑模式)
在编辑模式下,可以编辑单元格中的文本。
有关可用快捷方式的完整列表,可以单击Help
菜单中的Keyboard Shortcuts
绘图
Jupyter笔记本的一个主要特性是能够显示运行代码单元的输出。IPython内核被设计为与matplotlib绘图库无缝协作,以提供此功能。特定的绘图库集成是内核的一个特性。
安装内核
有关如何安装Python内核的信息,可以参阅IPython安装页面。
Jupyter wiki有一长串用于其他语言的内核列表。它们通常附带如何在笔记本中使用内核的说明。
信任笔记本
为了防止不可信代码在笔记本打开时代表用户执行,我们存储了每个可信笔记本的签名。记事本服务器在打开记事本时验证此签名。如果没有找到匹配的签名,Javascript和HTML输出将不会显示,直到通过重新执行单元格重新生成它们。
您自己完全执行的任何笔记本都将被认为是可信的,其HTML和Javascript输出将在加载时显示。
如果你需要在不重新执行的情况下查看HTML或Javascript输出,并且你确定笔记本没有恶意,你可以通过以下命令行告诉Jupyter信任它:
$ jupyter trust mynotebook.ipynb
有关信任机制的详细信息,请参阅notebook文档中的安全性。
英文原文
https://jupyter-notebook.readthedocs.io/en/latest/notebook.html#keyboard-shortcuts