Jupyter Notebook
Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。在本文中,我们将介绍 Jupyter notebook 的主要特性,以及为什么对于希望编写漂亮的交互式文档的人来说是一个强大工具。
在开始使用 notebook 之前,我们先在cmd中使用pip安装该库 pip install jupyter
安装好之后运行命令 jupyter notebook 你会看到:
[I 08:34:12.265 NotebookApp] Writing notebook server cookie secret to C:\Users\zjb52\AppData\Roaming\jupyter\runtime\notebook_cookie_secret
[I 08:34:13.407 NotebookApp] Serving notebooks from local directory: C:\Users\zjb52
[I 08:34:13.408 NotebookApp] 0 active kernels
[I 08:34:13.409 NotebookApp] The Jupyter Notebook is running at:
[I 08:34:13.412 NotebookApp] http://localhost:8888/?token=ab4515092713565e3db18a62abc166573aab52689c45d6c1
[I 08:34:13.412 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 08:34:13.420 NotebookApp]
Copy/paste this URL into your browser when you connect for the first time,
to login with a token:
http://localhost:8888/?token=ab4515092713565e3db18a62abc166573aab52689c45d6c1
[I 08:34:13.946 NotebookApp] Accepting one-time-token-authenticated connection from ::1
同时,会在你开启 notebook 的文件夹中启动 Jupyter 主界面,如下所示:

如果想新建一个 notebook,只需要点击New,选择你希望启动的 notebook 类型即可。

这里,因为我只有一个 Python 内核,所以我们运行一个 Python notebook。在新打开的标签页中,我们会看到 notebook 界面,目前里面什么也没有。

notebook 界面由以下部分组成:
- notebook 的名称
- 主工具栏,提供了保存、导出、重载 notebook,以及重启内核等选项
- 快捷键
- notebook 主要区域,包含了 notebook 的内容编辑区
慢慢熟悉这些菜单和选项。如果想要详细了解有关 notebook 或一些库的具体话题,可以使用菜单栏右侧的帮助菜单。
下方的主要区域,由被称为单元格的部分组成。每个 notebook 由多个单元格构成,而每个单元格又可以有不同的用途。
下方截图中看到的是一个代码单元格(code cell),以[ ]开头。在这种类型的单元格中,可以输入任意代码并执行。例如,输入1 + 1并按下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]; - 如果你的 notebook 中有很多单元格只需要执行一次,或者想一次性执行大段代码,那么可以选择合并这些单元格。点击
Edit->Merge Cell [Above | below]。
Markdown 单元格高级用法
我们再来看看 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 导出为多种格式:
- HTML
- Markdown
- ReST
- PDF(通过 LaTeX)
- Raw Python
导出 PDF 功能,可以让你不用写 LaTex 即可创建漂亮的 PDF 文档。你还可以将 notebook 作为网页发布在你的网站上。甚至,你可以导出为 ReST 格式,作为软件库的文档。
Matplotlib 集成
如果你用 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() y = x** 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 是一个非常强大的工具,可以创建漂亮的交互式文档,制作教学材料,等等。建议你马上开始使用 Jupyter notebook,探索更多 notebook 的强大功能。
参考文章:
Jupyter Notebook的更多相关文章
- 远程访问jupyter notebook
远程访问Jupyter Notebook Jupyter Notebook很好用,但是直接远程在服务器上用体验当然不如本地计算机好,那么如何远程访问呢? 首先需要在服务器上安装好ipython, ju ...
- Python,Jupyter Notebook,IPython快速安装教程
0.安装环境 Windows10,Python3.5.1,IPython,jupyter notebook,and other functionality 官方安装文档Linux版3.x 官方安装文档 ...
- Jupyter Notebook 27绝技——27 Jupyter Notebook tips, tricks and shortcuts
转载自:https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/ Jupyter notebook, formerly ...
- Jupyter notebook 配置目录
默认打开Jupyter notebook,工作目录是C:\Users\Username,这里面有很多其它与Jupyter notebook无关的文件,也很有用,不能看着烦就删掉,所以需要修改Jupyt ...
- 如何用Jupyter Notebook打开Spark
电脑已经装了anaconda python,然后下载了spark2.1.0.因为版本太新,所以网上和书上的一些内容已经不再适用.比如关于如何使用IPython和Jupyter,教程给出的方法是用如下语 ...
- jupyter notebook + pyspark 环境搭建
安装并启动jupyter 安装 Anaconda 后, 再安装 jupyter pip install jupyter 设置环境 ipython --ipython-dir= # override t ...
- Jupyter notebook 安装,初步使用
在学习算法,图像处理过程中,理论结合实际的时候总要写一些程序,我用的是PYTHON.这时候,选择一款称手的工具比较重要.之前我用自带的IDLE,也还可以,但是操作不够便捷,文件组织也不是很好.后来想用 ...
- pyspark 中启动 jupyter notebook
还是打算选择python学习spark编程 因为java写函数式比较复杂,scala学习曲线比较陡峭,而且sbt和eclipse和maven的结合实在是让人崩溃,经常找不到主类去执行 python以前 ...
- 详解 jupyter notebook 集成 spark 环境安装
来自: 代码大湿 代码大湿 1 相关介绍 jupyter notebook是一个Web应用程序,允许你创建和分享,包含活的代码,方程的文件,可视化和解释性文字.用途包括:数据的清洗和转换.数值模拟.统 ...
- Docker 安装jupyter notebook
1. 利用image运行一个container sudo docker run -it --net=host tingting --net=host:让container可以上网,安装原来的sudo ...
随机推荐
- Python基础数据类型之列表和元组
一.列表 list 列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: li ...
- Java8新特性第2章(接口默认方法)
在Java中一个接口一旦发布就已经被定型,除非我们能够一次性的更新所有该接口的实现,否者在接口的添加新方法将会破坏现有接口的实现.默认方法就是为了解决这一问题的,这样接口在发布之后依然能够继续演化. ...
- Oracle12c:创建主分区、子分区,实现自动分区插入效果
单表自动单个分区字段使用方式,请参考:<Oracle12c:自动分区表> 两个分区字段时,必须一个主分区字段和一个子分区字段构成(以下代码测试是在oracle12.1版本): create ...
- kafka知识体系
最近一直在整理kafka相关资料,以构建自己的知识体系. 主要分为五大方面: Kafka设计与原理分析 Kafka配置分析 Kafka运维手册 Kafka编程开发 kafka源码分析
- [LeetCode] Minimum ASCII Delete Sum for Two Strings 两个字符串的最小ASCII删除和
Given two strings s1, s2, find the lowest ASCII sum of deleted characters to make two strings equal. ...
- C#中string的相关方法
下面的方法一般都有很多重载形式,作为初学者的我先把我用过的记录下来吧...以后用到其他的可以一点点添加: 直接上例子吧.先定义两个字符串str1,str2(不要吐槽命名==) string str1, ...
- localStorage学习总结
一.本地存储 在HTML5诞生之前,网站如果想在浏览器端存储数据,只能使用Cookie,使用Cookie有较多的限制. Cookie问题: 1.cookie大小限制在4K左右(各个浏览器不一致) 2. ...
- Idea导入多个maven项目到同一目录下
目标 简单导入多个maven项目进入同一个project(相当于eclipse的workspace) 过程 1.新建一个目录作为仿eclipse的workspace,这里起名为idea-workspa ...
- CLR-2-2-引用类型和值类型
引用类型和值类型,是一个老生常谈的问题了.装箱拆箱相信也是猿猿都知,但是还是跟着CLR via C#加深下印象,看有没有什么更加根本和以前被忽略的知识点. 引用类型: 引用类型有哪些这里不过多赘述,来 ...
- [SCOI 2005]王室联邦
Description “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理.他的国家有n个城市,编号为1..n.一些城市之间有道路相连,任意两个不 ...