Jupyter Notebook 简易指南

    Machine Learning

架构介绍

Jupyter notebook 是一种 Web 应用,能让用户将说明文本、数学方程、代码和可视化内容全部组合到一个易于共享的文档中,其架构如下:
Jupyter notebook 的架构说明图

可看到该架构核心是 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 测算代码的运行时间

    1. 使用 %timeit 测算某个命令的运行时间:

    2. 使用 %%timeit 来测算整个单元格的运行时间:

  • 示例二:在 notebook 中嵌入可视化内容
    notebook 允许你将图像与文本和代码一起嵌入。这在你使用 matplotlib 或其他绘图包创建可视化内容时最为有用。在 notebook 中可以使用 %matplotlib 将 matplotlib 设置为以交互方式工作。默认情况下,图形呈现在各自的窗口中。但是,你可以通过命令传递参数,以选择特定的后端(呈现图像的软件)。要直接在 notebook 中呈现图形,应将通过命令 %matplotlib inline 内联后端一起使用

提示
在分辨率较高的屏幕(例如 Retina 显示屏)上,notebook 中的默认图像可能会显得模糊。可以在 %matplotlib inline 之后使用 %config InlineBackend.figure_format = 'retina' 来呈现分辨率较高的图像。


小技巧

在 Notebook 里使用库 matplotlib 时:

  1. 添加 %matplotlib inline 后可在 Notebook 内容流上显示图表(符号 % 带一串命令在 Notebook 里被称为 magic commands

  2. 在代码末尾添加分号 ; 可以隐藏输出,参考这里

  3. 如果 notebook 中的代码需要和其他网站交互,比如载入 IMDb 网站的数据,但是这些网站由于各种原因无法直接访问,可以尝试在启动 Notebook 服务器的命令前加上一个代理命令,表示该服务器在代理环境下打开,享受上网代理的流量端口:

    ## 注意,代理服务器需要自己进行额外配置,myproxy 这个命令也是自行设置命名的,并不是系统自带命令,比如有些玩家可能用的是 proxychains4  
    $ myproxy jupyter notebook  ## 在配置好的代理环境中运行 notebook
    

打赏