Please enable Javascript to view the contents

交互式笔记本-Jupyter

 ·  ☕ 4 分钟

1. 简介

Jupyter Notebook(前称 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。

Jupyter Notebook 实际上是一个 Web 应用程序,可以创建和共享程序文档,支持实时代码,数学方程,可视化和 Markdown。 用途包括:数据清理和转换,数值模拟,统计建模,机器学习等。

2. 本地安装

2.1 本地安装

推荐使用 Anaconda,自带 Numpy、Scipy、Matplotlib 等多种 Python 开发包和 Jupyter notebook。

如果使用单独的 Python 解释器,则需要安装 Jupyter:

1
pip install jupyter

2.2 本地运行

1
jupyter notebook

3. Docker 安装 Jupyter

官方提供了 base-notebook、minimal-notebook、all-spark-notebook、pyspark-notebook、scipy-notebook、datascience-notebook、tensorflow-notebook 以及 r-notebook 可选。根据自己的需要选择合适的镜像。

3.1 安装 Docker

1
2
3
4
# CentOS 7 上安装 Docker
yum install docker
# 启动 docker 服务进程
service docker start

3.2 运行 Jupyter

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
docker run -d --name jupyter \
-p 8888:8888 \
--user root \
-e GRANT_SUDO=yes \
-e NB_UID=1000 \
-e NB_GID=100 \
-v /home/jupyter:/home/jovyan/work \
jupyter/tensorflow-notebook start-notebook.sh \
--NotebookApp.password='sha1:080ffe3b42b2:f592d77b83d318bad8ee771ba44a51569af552d8'
# 增加 NB_UID 对目录的权限
chown 1000 /home/jupyter

参数解释:

  • \ 表示换行,把一条命令拆成多行以方便阅读
  • -d 表示启动的容器进入到后台运行;
  • -p 表示指定端口,这里把宿主机的 8888 端口映射到容器的 8888 端口;
  • –user=root,允许运行 sudo;
  • -e 指定 jovyan 用户相关权限 ID;
  • –name 表示给启动的容器设定名字;
  • -v 表示把宿主机的目录挂载到容器中。Jupyter Docker 的文档目录是 /home/jovyan/work,为了使得容器被销毁时,文档不受影响,将本地目录 /home/local/jupyter 挂载到 /home/jovyan/work;
  • -NotebookApp.password 是登录的密码,可以在 Ipython 中使用如下命令生成:
1
2
3
4
5
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password: 123456
Verify password: 123456
Out[2]: 'sha1:080ffe3b42b2:f592d77b83d318bad8ee771ba44a51569af552d8'

3.3 配置 Nginx

通过 nginx -t 命令找到 Nginx 的配置文件地址。在 nginx.conf 文件中,新增如下内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    upstream notebook {
        server localhost:8888;
    }
    server{
        listen 80;
        server_name yourdomain.com;
    location / {
        proxy_pass            http://notebook;
        proxy_set_header      Host $host;
        }

    location ~ /api/kernels/ {
        proxy_pass            http://notebook;
        proxy_set_header      Host $host;
        # websocket support
        proxy_http_version    1.1;
        proxy_set_header      Upgrade "websocket";
        proxy_set_header      Connection "Upgrade";
        proxy_read_timeout    86400;
        }
    location ~ /terminals/ {
        proxy_pass            http://notebook;
        proxy_set_header      Host $host;
        # websocket support
        proxy_http_version    1.1;
        proxy_set_header      Upgrade "websocket";
        proxy_set_header      Connection "Upgrade";
        proxy_read_timeout    86400;
        }
    }

使用 nginx -s reload ,重启 Nginx 服务后生效。

4. 使用

Jupyter 的基本单元是编程 cell 组成,也就是一个 In[ ]:

Jupyter 有三种类型的 cells:code,markdown cells,raw cells,常用的是 code cells 和 markdown cells 类型。

Cells 状态分为命令模式和编辑模式,Enter 进入编辑模式,ESC 进入命令模式,命令模式和编辑模式下支持很多操作快捷键。

常用命令模式快捷键:

1
2
3
4
5
6
7
8
- y: 单元进入代码状态
- m: 转入markdown状态
- r:转入raw状态
- a: 上方插入新单元
- b:下方插入新单元
- x:剪切选中单元
- c: 复制选中单元
- shift-v:粘贴到上方单元
  • 插入 Markdown

直接输入 Markdown ,然后 Run 即可渲染结果。支持标题,文本,视频,图片等。

  • 插入 LaTeX 公式

创建行内公式

1
$\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N$。

块级公式

1
$x = \dfrac{-b \pm \sqrt{b^2 - 4ac}}{2a} $$
  • 代码块

可以直接在页面输出代码块,只需要在前后加上```代码块 ```即可。

  • 嵌入图片
1
2
from IPython.display import Image
Image(filename="yourpath.jpg")
  • 嵌入音乐

可以嵌入本地音乐和网络音乐

1
2
from IPython.display import Audio
Audio(filename="yourpath.wma")
1
2
from IPython.display import Audio
Audio(url="http://yourpath.wma")
  • 嵌入本地视频
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import io
import base64
from IPython.display import HTML

video = io.open('/home/test.mp4', 'r+b').read()
encoded = base64.b64encode(video)

HTML(data='''<video alt="test" controls>
     <source src="data:video/mp4;base64,{0}" type="video/mp4" />
     </video>'''.format(encoded.decode('ascii')))
  • 嵌入网页
1
2
from IPython.display import IFrame
IFrame('http://yourpath.com', width='100%', height=350)
  • 嵌入链接
1
2
from IPython.display import FileLink
FileLink('./test/a.ipynb')
  • 魔法命令

所有以 % 开头的方法,都是所谓的魔术方法 (Magic function),也就是 IPython 内置的一些方法。需要注意的是,魔术方法有%和 %% 之分,比如 %timeit 和 %% timeit。在 IPython 中有专门的叫法,前者叫 line magic 后者叫cell magic。顾名思义,前者是专门针对一行的命令,后者针对多行的命令。

通过 %lsmagic可以查看所有的 magic 命令,使用 ? 或者 ?? 可以查看该命令的信息,后者可以查看源码。如: %alias?,会出现该方法的描述。

5. 参考


微信公众号
作者
微信公众号