Jupyter notebook 是一种 Web 应用,能让用户将说明文本、数学方程、代码和可视化内容全部组合到一个易于共享的文档中。例如,不久前我共享了我最爱的一个 Jupyter notebook ,它分析了 LIGO 实验探测到的两个碰撞的黑洞所发出的引力波。你可以下载数据,运行 notebook 中的代码,重复整个分析,实际上等于你自己探测引力波!
Jupyter Notebook 已迅速成为处理数据的必备工具。其用途包括数据清理和探索、可视化、机器学习和大数据分析。我为我的个人博客创建了一个 notebook 示例,它展示了 notebook 的许多特点。这项工作通常在终端中完成,也即使用普通的 Python shell 或 IPython 完成。可视化在单独的窗口中进行,而文字资料以及各种函数和类脚本包含在独立的文档中。但是,notebook 能将这一切集中到一处,让用户一目了然。
GitHub 上也直接支持 Jupyter notebook 的渲染。借助此出色的功能,你可以轻松地共享工作。http://nbviewer.jupyter.org/ 也会提供 GitHub 代码库中的 notebook ,以及存储在其他地方的 notebook。
要启动 notebook 服务器,请在终端或控制台中输入 jupyter notebook
。服务器会在你运行此命令的目录中启动。这意味着任何 notebook 文件都会保存在该目录下。你通常希望在 notebook 文件所在的目录中启动服务器,不过你也可以在文件系统中导航到 notebook 文件所在的位置。
运行此命令时(请自己试一下!),服务器主页会在浏览器中打开。默认情况下,notebook 服务器的运行地址是 http://localhost:8888
。该地址的含义是:localhost
表示你的计算机,而 8888
是服务器的通信端口。只要 notebook 服务器仍在运行,你随时都能通过在浏览器中输入 http://localhost:8888 返回到 web 页面中。
如果同时启动了另一个 notebook 服务器,新服务器会尝试使用端口 8888
,但由于此端口已被占用,因此新服务器会在端口 8889
上运行。之后,你可以通过 http://localhost:8889
连接到新服务器。每个额外的 notebook 服务器都会像这样增大端口号。
打开jupyter notebook时,你可能会看到上面列表中的一些文件和文件夹,具体取决于你在哪里启动服务器。如下图:
在右侧,你可以点击“New”(新建),创建新的 notebook、文本文件、文件夹或终端。“Notebooks”下的列表显示了你已安装的内核。由于我在 Python 3 环境中运行服务器,因此列出了 Python 3 内核。
顶部的选项卡是 Files(文件)、Running(运行)和 Cluster(集群)。Files(文件)显示当前目录中的所有文件和文件夹。点击 Running(运行)选项卡会列出所有正在运行的 notebook。可以在该选项卡中管理这些 notebook。
过去,在 Clusters(集群)中创建多个用于并行计算的内核。现在,这项工作已经由 ipyparallel 接管,因此该选项卡如今用处不多。
如果在 conda 环境中运行 notebook 服务器,则你还能访问以下所示的“Conda”选项卡。(需要在terminal中安装“Conda”选项卡,语句为conda install jupyter notebook nb_conda)
可以通过该选项卡管理 Jupyter 中的环境。你可以执行多种操作,例如创建新的环境、安装包、更新包、导出环境。
通过在服务器主页上选中 notebook 旁边的复选框,然后点击“Shutdown”(关闭),你就可以关闭各个 notebook。但是,在这样做之前,请确保你保存了工作!否则,在你上次保存后所做的任何更改都会丢失。下次运行 notebook 时,你还需要重新运行代码。
通过在终端中按两次 Ctrl + C,可以关闭整个服务器。再次提醒,这会立即关闭所有运行中的 notebook,因此,请确保你保存了工作!
Magic 关键字是可以在单元格中运行的特殊命令,能让你控制 notebook 本身或执行系统调用(例如更改目录)。例如,在 notebook 中可以使用 %matplotlib
将 matplotlib 设置为以交互方式工作。
Magic 命令的前面带有一个或两个百分号(%
或 %%
),分别对应行 Magic 命令和单元格 Magic 命令。行 Magic 命令仅应用于编写 Magic 命令时所在的行,而单元格 Magic 命令应用于整个单元格。
注意:这些 Magic 关键字是特定于普通 Python 内核的关键字。如果使用其他内核,这些关键字很有可能无效。
有时候,你可能要花些精力优化代码,让代码运行得更快。在此优化过程中,必须对代码的运行速度进行计时。可以使用 Magic 命令 timeit
测算函数的运行时间,如下所示:
如果要测算整个单元格的运行时间,请使用 %%timeit(两个百分号)
在notebook嵌入可视化内容
如前所述,notebook 允许你将图像与文本和代码一起嵌入。这在你使用 matplotlib
或其他绘图包创建可视化内容时最为有用。在 notebook 中可以使用 %matplotlib
将 matplotlib
设置为以交互方式工作。默认情况下,图形呈现在各自的窗口中。但是,你可以通过命令传递参数,以选择特定的“后端”(呈现图像的软件)。要直接在 notebook 中呈现图形,应将通过命令 %matplotlib inline
内联后端一起使用。
提示:在分辨率较高的屏幕(例如 Retina 显示屏)上,notebook 中的默认图像可能会显得模糊。可以在
%matplotlib inline
之后使用%config InlineBackend.figure_format = 'retina'
来呈现分辨率较高的图像。
对于 Python 内核,可以使用 Magic 命令 %pdb
开启交互式调试器。出错时,你能检查当前命名空间中的变量。
当要退出调试时,在ipdb调试窗口输入q就退出调试。
转换notebook
Notebook 只是扩展名为 .ipynb
的大型 JSON 文件。
由于 notebook 是 JSON 文件,因此,可以轻松将其转换为其他格式。Jupyter 附带了一个名为 nbconvert
的实用程序,可将 notebook 转换为 HTML、Markdown、幻灯片等格式。
例如,要将 notebook 转换为 HTML 文件,请在终端中使用
jupyter nbconvert --to html notebook.ipynb
我们也可以在notebook界面中点击File
,在弹出的菜单中点击Download as
,之后选择我们需要转换的格式。
要将 notebook 与不使用 notebook 的其他人共享,转换为 HTML 很有用。而要在博客和其他接受 Markdown 格式化的文本编辑器中显示 notebook,Markdown 很合适。
在 notebook 中创建幻灯片的过程像平常一样,但需要指定作为幻灯片的单元格和单元格的幻灯片类型。在菜单栏中,点击“View”(视图)>“Cell Toolbar”(单元格工具栏)>“Slideshow”(幻灯片),以便在每个单元格上弹出幻灯片单元格菜单。
这会在每个单元格上显示一个下拉菜单,让你选择单元格在幻灯片中的显示方式。
Slides(幻灯片)是你从左向右移动的完整幻灯片。按向上或向下的箭头时,Sub-slides(子幻灯片)会出现在幻灯片中。Fragments(片段)最初是隐藏的,在你按下按钮时会出现。选择Skip(忽略)会在幻灯片中忽略该单元格,而选择 Notes(备注)会将为演讲者保留备注。
要通过 notebook 文件创建幻灯片,需要使用 nbconvert
:
jupyter nbconvert notebook.ipynb --to slides
这只是将 notebook 转换为幻灯片必需的文件,你需要向其提供 HTTP 服务器才能真正看到演示文稿。
要转换它并立即看到它,请使用
jupyter nbconvert notebook.ipynb --to slides --post serve
这会在浏览器中打开幻灯片,让你可以演示它.