计算机技术|Python开发之jupyter notebook使用详解

jupyter notebook是一个基于网页的交互式计算环境,它本身支持多种语言的开发,但常用于Python的开发。其优点是交互式强,易于可视化,尤其适用于需要频繁修改、实验的场景,比如数据分析、测试机器学习模型等。另一个优点是它是基于Web的,客户端运行于浏览器,而真正的Python环境(kernel)则运行于服务器。因此可以把计算引擎部署在计算力强大的后台服务器甚至是GPU服务器上,这对于很多深度学习的计算环境是很方便的。
jupyter notebook产品的官方主页为https://jupyter.org/。

安装与启动 anaconda 如果安装了anaconda的python发行版,那么jupyter notebook就已经自带了。只需要从anaconda navigator中启动即可,如下图所示。

官方python 如果安装的是Python官方发行版,则需要自行安装jupyter notebook。安装过程可能会有点慢,因此它需要安装比较多的相关软件包。

pip install notebook

安装完成后,只需要敲入jupyter-notebook命令即可启动。
jupyter-notebook[I 15:16:27.520 NotebookApp] Serving notebooks from local directory: /Users/gran/work_macpro/study/python/jupyter_notebook [I 15:16:27.520 NotebookApp] Jupyter Notebook 6.1.6 is running at: [I 15:16:27.520 NotebookApp] http://localhost:8888/?token=4f1c60188b984ab261fa033d936007d2e49b36b6b3c01261 [I 15:16:27.520 NotebookApp]or http://127.0.0.1:8888/?token=4f1c60188b984ab261fa033d936007d2e49b36b6b3c01261 [I 15:16:27.520 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [C 15:16:27.528 NotebookApp]


不论是从anaconda启动,还是手动安装后通过命令行启动,jupyter notebook都会在后台启动一个web服务器,默认端口为8888。在浏览器中访问http://localhost:8888即可使用jupyter notebook。如下图所示。
计算机技术|Python开发之jupyter notebook使用详解
文章图片


使用详解 基本界面 从浏览其打开jupyter notebook后,主界面的Files标签里是一个文件浏览器。可以本机工作目录里的文件,如果是jupyter notebook文档可以直接打开;当然也可以在这里新建或者上传一个文档,如下图所示。
计算机技术|Python开发之jupyter notebook使用详解
文章图片

选择新建一个python 3文档,则进入notebook文档界面,可以敲入python代码,并修改文档名称。如下图所示。
计算机技术|Python开发之jupyter notebook使用详解
文章图片

修改并保存文档后,再回到主界面,可以看到在Files标签里面多了一个hello_world.ipynb文件;而在Running标签则多了一个运行中的文档。
计算机技术|Python开发之jupyter notebook使用详解
文章图片

计算机技术|Python开发之jupyter notebook使用详解
文章图片

每当新建或者打开一个notebook文档,在主界面Running里面都会有一项对应的记录。在文档界面里面,这后台对应的运行引擎称为kernel。
以上就是jupyter notebook的主要界面,很简单。下面重点介绍文档界面的操作。
文档操作 文档界面又一个菜单栏和工具栏,同时还支持快捷键。实际应用中,推荐使用快捷键。文档界面的菜单里有两个新术语cell(单元)和kernel(内核)。
cell的编辑模式与命令模式
cell是一个jupyter notebook文档的基本组成单位,一个文档可以有一个或者多个cell。前面的截图中输入的hello world代码地方就是一个cell。cell有两种模式,编辑模式和命令模式。处于编辑模式时,cell中有光标闪烁,并且菜单栏右侧有编辑图标。快捷键esc可从编辑模式变为命令模式;在命令模式下按下enter则切回编辑模式。
计算机技术|Python开发之jupyter notebook使用详解
文章图片

计算机技术|Python开发之jupyter notebook使用详解
文章图片

cell类型
cell的类型有代码、Markdown和原始文档几种。混合使用代码cell和Markdown,可以形成一个很好的笔记文档。比如用Markdown来描述设计、算法和代码,其表达能力比Python自带的注释更丰富。在命令模式下,可以用快捷键改变一个cell的类型:
  • 快捷键y将一个cell类型变为代码cell
  • 快捷键m将一个cell类型变为Markdown
下图是一个混合的notebook示例,前面两个都是Markdown类型的cell,而后面的则是Python代码cell。
计算机技术|Python开发之jupyter notebook使用详解
文章图片

cell的输入与输出
对于代码cell,有输入和输出区域。输入区域就是输入源代码的,而输出区域则是代码的执行结果。要查看一个代码cell的输出结果,只需按下快捷键control+enter(???)。可以反复修改cell,修改后再次运行该cell则其输出也会根据最新的代码而变化。
万能的p命令 在命令模式下,如果按下键盘上的p键,则会弹出所有快捷操作的列表。因此,如果你记不住某个操作快捷键,那么就是用p命令吧!
计算机技术|Python开发之jupyter notebook使用详解
文章图片


总结一下,cell操作的快捷键盘(以mac book的键盘为例)。如果用过vi编辑器的话, 很多编辑快捷操作都似曾相识。
cell操作 快捷键
编辑模式切换到命令模式 esc
命令模式切换到编辑模式 enter
快捷操作列表 p(命令模式)
cell类型改为代码 y(命令模式)
cell类型改为Markdown m(命令模式)
删除cell dd(命令模式)
复制cell c(命令模式)
在上方插入一个新的cell a(命令模式)
在下方插入一个新的cell b(命令模式)
在下方粘贴cell v(命令模式)
在上方粘贴cell shift v(?v)
运行cell control enter(???)(编辑模式,命令模式)
运行cell并选中下一个cell shift enter(???)(编辑模式,命令模式)
运行cell并在下方插入一个新的cell oprion enter(???)(编辑模式,命令模式)
内嵌帮助 在代码单元中,如果不知道某个函数的用法或者命令的用法,可以在其后敲入问好?然后运行,系统就会显示帮助文档。比如敲入pirnt?,然后运行该cell,则会显示内嵌的帮助文档。
计算机技术|Python开发之jupyter notebook使用详解
文章图片


还可以通过help()来启动交互式帮助控制台。
计算机技术|Python开发之jupyter notebook使用详解
文章图片


shell命令 在代码单元中,可以执行shell命令。shell命令以!开头,如下所示。
计算机技术|Python开发之jupyter notebook使用详解
文章图片

magic命令 jupyter notebook的代码单元还支持一种以%开头的称为magic的命令。这些命令包括一些内嵌的工具,如测量时间的%timeit,还有一些shell的功能,如%cat等。同样,可以在magic命令后面加?来显示使用帮助。下面是两个示例。
计算机技术|Python开发之jupyter notebook使用详解
文章图片


计算机技术|Python开发之jupyter notebook使用详解
文章图片

完整的magic命令可通过执行%magic命令来查看。
计算机技术|Python开发之jupyter notebook使用详解
文章图片

【计算机技术|Python开发之jupyter notebook使用详解】
内核操作 内核操作可从文档界面的kernel菜单进入。
计算机技术|Python开发之jupyter notebook使用详解
文章图片

每个jupyter notebook文档在后台都有对应的运行环境,即一个内核。内核主要操作包括重启和关闭。每运行一个cell,内核里都有记录,会保存其状态;再运行很多cell后,或者经过多次修改后,之前运行的一些变量的结果可能不再适用,这种情况下可能就需要重启内核。重启后,所有的变量和状态都被清除,相当于一个cell都没运行的状态。如果想要重启后再运行所有cell,则执行"Restart & Run All",如果想要重启并清除输出结果,则执行"Restart & Clear Output"。

jupyter notebook里的cell并不一定要按照顺序执行,可以跳转到任何cell执行。内核有一个计数器,会标记每个执行过的cell顺序。比如下面的例子中,共有两个cell。先把所有的cell都运行一遍,然后修改第一个cell中的代码后,再跳转到第一个cell运行,第一个cell的输出结果更新了,同时第一个cell的执行顺序也变成了3。如下图所示。
计算机技术|Python开发之jupyter notebook使用详解
文章图片

计算机技术|Python开发之jupyter notebook使用详解
文章图片


正式这种小范围内随时修改、随时执行出结果的特性,是的jupyter notebook非常适用于边实验边写代码的开发。尤其是数据分析、机器学习模型的开发,往往需要反复实验、反复调参,因此jupyter notebook就很适合前期的开发。
安装kernel jupyter notebook可以支持多种后台引擎(kernel),从而可以支持不同的开发语言。以bash为例,可以安装bash kernel。命令如下:
pip install bash_kernel

python3 -m bash_kernel.install --sys-prefix Installing IPython kernel spec

带上--sys-prefix的作用是将kernel安装到虚拟环境(venv)中。
然后用jupyter kernelspec命令可以查看系统中的kernel。
jupyter kernelspec list

再启动jupyter-notebook,就可以创建bash脚本,并连接到bash kernel运行。
计算机技术|Python开发之jupyter notebook使用详解
文章图片


jupyter notebook可以支持的kernel有很多,流行的开发语言,比如JavaScript,TypeScript,go,Lua,C++等等都支持。详细列表可参见其WiKi页面https://github.com/jupyter/jupyter/wiki/Jupyter-kernels。
对于数据科学领域,一个典型的应用是安装多个版本的Python kernel,比如Python 2.7和Python 3.x。这样可以在多个环境验证Python应用。不过这在conda环境操作起来更为方便。
nbviewer与笔记共享 使用jupyter notebook记录的笔记文件.ipynb可以通过nbviewer来渲染从而得到带输出结果的完整笔记。jupyter的wiki上列举了很多共享的jupyter笔记,详细可参见https://github.com/jupyter/jupyter/wiki/A-gallery-of-interesting-Jupyter-Notebooks。

如果你自己生成了一个jupyter notebook的笔记,也可以到nbviewer的网站https://nbviewer.jupyter.org/去查看。只需要输入笔记文件的URL,nbviewer就会渲染输出图文并茂的完整笔记。

jupyter lab jupyter lab则是jupyter notebook的改进升级版,被称为下一代的jupyter notebook。它的集成化更高,使用起来更像一个IDE,其启动界面如下图所示。不过实际使用起来跟jupyter notebook差不多。因此学会jupyter notebook也很容易使用jupyter lab。
计算机技术|Python开发之jupyter notebook使用详解
文章图片


    推荐阅读