添加12,804字节
、 2020年10月15日 (四) 15:47
== Jupyter Notebooks是什么 ==
[http://jupyter.org/ Jupyter] Notebook是一个Web应用程序,允许你把所有的说明性文字,数学公式,代码和可视化内容结合在一个可轻松共享的文档里。例如,这是我最近特别喜欢共享的Notebook之一,激光干涉[https://www.ligo.caltech.edu/news/ligo20160211 引力波观测站](LIGO)对从[https://losc.ligo.org/s/events/GW150914/GW150914_tutorial.html 两个碰撞黑洞发出引力波的检波实验的分析]。你可以下载数据,在Notebook上运行代码和重复分析,实际上你可以自己检测引力波。
在使用数据时,Notebooks很快成为了必不可少的工具,你会发现它们被用于[http://nbviewer.jupyter.org/github/jmsteinw/Notebooks/blob/master/IndeedJobs.ipynb 数据清理和探索],可视化,[http://nbviewer.jupyter.org/github/masinoa/machine_learning/blob/master/04_Neural_Networks.ipynb 机器学习]和[http://nbviewer.jupyter.org/github/tdhopper/rta-pyspark-presentation/blob/master/slides.ipynb 大数据分析]。这是一个我为自己的个人博客制作的[https://github.com/mcleonard/blog_posts/blob/master/body_fat_percentage.ipynb Notebook],展示了Notebook的许多特性。通常你会在一个终端做这项工作,无论是普通的Python shell还是IPython,您的可视化将在单独的窗口,任何文档以及各种脚本的功能和类将在单独的文档。但是用Notebook,所有的这些都在一个地方,很容易一起阅读。
Notebooks也在Github上自动呈现。这是一个伟大的功能,让你轻松的分享你的工作。也有[http://nbviewer.jupyter.org/ http://nbviewer.jupyter.org] 能够很好地展现你存在Github repo或别处的Notebook文档。
=== 文艺编程(Literate programming) ===
Notebook是唐纳德·克努特(高德纳)在1984年提出的一种[http://www.literateprogramming.com/ 文艺编程]形式。有了文艺编程,我们就可以将文档编辑为一种叙述性的文字伴随着代码的形式,而不是单纯的代码。用唐纳德·克努特的话来说,与其说我们的主要任务是为了指导电脑做什么,还不如将我们的精力集中在给人类解释我们正在让电脑做什么。
毕竟,代码是为人类编写的,而不是电脑。Notebook就很好地提供了这种功能。你能够将编写文档作为叙事文本,以及代码。这不仅对人们阅读你的Notebook有帮助,而且对未来的你想回头做一些分析也很有用。还有:最近,这个文艺编程的想法已经扩展到一种整体编程语言:[http://www.witheve.com/ Eve]。
=== Notebook如何工作 ===
Jupyter notebooks 是由Fernando Perez开发,在IPython基础上形成的项目。[https://ipython.org/ IPython]是一个python交互环境,类似于Python自带的交互环境,却具有极棒的例如语法高亮和代码自动完成等特性。起初,notebook通过从Web应用程序发送消息(在浏览器中查看notebook)到IPython内核(在后台运行的IPython应用)。内核执行代码,然后把它送回notebook。当前的体系结构是类似的,如下所示。
[[File:未标题-1.png|400px]]
关键点在于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服务器 ==
当您运行那个命令(自己尝试!),服务器主页将在您的浏览器中打开。
[[File:notebook-server.png|600px]]
默认情况下,notebook服务器运行在http://localhost:8888端口。
如果您对此不熟悉,localhost意味着您的计算机,8888是服务器正在通信的端口。
只要服务器仍在运行,您随时可以返回,只要你在浏览器中访问http://localhost:8888即可。
如果您需要启动另外一个服务器,它会先尝试使用端口8888。由于端口已经被占用,新的服务器将在端口8889上运行。然后,您会连接到http://localhost:8889。每新增一个notebook服务器都会使得这个端口号递增1:
您可在此处的列表中看到一些文件和文件夹,这取决于您从哪里启动服务器。在右侧,您可以单击“新建”创建新的notebook、文本文件、文件夹或终端。
“Notebooks”下的列表显示您已安装的内核。
[[File:conda-environments.png|200px]]
这里我在Python 3环境中运行服务器,所以我有一个Python 3内核可用。 您可在这里看到Python 2。
我还为列表中的Scala 2.10和2.11安装了内核。 如果从conda环境运行Jupyter notebook服务器,您还可以从其他任何环境中选择内核(见下文)。 要创建新的notebook,请单击要使用的内核。
顶部导航有文件,执行和集群的选项。点击文件将显示当前目录下的所有的文件夹及文件。
点击running将列出所有正在执行的脚本并可以进行管理操作。
群组原本的作用是显示已创建的用于并行计算的多CPU核,现在由于已被ipyoaraller代所以并没有什么用处。
如果你从conda环境运行脚本服务器,将可以看到一个“Conda”按钮。用此按钮你可以从Jupyter里面管理环境。你可以创建新环境,安装包,升级包和导出环境等。
[[File:conda-tab.png|600px]]
== 关闭Jupyter ==
要关闭单个脚本,你可以在服务器主页处勾选对应脚本然后点击关闭。
请在关闭前确保已经保存!因为关闭后,你的所有修改都将会丢失。下一次你执行脚本时仍然需要重新运行代码。
[[File:notebook-shutdown.png|600px]]
你也可以在终端按两次“control + C”来关闭整个服务器,再次强调在作出关闭动作前请保证做好保存,因为该动作会立即关闭所有的在运行的脚本。
[[File:server-shutdown.png|500px]]
== Notebook 操作界面 ==
用 notebook新建一个笔记,你将会看见下面的界面:
[[File:操作界面notebook.jpg|600px]]
notebook以cell格子的形式存储和展示各种信息,包括代码。分为一下几种:
代码格:你在这里编辑和运行的你的代码。
Markdown文本格:以 Markdown 规则显示的文本内容。可以方便的编辑标题和字体格式、插入图片等等。
其他操作:
在文件最顶端你可以看见文档的标题,默认值是“Untitled”。点击标题可以进行重命名。
[[File:QQ截图20170226203001.png|15px]]重启内核,之前的变量将会丢失。
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文本格使用 [https://www.latex-project.org/ LaTeX] 符号创建数学表达式。Notebooks 使用 MathJax 把 LaTeX 符号渲染成数学表达式。
在一行内可以使用符号$包含表达式,例如
$y = mx + b$
多行的数学表达可以用2个符号$包含多个表达式,例如:
$$
y = \frac{a}{b+c}
$$
=== 示例 ===
[https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet 该链接是一个包含Markdown所有格式的示例。]
== Magic keywords 快捷命令 ==
快捷命令是在格子中运行的控制notebook本身或系统的特定代码。例如你可以使用 '''%matplotlib''' 这个命令,在单元格内嵌入matplotlib显示结果.
=== Timing code 时间代码 ===
你可以使用 '''timeit''' 这个命令显示一个函数的运行时间。如下图:
[[File:5107d13d-ebbb-4cce-bd.png|600px]]
你可以使用 '''%%timeit''' 这个命令显示整个代码格的运行时间。如下图:
[[File:222.png|600px]]
=== Embedding visualizations in notebooks 可视化嵌入 ===
在
%config InlineBackend.figure_format = 'retina'
代码之后写入
%matplotlib inline to render higher resolution images.
可以在格子中显示:
[[File:333.png|600px]]
=== debug ===
你可以使用 '''%pdb''' 命令交互的调用debugger。
[[File:Debugging in a notebook.png|600px]]
=== 有用的快捷键===
* 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 文件。
[[File:11111.png|600px]]
如果对嵌入式的显示方法不满,可以利用nbconvert工具将 .ipynb 文件转换成 html 或 Markdown 格式,再放入网页中。
例如你可以把 notebook 转换成 HTML 文件,使用下面的命令:
jupyter nbconvert --to html notebook.ipynb
[[File:2322.png|600px]]
== 创建幻灯片 ==
在菜单栏,点击 View > Cell Toolbar > Slideshow ,给格子增加'''幻灯片'''类型。
[[File:33233.png|600px]]
之后,你就可以在格子类型里选择'''幻灯片'''类型了。
[[File:344433.png|600px]]
=== 运行幻灯片 ===
要在notebook创建幻灯片文件,你需要使用 nbconvert:
jupyter nbconvert notebook.ipynb --to slides
希望转换后立刻看见结果,使用:
jupyter nbconvert notebook.ipynb --to slides --post serve
[[category:旧词条迁移]]