Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。在本文中,咱们将介绍 Jupyter notebook 的主要特性,以及为何对于但愿编写漂亮的交互式文档的人来讲是一个强大工具。html
在开始使用 notebook 以前,咱们先须要安装该库。你能够在 Jupyter 官网上找到完整的步骤。编程
译者注:其实只要
pip install jupyter
就能够了浏览器
jupyter notebook
运行上面的命令以后,你将看到相似下面这样的输出:markdown
[I 20:06:36.367 NotebookApp] Writing notebook server cookie secret to /run/user/1000/jupyter/notebook_cookie_secret [I 20:06:36.813 NotebookApp] Serving notebooks from local directory: /home/your_username [I 20:06:36.813 NotebookApp] 0 active kernels [I 20:06:36.813 NotebookApp] The IPython Notebook is running at: http://localhost:8888/ [I 20:06:36.813 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
同时,会在你开启 notebook 的文件夹中启动 Jupyter 主界面,以下所示:cookie
若是想新建一个 notebook,只须要点击New
,选择你但愿启动的 notebook 类型便可。网络
这里,由于我只有一个 Python 内核,因此咱们运行一个 Python notebook。在新打开的标签页中,咱们会看到 notebook 界面,目前里面什么也没有。编程语言
notebook 界面由如下部分组成:工具
慢慢熟悉这些菜单和选项。若是想要详细了解有关 notebook 或一些库的具体话题,可使用菜单栏右侧的帮助菜单。测试
下方的主要区域,由被称为单元格的部分组成。每一个 notebook 由多个单元格构成,而每一个单元格又能够有不一样的用途。网站
下方截图中看到的是一个代码单元格(code cell),以[ ]
开头。在这种类型的单元格中,能够输入任意代码并执行。例如,输入1 + 2
并按下Shift + Enter
。以后,单元格中的代码就会被计算,光标也会被移动动一个新的单元格中。你会获得以下结果:
根据绿色边框线,咱们能够轻松地识别出当前工做的单元格。接下来,咱们在第二个单元格中输入些其余代码,例如:
for i in range(5): print(i)
对上面的代码求值时,你会获得:
和前一个示例同样,代码被计算以后,立刻就会显示结果。你应该注意到了,此次没有出现相似Out[2]
这样的文字。这是由于咱们将结果打印出来了,没有返回任何的值。
notebook 有一个很是有趣的特性,就是能够修改以前的单元格,对其从新计算,这样就能够更新整个文档了。试着把光标移回第一个单元格,并将1 + 2
修改为2 + 3
,而后按下Shift + Enter
从新计算该单元格。你会发现结果立刻就更新成了 5。若是你不想从新运行整个脚本,只想用不一样的参数测试某个程式的话,这个特性显得尤为强大。不过,你也能够从新计算整个 notebook,只要点击Cell
-> Run all
便可。
如今咱们已经知道了如何输入代码,为何不尝试着让这个 notebook 更加漂亮、内容更丰富?为此,咱们须要使用其余类型的单元格,即 Header单元格和 Markdown单元格。
首先,咱们在顶部添加一个 notebook 的标题。选中第一个单元格,而后点击Insert
-> Insert单元格above
(在上方插入单元格)。你会发现,文档的顶部立刻就出现了一个新的单元格。点击在快捷键栏中的单元格类型,将其变成一个标题单元格(heading cell):
选中下拉选项中的 Heading。而后会出现一个弹出消息,告诉你如何建立不一样层级的标题,这样你就有了一个不一样类型的 cell:
这个单元格以#
标记开头,意味着这是一个一级标题。若是须要子标题,可使用如下标记表示(改变单元格类型时弹出消息中有解释):
# : 一级标题 ## : 二级标题 ### : 三级标题 ...
在#
以后写下文档的标题,而后计算该单元格。你会发现一个样式很是好看的标题。做为示例和练习,我还添加了其余几个标题单元格:
添加好标题以后,咱们在编写一些解释,介绍每一个代码单元格中的状况。为此,咱们要在相应的地方插入单元格,而后将其类型变成 Markdown。而后,计算新的单元格。就这样,你的解释文本就漂亮地渲染出来了!
最后,你能够重命名该 notebook,点击Fiel
-> Rename
,而后输入新的名称。这样,新的名称将会出如今窗口的左上角,在 Jupyter 的标志旁边。
高级单元格操做,将让编写 notebook 变得更加方便。举例以下:
Edit
-> Delete Cell
;Edit
-> Move cell [up | down]
;Edit
-> Cut Cell
,而后在点击Edit
-> Paste Cell [Above | Below]
;Edit
-> Merge Cell [Above | below]
。记住这些操做,它们能够帮助你节省许多时间。
咱们再来看看 Markdown 单元格。虽然它的类型是 markdown,可是这类单元格也接受 HTML 代码。这样,你就能够在单元格类实现更加丰富的样式,添加图片,等等。例如,若是想在 notebook 中添加 Jupyter 的 logo,将其大小设置为 100px x 100px,而且放置在单元格左侧,能够这样编写:
<img src="http://blog.jupyter.org/content/images/2015/02/jupyter-sq-text.png" style="width:100px;height:100px;float:left">
计算该单元格以后,会出现这样的结果:
另外,markdown 单元格还支持 LaTex 语法。例如:
$$\int_0^{+\infty} x^2 dx$$
计算上述单元格,将得到下面的 LaTex 方程式:
notebook 还有一个强大的特性,就是其导出功能。能够将 notebook 导出为多种格式:
导出 PDF 功能,可让你不用写 LaTex 便可建立漂亮的 PDF 文档。你还能够将 notebook 做为网页发布在你的网站上。甚至,你能够导出为 ReST 格式,做为软件库的文档。
若是你用 Python 绘制过图形,那你确定知道 matplotlib。Matplotlib 是一个用于建立漂亮图形的 Python 库,结合 Jupyter notebook 使用时体验更佳。
要想在 Jupyter notebook 中使用 matplotlib,须要告诉 Jupyter 获取 matplotlib 生成的全部图形,并将其嵌入 notebook 中。为此,须要计算:
%matplotlib inline
译注:要想执行成功,须要先
pip install matplotlib
。
运行这个指令可能要花个几秒钟,可是在 notebook 中须要执行一次便可。接下来,咱们来绘制一个图形,看看具体的集成效果:
import matplotlib.pyplot as plt import numpy as np x = np.arange(20) y = x**2 plt.plot(x, y)
上面的代码将绘制方程式 y=x^2 。计算单元格后,会获得以下图形:
咱们看到,绘制出的图形直接添加在了 notebook 中,就在代码的下面。咱们能够以后修改代码,从新计算,这时图形也会动态更新。这是每一个数据科学家都想要的一个特性:将代码和图片放在同一个文件中,清楚地看出每段代码的效果。
咱们能够很是容易地在一台电脑上启动 Jupyter,并且支持多人经过网络链接同一个 Jupyter 实例。在上一篇文章中,你有没有注意启动 Jupyter 时出现过这样一段话:
The IPython Notebook is running at: http://localhost:8888/
这意味着,你的 notebook 是本地运行的,能够在浏览器上打开 http://localhost:8888/ ,从而访问 notebook。你也能够修改下配置,让该 notebook 能够被公开访问。这样,任何知道 notebook 地址的人均可以链接到 notebook 进行远程修改。
从这两篇快速入门介绍中,咱们能够看到:Jupyter notebook 是一个很是强大的工具,能够建立漂亮的交互式文档,制做教学材料,等