Jupyter notebook的应用
Jupyter notebook 是一种 Web 应用,能让用户将说明文本、数学方程、代码和可视化内容全部组合到一个易于共享的文档中。
Jupyter notebook 已迅速成为数据分析、机器学习等领域的工作人员在进行数据清理和探索时所需的必备工具。notebook 能将文档及代码等一切相关资料集中到一处,让用户一目了然。
Jupyter notebook 源自 IPython,是一种交互式 shell,与普通的 Python shell 相似。最初,notebook 的工作方式是,将来自 Web 应用(你在浏览器中看到的 notebook)的消息发送给 IPython 内核(在后台运行的 IPython 应用程序)。内核执行代码,然后将结果发送回 notebook。IPython经过技术演进之后,将内核分离,成为现在的架构模式:
架构的核心是 notebook server。用户通过浏览器连接到该服务器。用户在 Web 应用中编写的代码通过浏览器发送给notebook server之后,notebook server将代码发送给内核,内核运行并将结果发送回notebook server。最后,输出返回给浏览器并展示给用户。
保存 notebook 时,所有内容将生成一个 JSON 文件(文件扩展名为 .ipynb)写入到notebook server中。
在 conda 环境中,执行如下命令即可安装jupyter notebook:
conda install jupyter notebook
在Anaconda字符终端输入jupyter notebook,即可启动notebook server。服务器会在此命令被执行的目录中启动,任何 notebook 文件都会保存在该目录下。
运行此命令时(请自己试一下!),服务器主页会在浏览器中打开。默认情况下,notebook server的访问地址是http://localhost:8888,通过当前机器上所带的浏览器访问该地址就可以看到Server的主页面。
如果同时启动了另一个 notebook server,新服务器会尝试使用端口8888,但由于此端口已被占用,新Server会在端口8889上运行。这样,可以通过http://localhost:8889连接到新服务器。
Jupyter主页面类似以下所示:
在右侧,可以点击“New”,创建新的 notebook、文本文件、文件夹或终端。“Notebooks”下的列表显示了已安装的内核,这里可能是Python2/3或者是其他如Scala这样的语言。
顶部的选项卡是 Files、Running和 Cluster。Files显示当前目录中的所有文件和文件夹。点击 Running选项卡会列出所有正在运行的 notebook。可以在该选项卡中管理这些 notebook。
Clusters选项卡用处不多,我们可以先不理会。
通过在服务器主页上选中 notebook 旁边的复选框,然后点击“Shutdown”,就可以关闭各个 notebook。
通过在终端中按 Ctrl + C(Mac及Linux上是按两次Ctrl + C),可以关闭整个服务器。这会立即关闭所有运行中的 notebook,所有未保存的内容会丢失。
新建界面
新建notebook时,界面如下:
在选中单元格之后,可以通过顶部下拉框选择单元格的类型,其中Markdown和Code是最常用的模式。
当选择Markdown模式时,可以用Markdown格式编写文档说明:
小型播放按钮(run钮)可以执行所选单元格,对于Markdown格式,所看到的效果是:
当选择Code模式时,可以在单元格中输入代码,并用run按钮进行执行并获得结果展示。
工具栏
以上重点提到的Code/Markdown之外,工具栏中还有其他常用功能,从左到右这些工具按钮分别是:
- 软盘符:保存
- +按钮:创建新的单元格
- 然后是用于剪切、复制和粘贴单元格的按钮
- 上下箭头表示向上或向下移动选中的单元格
- 运行、停止、重新启动内核
- 单元格类型:代码、Markdown、原始文本和标题
- 命令面板(见下文)
命令面板
小键盘符号代表命令面板。点击它会弹出一个带有搜索栏的面板,在其中可以搜索不同的命令。
你只需打开命令面板,然后键入要执行的操作。例如,如果想清除所有单元的输出,输入clear all cells output,搜出结果之后直接选中就会执行我们所需要的命令:
其他
顶部显示了notebook的标题。点击它可以进行重命名。
标题右侧会注明最近一次notebook的保存时间。
在“File”菜单中,可以选择多种格式进行 notebook 的下载。通常,可以下载为 HTML 文件,以便与不使用 Jupyter 的其他人共享。也可以将 notebook下载为Markdown格式或者Python文件等。
Jupyter有两种模式:
按Esc切换到命令模式,单元格的边框是蓝色的。这个模式下的常用快捷键(Shift-Enter可能是我们最常用的命令):
Enter : 转入编辑模式
Shift-Enter : 运行本单元,选中下个单元
Ctrl-Enter : 运行本单元
Alt-Enter : 运行本单元,在其下插入新单元
Y : 单元转入代码状态
M :单元转入markdown状态
R : 单元转入raw状态
1 : 设定 1 级标题
2 : 设定 2 级标题
3 : 设定 3 级标题
4 : 设定 4 级标题
5 : 设定 5 级标题
6 : 设定 6 级标题
Up : 选中上方单元
K : 选中上方单元
Down : 选中下方单元
J : 选中下方单元
Shift-K : 扩大选中上方单元
Shift-J : 扩大选中下方单元
A : 在上方插入新单元
B : 在下方插入新单元
X : 剪切选中的单元
C : 复制选中的单元
Shift-V : 粘贴到上方单元
V : 粘贴到下方单元
Z : 恢复删除的最后一个单元
D,D : 删除选中的单元
Shift-M : 合并选中的单元
Ctrl-S : 文件存盘
S : 文件存盘
L : 转换行号
O : 转换输出
Shift-O : 转换输出滚动
Esc : 关闭页面
Q : 关闭页面
H : 显示快捷键帮助
I,I : 中断Notebook内核
0,0 : 重启Notebook内核
Shift : 忽略
Shift-Space : 向上滚动
Space : 向下滚动
编辑模式按 Enter 键切换,这模式下单元格颜色是绿的:
Tab : 代码补全或缩进
Shift-Tab : 提示
Ctrl-] : 缩进
Ctrl-[ : 解除缩进
Ctrl-A : 全选
Ctrl-Z : 复原
Ctrl-Shift-Z : 再做
Ctrl-Y : 再做
Ctrl-Home : 跳到单元开头
Ctrl-Up : 跳到单元开头
Ctrl-End : 跳到单元末尾
Ctrl-Down : 跳到单元末尾
Ctrl-Left : 跳到左边一个字首
Ctrl-Right : 跳到右边一个字首
Ctrl-Backspace : 删除前面一个字
Ctrl-Delete : 删除后面一个字
Esc : 进入命令模式
Ctrl-M : 进入命令模式
Shift-Enter : 运行本单元,选中下一单元
Ctrl-Enter : 运行本单元
Alt-Enter : 运行本单元,在下面插入一单元
Ctrl-Shift-- : 分割单元
Ctrl-Shift-Subtract : 分割单元
Ctrl-S : 文件存盘
Shift : 忽略
Up : 光标上移或转入上一单元
Down :光标下移或转入下一单元
Magic 关键字是可以在单元格中运行的特殊命令,能让用户控制 notebook 本身或执行系统调用(例如更改目录)。例如,在 notebook 中可以使用 %matplotlib 将 matplotlib 设置为以交互方式工作(直接在当前notebook页面打印出绘图结果)。
Magic 命令的前面带有一个或两个百分号,分别对应行 Magic 命令和单元格 Magic 命令。行 Magic 命令仅应用于编写 Magic 命令时所在的行,而单元格 Magic 命令应用于整个单元格。
以下举两例在notebook中常用的Magic。
代码计时
Magic 命令 %timeit 测算函数的运行时间,如下:
%%timeit测算整个单元格的运行时间:
%%timeit
# 生成0到29之间所有奇数的平方并放到一个列表中
def squared(x):
return x*x
multiples = [squared(i) for i in range(30) if i%2 != 0]
#print(multiples)
在notebook中嵌入可视化统计图
在jupyter notebook中绘制统计图时,使用 %matplotlib 将 matplotlib 设置为以交互方式(另开一个窗口绘图)工作:
%matplotlib
import matplotlib.pyplot as plt
import numpy as np
n = 10
X = np.arange(n)
Y1 = (1 - X / float(n))
Y2 = (1 - X / float(n))
plt.bar(X,+Y1)
plt.bar(X,-Y2)
plt.xlim(-5,n)
plt.ylim(-1.25,1.25)
plt.show()
使用%matplotlib inline设置为内联方式:
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
n = 10
X = np.arange(n)
Y1 = (1 - X / float(n))
Y2 = (1 - X / float(n))
plt.bar(X,+Y1)
plt.bar(X,-Y2)
plt.xlim(-5,n)
plt.ylim(-1.25,1.25)
plt.show()