Jupyter概述
Project Jupyter是一个非营利性的开源项目,诞生于2014年的IPython项目,该项目支持跨所有编程语言的交互式数据科学和科学计算,并承认永久性开源免费。
目前Jupyter主要包含四个产品:
- Jupyter Notebook
- JupyterLab
- JupyterHub
- Voilà
除此之外,Jupyter还提供了一个便捷的web应用程序nbviewer用于分享Jupyter Notebook,以及小部件Widgets,用于支持在Jupyter笔记本中进行交互式数据可视化。
Jupyter Notebook
一个开源的网络应用程序,它允许你创建和共享包含实时代码、方程式、可视化和叙事文本的文档,适合捕捉整个计算过程:开发、记录和执行代码。用途包括:数据清理和转换,数值模拟,统计建模,数据可视化,机器学习等等
Jupyter notebook主要由以下两个部分组成
web应用程序:一个基于浏览器的工具,用于交互式编写文档,它结合了解释性文本、数学、计算和它们的富媒体输出。主要特性如下:
- 在浏览器中编辑代码,自动语法高亮,缩进,代码补全/纠正(Tab键)
- 从浏览器中执行代码,并附加计算结果到代码上
- 使用富媒体表示显示计算结果,如HTML、LaTeX、PNG、SVG等
- 使用Markdown对富文本进行浏览器内编辑(可用于代码注释)
- 能在markdown单元格中用LaTeX表示数学符号,并由MathJax原生呈现
笔记本文档:在web应用程序中可见的所有内容的表示,包括计算的输入和输出、解释性文本、数学、图像和对象的富媒体表示。主要特性如下:
- 文档内部是JSON文件,并以.ipynb扩展名保存。
- 由于JSON是一种纯文本格式,因此可以对其进行版本控制并与同事共享。
- 通过nbconvert工具,文档可以导出为一系列静态格式,包括HTML、reStructuredText、LaTeX、PDF和幻灯片。
- .ipynb扩展名的文件可通过nbviewer进行共享,当然也可以不依赖于nbviewer,自己通过nbconvert进行静态转换,然后分享。
Jupyter Notebook主要维护支持以下几款浏览器的最新版本:
- Chrome
- Safari
- Firefox
Jupyter Notebook 官方文档 Jupyter Notebook 官方案例
1 Jupyter安装与启动
1.1 安装
先决条件:Python 推荐安装方式:安装Anaconda(同时包含Python和Jupyter) 可选安装方式:在配有Python环境的前提下通过pip安装jupyter
1.2 启动
在终端执行命令:
#启动jupyter notebook(包装版本)
jupyter notebook
#启动jupyter notebook(真实版本)
jupyter-notebook
#启动时打开指定的.ipynb文件
jupyter notebook notebook.ipynb
#启动时修改端口号
jupyter notebook --port 9999
#启动时不打开web浏览器
jupyter notebook --no-browser
#查看启动的其他命令
jupyter notebook --help
启动成功后系统将自动跳转到对应页面(默认地址为http://localhost:8888
)
2 notebook界面
管理面板(Notebook Dashboard):
编辑界面(Notebook Editor): 当您创建一个新的记事本文档时,您将看到记事本名称、菜单栏、工具栏和一个空的代码单元格。
笔记本由一系列单元格组成。单元格是一个多行文本输入字段,它的内容可以通过使用Shift-Enter执行,或单击工具栏的“Play”按钮,或单击菜单栏中的“cell, Run”。最常用的单元格类型主要为代码单元格( code cells)、Markdown单元格(markdown cells)和原始单元格(raw cells)。
其中原始单元格(raw cells)提供了一个可以直接写入输出的地方。原始单元格直接通过nbconvert传递,保留并展现出目标的应有格式。例如,您可以在原始单元格中键入完整的LaTeX,只有通过nbconvert转换后,才会呈现LaTeX的渲染结果。
3 代码单元格
代码单元格允许编辑和编写新代码,具有完整的语法突出显示和Tab键代码补全功能。
- 运行Python代码的内核默认是IPython。
- 当代码单元被执行时,它所包含的代码被发送到与notebook相关联的内核。
- 内核计算返回的结果将作为单元格的输出显示在笔记本中。
- 输出不仅限于文本,还可能有许多其他形式的输出,包括matplotlib图形和HTML表(例如,在pandas数据分析包中使用的)。这被称为IPython的丰富显示功能。
4 Markdown 单元格
以一种读写的方式记录计算过程,使用富文本交替使用描述性文本和代码。在IPython中,这是通过使用Markdown语言标记文本来实现的。相应的单元格称为Markdown单元格。
- Markdown语言提供了一种执行文本标记的简单方法,即指定文本格式、表单列表等(类似于Word的功能)
- 通过
#
来标识标题,来为文档提供结构 - 执行Markdown单元格时,Markdown代码将转换为相应的格式化富文本
- 通过
$...$
或$$...$$
来引入LaTeX符号描述数学公式,并通过执行单元格输出高质量的HTML公式排版
5 快捷键
进入Jupyter Notebook在菜单栏中的help
中可以查看快捷键
Jupyter笔记本有两种不同的键盘输入模式
- 编辑模式允许您将代码或文本输入到一个单元格中,并通过一个绿色的单元格来表示
- 命令模式将键盘与笔记本级命令绑定在一起,并通过一个灰色的单元格边界显示,该边框为蓝色的左边框。
命令模式 (按键
Esc
开启)快捷键:
F
: 查找并且替换Ctrl-Shift-F
或Ctrl-Shift-P
或P
: 打开命令配置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-Up
或Shift-K
: 扩大选中上方单元Shift-Down
或Shift-J
: 扩大选中下方单元A
: 在上方插入新单元B
: 在下方插入新单元X
: 剪切选中的单元C
: 复制选中的单元Shift-V
: 粘贴到上方单元V
: 粘贴到下方单元Z
: 撤销删除D,D
: 删除选中的单元(连续按两个 D 键)Shift-M
: 合并选中的单元Ctrl-S
或S
: 保存并检查当前 NoteBookL
: 开关行号(编辑框的行号是可以开启和关Space
: 向下滚动
编辑模式 ( Enter
键启动)下快捷键
Tab
: 代码补全或缩进Shift-Tab
: 提示(输出帮助信息,部分函数、类、方法等会显示其定义原型,如果在其后加?
再运行会显示更加详细的帮助)Ctrl-]
:缩进Ctrl-[
:解除缩进Ctrl-A
:全选Ctrl-Z
:撤销Ctrl-/
:注释整行/撤销注释(仅代码状态有效)Ctrl-D
:整行删除Ctrl-U
:撤销选择Insert
:切换 重写标志Ctrl-Home
或Ctrl-Up
: 跳到单元开头Ctrl-End
或Ctrl-Down
: 跳到单元末尾Ctrl-Left
: 跳到左边一个字首Ctrl-Right
: 跳到右边一个字首Ctrl-Backspace
: 删除前面一个字Ctrl-Delete
: 删除后面一个字Ctrl-Y
:重做Alt-U
:重新选择Esc
或Ctrl-M
:进入命令模式Ctrl-Shift-F
或Ctrl-Shift-P
: 打开命令配置Shift-Enter
: 运行本单元,选中下一单元(新单元默认为命令模式)Ctrl-Enter
: 运行本单元Alt-Enter
: 运行本单元,在下面插入一单元(新单元默认为编辑模式)Ctrl-Shift-Minus
: 分割单元(按光标所在行进行分割)Ctrl-Shift-Subtract
: 分割单元Ctrl-S
: 保存并检查文件Up
:光标上移或转入上一单元Down
:光标下移或转入下一单元
注: 如果快捷键被系统中的其它应用占用,则可能会失效
6 Magic关键字
magic函数系统提供了一系列函数,允许您控制IPython本身的行为,以及许多系统类型的特性。magic函数主要包含两大类,一类是行魔法(Line magic)前缀为%
,一类是单元魔法(Cell magic)前缀为%%
行魔法(Line magic)列表
%alias
:定义系统命令的别名%alias_magic
:定义Magic命令的别名%autoawait
:设置一个特定的异步代码运行器%autocall
:省略函数调用的括号%automagic
:省略Magic关键字的前缀%
%autosave
:设置notebook的自动保存间隔(秒)%bookmark
:管理IPython的书签系统(列举、增删)%cd
:更改当前工作目录%clear
:清空终端%cls
:清空终端%colors
:切换提示、信息系统和异常处理程序的颜色方案%conda
:在当前内核中运行conda包管理器%config
:配置IPython%connect_info
:打印连接到当前内核的其他客户端的信息%copy
:同!copy
,shell的复制命令%ddir
或%ldir
:同!dir
,shell的文件夹命令%debug
:实现断点调试和出错调试的功能%dhist
:输出目录的访问历史记录%dirs
:输出当前目录的stack?%doctest_mode
: 启动或关闭文档测试%echo
:同!echo
,shell的复制命令%ed
或%edit
:打开编辑器并执行代码%env
:环境变量管理(列举、增删)%gui
:启动或关闭IPython GUI事件循环集成(event loop integration)%hist
或%history
:输入的历史记录%killbgscripts
:杀死所有由%%script
产生的BG进程%less
或%more
:通过页面(pager?)显示文件%load
:将代码加载到当前前端%load_ext
:按模块名加载一个IPython扩展%loadpy
:灵活版%load
(不限定文件后缀为.py
)%logoff
:暂时停止日志记录%logon
:重启日志记录%logstart
:开始日志记录%logstate
:输出日志系统的状态%logstop
:停止日志记录%ls
:等效于!dir /on
,按名称查看文件信息%lsmagic
:列出目前可用的Magic函数%macro
:定义一个宏以便将来重新执行%magic
:输出Magic函数的系统信息%matplotlib
:设置matplotlib(比如常用的%matplotlib inline
,省去plt.show()
过程)%mkdir
:等效于!mkdir
,创建文件夹%notebook
:notebooks导出与格式转换%page
:美化输出格式,并通过页面(pager?)显示%pastebin
:文本分享(上传文本到存储网站,返回URL)%pdb
:控制pdb交互式调试器的自动调用%pdef
:输出任何可调用对象的调用标记(比如输出类的函数构造信息)%pdoc
:输出对象的文档字符串%pfile
:输出(或遍历页面)的已定义对象的文件%pinfo
:提供指定对象的详细信息%pinfo2
:提供指定对象的额外详细信息%pip
:在当前内核中运行pip包管理器%popd
:更改到从堆栈顶部输出的目录%pprint
:打开/关闭输出格式美化%precision
:设置输出格式的浮点精度%prun
:通过python代码分析器运行一条语句%psearch
:在命名空间中通过通配符搜索对象%psource
:输出(或通过页面运行)对象的源代码%pushd
:将当前目录放在堆栈上并更改目录%pwd
:返回当前工作目录路径%pycat
:在页面中显示语法高亮的文件%pylab
:以交互地方式加载numpy和matplotlib%qtconsole
:打开连接到这个内核的qtconsole%quickref
:显示一个快速参考表(%magic
的简化版)%recall
或%rep
:类似于复制粘贴的功能%rehashx
:根据$PATH中的所有可执行文件更新别名表%reload_ext
:根据模块名重新加载IPython扩展%ren
:等效于!ren
,文件重命名%rerun
:重新运行之前的输入%reset
:重置命名空间%reset_selective
:重置命名空间的符合指定规则一部分%rmdir
:等效于!rmdir
,文件删除%run
:在IPython中以程序的形式运行指定的文件%save
:保存多行代码或宏到指定文件%sc
:运行shell命令并保留输出(已弃用)%set_env
:设置环境变量%store
:python变量的轻量级持久化%sx
或%system
:运行shell命令并保留输出(简记为!!
)%tb
:输出最后的追踪结果%time
或%timeit
:输出Python语句或表达式的执行时间%unalias
:删除一个别名%unload_ext
:通过模块名卸载一个IPython扩展%who
:以最简略的格式打印所有可交互变量%who_ls
:返回所有可交互变量的排序列表%whos
:%who
的升级版,信息更丰富了%xdel
:深度删除一个变量%xmode
:切换为异常处理程序的模式
单元魔法(Cell magic)列表
%%!
:运行shell命令并保留输出(简记为!!
)%%HTML
或%%html
:将单元格渲染为HTML块%%SVG
或%%svg
: 使用SVG literal渲染单元格%%bash
:在子进程中使用bash运行单元格%%capture
:运行单元格,捕获stdout、stderr和IPython回调的富文本display()%%cmd
:在子进程中使用cmd运行单元格%%debug
:激活交互式调试器%%file
或%%writefile
:将单元格的内容写入文件%%javascript
或%%js
:使用Javascript运行单元格块代码%%latex
:使用latex渲染单元格%%markdown
:使用markdown渲染单元格%%perl
:在子进程中使用perl运行单元格%%prun
:通过python代码分析器运行一条语句%%pypy
:在子进程中使用pypy运行单元格%%python
:在子进程中使用python运行单元格%%python2
:在子进程中使用python2运行单元格%%python3
:在子进程中使用python3运行单元格%%ruby
:在子进程中使用ruby运行单元格%%script
:通过shell命令运行单元格%%sh
:在子进程中使用sh运行单元格%%sx
:运行shell命令并保留输出(简记为!!
)%%system
:运行shell命令并保留输出(简记为!!
)%time
或%timeit
:输出Python语句或表达式的执行时间
Automagic is ON, % prefix IS NOT needed for line magics.
7 Notebook 扩展插件
Jupyter Notebook 扩展插件(nbextensions)是一些 JavaScript 模块,你可以使用它们强化 Notebook 的功能以及使用。扩展插件本质上修改了 Jupyter UI,以实现更稳健的功能。
首先通过 pip 安装 nbextensions:
pip install jupyter_contrib_nbextensions
安装完成后,启动 Jupyter。你将在Dashboard界面看到一个新选项——NBextensions。选择它之后,你会看到大量 Jupyter Notebook 扩展插件选项。
常用插件推荐
- Table of Contents:在notebook左侧会生成可跳转目录(非常实用)
- Hinterland:提供更优秀的代码补全功能
- Split Cells:拆分单元格允许开发者并排查看 2 个单元格
- Qgrid:不使用复杂代码的情况下,探索和编辑数据,实现诸如滚动、排序和筛选等直观的控制
8 其他技巧补充
执行shell命令
- 在 shell 命令前加一个感叹号!,Jupyter 会将其转换为 Bash
- 还可以将 shell 命令的输出分配给 Python 变量,如下所示
# Getting the current directory.
# The variable "X" now contains ["/home/george/github/project_1"]
X = !pwd
JupyterLab
7_software/Jupyter/JupyterLab 入门
JupyterHub
一个多用户版本的Jupyter Notebook,转为团队协作进行了优化(用户管理和权限认证、支持基于容器的集中部署、数据代码统一管理)
JupyterHub由四个子系统组成
- 一个基于tornado进程的Hub作为核心
- 一个可配置的HTTP代理(node-http-proxy),用于接收来自客户端浏览器的请求
- 由spawn监控的多用户Jupyter笔记本服务器
- 一个身份验证类用于管理用户的系统访问权限
JupyterLab的功能
- 中心启动一个代理
- 默认情况下,代理将所有请求转发到Hub
- Hub处理用户登录并按需生成单用户服务器
- Hub配置代理将URL前缀转发给单用户notebook服务器
Voilà
可以将一个Jupyter Notebook转换成一个可以共享的独立web应用程序,给读者安全的、可定制的交互式体验。Voilà可以用作独立应用程序(默认地址localhost:8866),也可以用作Jupyter服务器扩展运行(默认地址http://localhost:8888/voila)。
Voilà的运行机制
- Voilà运行notebook中的代码,并收集输出结果
- 收集notebook和输出结果并转化为Web页面(默认隐藏notebook中的代码单元格)
- 生成的Web页面通过Tornado应用或者Jupyter服务进行展示
- 当用户访问页面时,页面上的小部件可以访问底层的Jupyter内核
nbviewer
nbviewer是一个web应用程序,通过输入一个Jupyter笔记本文件的URL,呈现该笔记本作为一个静态的HTML网页,并提供一个稳定的页面链接同来与他人共享
nbviewer原理
nbviewer特性
- 不能支持代码,只是将 notebook文档转为web页面
- nbviewer只能分享外网可访问的notebook URL
- 依托于底层的nbconvert工具,nbviewer还可以将.ipynb文件转为HTML、LaTeX、PDF、Reveal JS、Markdown (md)、ReStructured Text (rst)和executable script等格式
- nbviewer支持在个人服务器搭建
Widgets
一个Jupyter小部件用于支持在Jupyter笔记本中进行交互式数据可视化 Widgets主要包括以下几个包:
ipyleaflet: 一个用于创建具有平移和缩放功能的简单交互式地图的库,支持诸如多边形、标记等注释,以及更普遍的任何geojson编码的地理数据结构。
bqplot: 一个实现图形语法结构的二维交互式数据可视化库,它提供了一个简单的API来创建自定义用户交互。
pythreejs:3-D可视化库,使用gpu进行计算加速
ipyvolume:使用WebGL为Python绘制3d绘图
nglview:以交互方式查看分子结构和轨迹
K3D-Jupyter:使用高级API(表面、等值面、体素、网格、云点、vtk对象、体积渲染器、彩色地图等)在WebGL支持下创建3D图
BeakerX:用于表、图、表单、Apache Spark等数据的交互(类似于在线Excel)
jupyter-gmaps:在Jupyter笔记本中嵌入交互式谷歌地图。使用热图、GeoJSON、符号和标记可视化数据,或绘制方向、交通或自行车路线。
widget cookiecutters:允许开发人员使用JavaScript和TypeScript生态系统的可视化库
perspective:一个用于大型、实时数据集的交互式可视化组件
1 其他补充
Jupyter在浏览器中无法加载或工作
- 在其他浏览器中尝试(例如,如果你通常使用Firefox,尝试使用Chrome)。这有助于确定问题所在。
- 尝试禁用任何浏览器扩展和/或任何已安装的Jupyter扩展。
- 一些网络安全软件可以干扰木星。如果你有安全软件,试着暂时关闭它,并在设置中寻找更长期的解决方案。
- 在地址栏中,尝试在localhost和127.0.0.1之间进行更改。它们应该是相同的,但在某些情况下,这是不同的。