Jupyter Notebook 简易指南
架构介绍
Jupyter notebook 是一种 Web 应用,能让用户将说明文本、数学方程、代码和可视化内容全部组合到一个易于共享的文档中,其架构如下:
可看到该架构核心是 Notebook 服务器(Server)。你通过浏览器连接到该服务器,而 Notebook 呈现为 Web 应用。你在 Web 应用中编写的代码通过该服务器发送给内核,内核运行代码,并将结果发送回该服务器。之后,任何输出都会返回到浏览器中。保存 Notebook 时,它将作为 JSON 文件(文件扩展名为 .ipynb)写入到该服务器中。
因此,你可以在任何地方运行 notebook 服务器,并且可通过互联网访问,或者分享给他人。
安装 Jupyter notebook
我们一般通过终端里运行 conda install jupyter notebook 命令来安装,至于 conda 是什么?如何隔离开不同项目(Project)的开发环境?请参考安装和配置 Anaconda
## 此处假定你已经安装设置好了 anaconda
## 最左边的 (py36) 显示的是目前所处的开发环境名,参考上面的链接中关于 conda 新建虚拟开发环境的说明
(py36) $ conda install jupyter notebook
Solving environment: done
## Package Plan ##
environment location: /anaconda3/envs/py36
added / updated specs:
- jupyter
- notebook
The following NEW packages will be INSTALLED:
...
...
Proceed ([y]/n)? y
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
(py36) $启动 Notebook 服务器
在终端中输入 jupyter notebook,服务器就会在你运行此命令的目录中启动,这意味着任何 notebook 文件都会保存在该目录下
## 查看当前所在目录
(py36) $ pwd
/Users/user1/Documents/Udacity_Class/temp_test
## 启动 notebooke 服务器 - 此例子里,服务器运行地址是 http://localhost:8888
## 注意当前所处的环境是 py36 ,notebooke 服务器会使用当前所在环境里的 packages
(py36) $ jupyter notebook
[I 06:07:23.978 NotebookApp] Writing notebook server cookie secret to /Users/user1/Library/Jupyter/runtime/notebook_cookie_secret
[I 06:07:24.147 NotebookApp] Serving notebooks from local directory: /Users/user1/Documents/Udacity_Class/temp_test
[I 06:07:24.147 NotebookApp] 0 active kernels
[I 06:07:24.147 NotebookApp] The Jupyter Notebook is running at:
[I 06:07:24.147 NotebookApp] http://localhost:8888/?token=479961dc55f3f37e3885c81bc4de0cfea8c78d51713d7c21
[I 06:07:24.147 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 06:07:24.148 NotebookApp]打开浏览器,输入服务器地址 http://localhost:8888 后,进入即可开始使用。若要关掉 Notebook,只需在刚刚的终端里使用 Control + C 组合键终止服务器。
Jupyter Notebook 中的数学表达式
在 Notebook 的 Markdown 单元格中,可以使用 LaTeX 符号创建数学表达式。notebook 使用 MathJax 将 LaTeX 符号呈现为数学符号
## 创建「内联(inline)」性质的数学表达式 - 首尾无换行符号
$y = mx + b$
## 创建「块(block)」性质的数学表达式 - 首尾添加换行符号
$$
y = \frac{a}{b+c}
$$关于 LaTex 的更多常用语法请参考 A Primer on Using LaTeX in Jupyter Notebooks(写得挺好的,所以尽管原文页面已无法访问,还是写出来做个纪念。网上能搜到该文,我的 Dropbox 里也有保存),详细一些的可参看这篇 Online LaTeX reference ,更加全面的信息可以参考这个 PDF 文件(尽管该文件似乎有些久远)
Magic 关键字
Magic 关键字是可以在单元格中运行的特殊命令,能让你控制 notebook 本身或执行系统调用(例如更改目录)。例如,在 notebook 中可以使用 %matplotlib 将 matplotlib(python 的一个绘图库) 设置为以交互方式工作。
Magic 命令的前面带有一个或两个百分号(% 或 %%),分别对应「行 Magic 命令」和「单元格 Magic 命令」。「行 Magic 命令」仅应用于编写 Magic 命令时所在的行,而「单元格 Magic 命令」应用于整个单元格。
注意:
这些 Magic 关键字是特定于普通 Python 内核的关键字。如果使用其他内核,这些关键字很有可能无效。
示例一:运行计时器
有时候,你可能希望让代码运行得更快,可以使用 Magic 命令%timeit测算代码的运行时间使用
%timeit测算某个命令的运行时间:
使用
%%timeit来测算整个单元格的运行时间:
示例二:在 notebook 中嵌入可视化内容
notebook 允许你将图像与文本和代码一起嵌入。这在你使用 matplotlib 或其他绘图包创建可视化内容时最为有用。在 notebook 中可以使用%matplotlib将 matplotlib 设置为以交互方式工作。默认情况下,图形呈现在各自的窗口中。但是,你可以通过命令传递参数,以选择特定的后端(呈现图像的软件)。要直接在 notebook 中呈现图形,应将通过命令%matplotlib inline内联后端一起使用
提示:
在分辨率较高的屏幕(例如 Retina 显示屏)上,notebook 中的默认图像可能会显得模糊。可以在 %matplotlib inline 之后使用 %config InlineBackend.figure_format = 'retina' 来呈现分辨率较高的图像。
小技巧
在 Notebook 里使用库 matplotlib 时:
添加
%matplotlib inline后可在 Notebook 内容流上显示图表(符号%带一串命令在 Notebook 里被称为 magic commands)在代码末尾添加分号
;可以隐藏输出,参考这里如果 notebook 中的代码需要和其他网站交互,比如载入 IMDb 网站的数据,但是这些网站由于各种原因无法直接访问,可以尝试在启动 Notebook 服务器的命令前加上一个代理命令,表示该服务器在代理环境下打开,享受上网代理的流量端口:
## 注意,代理服务器需要自己进行额外配置,myproxy 这个命令也是自行设置命名的,并不是系统自带命令,比如有些玩家可能用的是 proxychains4
$ myproxy jupyter notebook ## 在配置好的代理环境中运行 notebook打赏