Jupyter Notebook编程环境

来自集智百科
2018年5月15日 (二) 13:53Jake讨论 | 贡献的版本

(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到: 导航搜索

目录

Jupyter Notebooks是什么

Jupyter Notebook是一个Web应用程序,允许你把所有的说明性文字,数学公式,代码和可视化内容结合在一个可轻松共享的文档里。例如,这是我最近特别喜欢共享的Notebook之一,激光干涉引力波观测站(LIGO)对从两个碰撞黑洞发出引力波的检波实验的分析。你可以下载数据,在Notebook上运行代码和重复分析,实际上你可以自己检测引力波。

在使用数据时,Notebooks很快成为了必不可少的工具,你会发现它们被用于数据清理和探索,可视化,机器学习大数据分析。这是一个我为自己的个人博客制作的Notebook,展示了Notebook的许多特性。通常你会在一个终端做这项工作,无论是普通的Python shell还是IPython,您的可视化将在单独的窗口,任何文档以及各种脚本的功能和类将在单独的文档。但是用Notebook,所有的这些都在一个地方,很容易一起阅读。

Notebooks也在Github上自动呈现。这是一个伟大的功能,让你轻松的分享你的工作。也有http://nbviewer.jupyter.org 能够很好地展现你存在Github repo或别处的Notebook文档。

文艺编程(Literate programming)

Notebook是唐纳德·克努特(高德纳)在1984年提出的一种文艺编程形式。有了文艺编程,我们就可以将文档编辑为一种叙述性的文字伴随着代码的形式,而不是单纯的代码。用唐纳德·克努特的话来说,与其说我们的主要任务是为了指导电脑做什么,还不如将我们的精力集中在给人类解释我们正在让电脑做什么。

毕竟,代码是为人类编写的,而不是电脑。Notebook就很好地提供了这种功能。你能够将编写文档作为叙事文本,以及代码。这不仅对人们阅读你的Notebook有帮助,而且对未来的你想回头做一些分析也很有用。还有:最近,这个文艺编程的想法已经扩展到一种整体编程语言:Eve

Notebook如何工作

Jupyter notebooks 是由Fernando Perez开发,在IPython基础上形成的项目。IPython是一个python交互环境,类似于Python自带的交互环境,却具有极棒的例如语法高亮和代码自动完成等特性。起初,notebook通过从Web应用程序发送消息(在浏览器中查看notebook)到IPython内核(在后台运行的IPython应用)。内核执行代码,然后把它送回notebook。当前的体系结构是类似的,如下所示。

未标题-1.png

关键点在于notebook的服务器。你通过你的浏览器以及notebook链接到服务器使其作为一个web应用程序来呈现。你在web应用程序中编写的代码通过服务器发送到内核。内核运行代码并将其发送回服务器,然后任何输出都会呈现的浏览器上。当你保存notebook的时候,它将会以JSON文件以及.ipynb的文件扩展名来写入服务器。

这个架构的优点在于内核不需要运行Python。由于notebook和内核是分开的,任何形式的代码都可以在它们之间传送。例如,两个早期版本的非Python的内核就是为R和Julia语言设计的。在R内核中,用R语言编写的代码将会被送到R内核执行,等同于Python代码在Python内核里运行。因为notebooks的含义并不是很清楚,所以人们将早期的Ipython notebooks重新命名了。新名称Jupyter来自于与Julia,Python和R的结合。如果你感兴趣,这里有一个可用内核的表。

另一个好处是服务器可以通过互联网在任何地方运行和访问。通常,你将会在储存了所有数据和notebook文件的自己的机器上来运行服务器。但是,你也可以设置一个远程机器或者一个像Amazon’s EC2的云实例。然后,你可以在世界任何地方访问你浏览器中的notebooks。

安装Jupyter Notebook

目前安装Jupyter最简便的方式是使用Anaconda,其自带了Jupyter notebooks工具包,用户可以在默认环境下使用notebooks。 要在conda环境中安装Jupyter notebooks,请使用conda install jupyter notebook。同样可以通过pip命令完成Jupyter notebooks的安装:pip install jupyter notebook。 要启动notebook服务器,请在终端或控制台中输入jupyter notebook,随后将在您运行命令的目录中启动服务器,这意味着任何notebook文件都会储存在这个目录下。通常情况下,您希望在notebooks的目录下启动服务器。您可以通过文件系统浏览到notebook所在的位置。

启动notebook服务器

当您运行那个命令(自己尝试!),服务器主页将在您的浏览器中打开。

Notebook-server.png


默认情况下,notebook服务器运行在http://localhost:8888端口。

如果您对此不熟悉,localhost意味着您的计算机,8888是服务器正在通信的端口。

只要服务器仍在运行,您随时可以返回,只要你在浏览器中访问http://localhost:8888即可。

如果您需要启动另外一个服务器,它会先尝试使用端口8888。由于端口已经被占用,新的服务器将在端口8889上运行。然后,您会连接到http://localhost:8889。每新增一个notebook服务器都会使得这个端口号递增1:

您可在此处的列表中看到一些文件和文件夹,这取决于您从哪里启动服务器。在右侧,您可以单击“新建”创建新的notebook、文本文件、文件夹或终端。

“Notebooks”下的列表显示您已安装的内核。

Conda-environments.png

这里我在Python 3环境中运行服务器,所以我有一个Python 3内核可用。 您可在这里看到Python 2。

我还为列表中的Scala 2.10和2.11安装了内核。 如果从conda环境运行Jupyter notebook服务器,您还可以从其他任何环境中选择内核(见下文)。 要创建新的notebook,请单击要使用的内核。

顶部导航有文件,执行和集群的选项。点击文件将显示当前目录下的所有的文件夹及文件。

点击running将列出所有正在执行的脚本并可以进行管理操作。

群组原本的作用是显示已创建的用于并行计算的多CPU核,现在由于已被ipyoaraller代所以并没有什么用处。

如果你从conda环境运行脚本服务器,将可以看到一个“Conda”按钮。用此按钮你可以从Jupyter里面管理环境。你可以创建新环境,安装包,升级包和导出环境等。

Conda-tab.png

关闭Jupyter

要关闭单个脚本,你可以在服务器主页处勾选对应脚本然后点击关闭。 请在关闭前确保已经保存!因为关闭后,你的所有修改都将会丢失。下一次你执行脚本时仍然需要重新运行代码。

Notebook-shutdown.png

你也可以在终端按两次“control + C”来关闭整个服务器,再次强调在作出关闭动作前请保证做好保存,因为该动作会立即关闭所有的在运行的脚本。

Server-shutdown.png

Notebook 操作界面

用 notebook新建一个笔记,你将会看见下面的界面:

操作界面notebook.jpg

notebook以cell格子的形式存储和展示各种信息,包括代码。分为一下几种: 代码格:你在这里编辑和运行的你的代码。 Markdown文本格:以 Markdown 规则显示的文本内容。可以方便的编辑标题和字体格式、插入图片等等。

其他操作: 在文件最顶端你可以看见文档的标题,默认值是“Untitled”。点击标题可以进行重命名。

QQ截图20170226203001.png重启内核,之前的变量将会丢失。

notebooks每间隔一段时间会自动保存当前编辑的内容。你也可以手动保存文档。

在"File" 菜单, 你可以下载你编辑的文档。你可以下载HTML/py/pdf等不同的格式。

code代码格

你在notebooks里的工作大部分将会通过代码格来实现。这里是写代码和执行代码的地方。 在代码格,你可以写入任何代码:定义变量,定义函数和类,或者载入其他代码包等等。 任何一个代码格中的代码,都可以引用到其他格子中的代码。

MarkDown文本格

就像代码格一样,你按下 Shift + 回车 或者 Control + Enter 就可以运行Markdown文本格,他们会以Mardown语法渲染文本。

Markdown语法主要分为以下几种:

Headers头部

每一行的开始用#表示标题的层级。一个#是1级标题,两个#是2级标题,以此类推。

 # Header 1
 ## Header 2
 ### Header 3

Links 超链接

超链接适用如下格式: [Udacity's home page](https://www.udacity.com) 中括号内是超链接显示文字,小括号内输入超链接地址即可。

Emphasis重点

加粗的文本可以用2个星号(*)或下划线(_)把文本夹在中间。 例如 **aardvark** 或者 __aardvark__ 将会显示成 aardvark

Code代码

有两种方式用于显示代码。 用 符号 ` 包含文本,例如`string.punctuation` 如果是多行代码,则用3个符号`来包含文本。例如:

   ```
   import requests
   response = requests.get('https://www.udacity.com')
   ```

另一种方式是在代码前面加入4个空格,使代码产生缩进。


Math expressions 数学表达式

你可以在 Markdown文本格使用 LaTeX 符号创建数学表达式。Notebooks 使用 MathJax 把 LaTeX 符号渲染成数学表达式。 在一行内可以使用符号$包含表达式,例如

 $y = mx + b$  

多行的数学表达可以用2个符号$包含多个表达式,例如:

 $$
 y = \frac{a}{b+c}
 $$


示例

该链接是一个包含Markdown所有格式的示例。



Magic keywords 快捷命令

快捷命令是在格子中运行的控制notebook本身或系统的特定代码。例如你可以使用 %matplotlib 这个命令,在单元格内嵌入matplotlib显示结果.


Timing code 时间代码

你可以使用 timeit 这个命令显示一个函数的运行时间。如下图:

5107d13d-ebbb-4cce-bd.png

你可以使用 %%timeit 这个命令显示整个代码格的运行时间。如下图:

222.png

Embedding visualizations in notebooks 可视化嵌入

  %config InlineBackend.figure_format = 'retina' 

代码之后写入

  %matplotlib inline to render higher resolution images.

可以在格子中显示:

333.png


debug

你可以使用 %pdb 命令交互的调用debugger。

Debugging in a notebook.png

有用的快捷键

  • Esc + F 在代码中查找、替换,忽略输出。
  • Esc + O 在cell和输出结果间切换。
  • 选择多个cell:
Shift + J 或 Shift + Down 选择下一个cell。
Shift + K 或 Shift + Up 选择上一个cell。
一旦选定cell,可以批量删除/拷贝/剪切/粘贴/运行。当你需要移动notebook的一部分时这个很有用。
  • Shift + M 合并cell.

Converting notebooks

Notebooks 是一个庞大的扩展名为 .ipynb的 JSON 文件。

11111.png

如果对嵌入式的显示方法不满,可以利用nbconvert工具将 .ipynb 文件转换成 html 或 Markdown 格式,再放入网页中。

例如你可以把 notebook 转换成 HTML 文件,使用下面的命令:

 jupyter nbconvert --to html notebook.ipynb

2322.png

创建幻灯片

在菜单栏,点击 View > Cell Toolbar > Slideshow ,给格子增加幻灯片类型。

33233.png

之后,你就可以在格子类型里选择幻灯片类型了。

344433.png

运行幻灯片

要在notebook创建幻灯片文件,你需要使用 nbconvert:

 jupyter nbconvert notebook.ipynb --to slides

希望转换后立刻看见结果,使用:

 jupyter nbconvert notebook.ipynb --to slides --post serve
个人工具
名字空间
操作
导航
工具箱