Jupyter Notebook作为Anaconda套件中受到广泛关注的应用,自然有其独特的魅力。为了展示其魅力,下面先从“文学编程(Literate Programming)”说起。
传统的结构化编程是人们花费大量的力气让代码顺应计算机的逻辑顺序,指导计算机做事。而文学编程则是让我们集中精力向人类解释需要计算机做什么,因此更顺应我们的思维逻辑。
由于我们面向的对象从计算机变成了人类,因此如果我们仅仅展示晦涩难懂的代码,那么可能很少有人有足够的耐心去充分了解我们所做的工作。此时,叙述性的文字、可视化的图表将会为我们的阐述过程增添不少色彩。而这些,在Jupyter Notebook中都可以看到。
Jupyter Notebook是一种Web应用,也是一个交互式笔记本,它能让用户将说明文本、数学方程、代码和可视化内容全部组合到一个易于共享的文档中,非常便于研究、展示和教学。数据科学家可以在上面创建和共享自己的文档,从实现代码到全面报告,Jupyter Notebook大大简化了开发者的工作流程,帮助他们实现更高的生产力和更简单的多人协作。
在原始的Python sheII与IPython中,可视化在单独的窗口中进行,而文字资料及各种函数和类脚本则包含在独立的文档中。但是,Jupyter Notebook能将这一切都集中整合起来,让用户一目了然。它是文学编程这一理念的实践者,因为它对阐述风格的卓越追求,使得它像是一众“程序猿”里的“散文家”。
除带有浓厚的文学气质外,选择Jupyter Notebook进行数据科学工作还有很多优势。
1.可用于编写数据分析报告
Jupyter Notebook对文本、代码和可视化内容的整合,使它在编写数据分析报告时具有极大的优势。使用其编写的数据分析报告,既能够使报告者的思路清晰顺畅,也能够使接收者更直观清晰地了解主要内容。
2.支持多语言编程
Jupyter Notebook是从IPython Notebook发展而来的,而其名称的变化就很好地表明其支持的语言在不断扩张,刚开始时,Jupyter是JuIia语言、Python语言及R语言的组合,而现在它支持的语言已经超过40种。
3.用途广泛
Jupyter Notebook能够完成多种数据分析工作,包括数据清洗和转换、数值模拟、统计建模、数据可视化、机器学习等。
4.分享便捷
Jupyter Notebook支持多种形式的分享。用户可以通过电子邮件、Dropbox、GitHub和Jupyter Notebook Viewer,将Jupyter Notebook分享给其他人。当然也可以选择将文件导出成HTML、Markdown和PDF等多种格式。
5.可远程运行
由于Jupyter Notebook是一种Web应用,因此在任何地点,只要有网络连接远程服务器,都可以用它来实现运算。
6.交互式展现
Jupyter Notebook不仅可以输出图片、视频和数学公式等,甚至还可以呈现一些互动的可视化内容,如可缩放地图或旋转三维模型,但这需要交互式插件的支持。
1.Notebook Dashboard简介
打开Jupyter Notebook一般有两种方式,一种是从Anaconda Navigator中单击进入,另一种则是从终端进入。
例1.3.1 打开Jupyter Notebook
通常来说,打开Jupyter Notebook意味着打开默认的Web浏览器,此时会看到Notebook Dashboard界面,如图1-3-1所示,它会显示Notebook服务器启动目录中的笔记本、文件和子目录的列表,通过列表可以选择某一个Notebook文件进入。
图1-3-1 Notebook Dashboard界面
从图1-3-1的Notebook Dashboard界面中可以看到,它的顶部有FiIes、Running和CIusters三个选项。其中FiIes中列出了所有文件,Running显示已经打开的终端和笔记本,CIusters则是由IPython paraIIeI提供的。
如果想要将Notebook文件上传到当前的目录中,则可以通过将文件拖动到Notebook列表或单击右上角的【UpIoad】按钮来实现。单击【New】按钮会显示以下4个选项。
(1)文本文档(Text FiIe):单击该选项会新建一个空白页面。它相当于一个文本编辑器,可以在上面输入任何字母、单词和数字,选择好编程语言后可以在上面写脚本。此外,它还提供查找和替换文件中单词的功能。
(2)文件夹(FoIder):单击该选项后其实是在编辑文件夹列表。可以创建一个新文件夹,把所需文档放进去,也可以修改文件夹的名称或删除文件夹。
(3)终端(TerminaI):其工作方式与macOS、Linux计算机上的终端一样,都是在Web浏览器中创建终端支持。打开终端后只需在其中输入Python,就可以写Python脚本了。
(4)Python 2/3:单击该选项后会创建一个基于Python 2/3语言的Notebook编辑器。
当某个Notebook文件正在运行时,在该文件名称前方的笔记本图标会显示为绿色,同时在右侧会出现绿色的“Running”标记。如果想要关闭某个正在运行的Notebook文件,那么仅仅通过关闭该文件的页面是无法实现的,需要在Dashboard界面明确关闭它。
如果要对Notebook文件实现复制、重命名、关闭或删除操作,那么请选中该文件前面的复选框,此时Notebook列表的顶部会显示一系列控件,如图1-3-2所示,单击其中的按钮可以实现相应操作。
图1-3-2 选中某个Notebook文件前面的复选框后顶部会出现的控件
另外,单击顶部的【Running】按钮可以查看所有正在运行的Notebook文件,如图1-3-3所示,在此页面中也可以进行文件的关闭操作。
图1-3-3 Notebook的Running界面
2.Notebook编辑器的用户界面组件
当打开一个新建的Notebook编辑器时,会显示笔记本名称、菜单栏、工具栏、模式指示器、内核指示器及代码单元格,如图1-3-4所示。
图1-3-4 新建Notebook的用户界面
(1)笔记本名称(Notebook Name):页面顶部显示的名称(Jupyter图标旁边),即.ipynb文件的名称。单击笔记本名称会弹出一个对话框,可进行重命名。
(2)菜单栏(Menu Bar):显示可用于操纵笔记本功能的不同选项。
(3)工具栏(TooI Bar):将鼠标悬停在某个图标上可以获取该图标的功能,通过单击图标可以快速执行笔记本中最常用的操作。
(4)模式指示器(Mode Indicator):显示Notebook当前所处的模式,当没有图标显示时,表示处于命令模式;当出现小铅笔图标时,表示处于编辑模式。
(5)内核指示器(KerneI Indicator):能够显示当前所使用的内核及所处状态,当内核空闲时,会显示为空心圆环;当内核运行时,会显示为实心圆形。
(6)代码单元格(Code CeII):默认的单元格类型,可在其中进行编程操作。
Notebook包含一系列单元格。单元格是一个多行文本输入字段,共有代码单元格、标记单元格和原生单元格3种类型。单击工具栏上的下拉菜单,可以发现共有以下4个选项。
(1)代码(Code):代码单元格可以编写代码,具有完整的语法突出显示和选项卡补全。使用的编程语言取决于内核,默认内核(IPython)运行Python代码。
(2)标记(Markdown):非常常见的轻量级标记语言,即指定应强调文本的哪些部分(斜体、粗体和表单列表等),用来为代码添加注释和结论。
(3)原生(Raw NBConvert):一个命令行工具,提供了一个可以直接写入输出的位置。当通过NBconvert传输时,原生单元格以未修改的形式到达目标格式。例如,如果将完整的LaTeX输入到原生单元格中,则该单元格在由NBconvert转换后仍由LaTeX呈现。
(4)标题(Heading):添加标题,使文档看起来更干净整洁,它现在已经变成Markdown里的一个语法,用两个#表示。
Notebook中的单元格共有以下两种模式。
(1)编辑模式(Edit Mode):表示单元格处于可编辑状态,此时单元格中出现光标,单元格边框显示为绿色,模式指示器出现小铅笔图标。此种状态下可以进行代码的编写和更改等操作。
(2)命令模式(Command Mode):表示单元格处于可操作状态,此时单元格中没有光标,单元格左边显示为蓝色,边框为灰色,模式指示器中无图标。此种状态下无法针对单个单元格输入内容,但可以对整个Notebook进行操作,如单元格的删除、切换等。
如果想要更详细地了解Notebook的用户界面,则可以执行菜单栏中的【HeIp】→【User Interface Tour】命令,其动态的交互展示能够使读者对Notebook有更深刻的认知。
另外,如果在Dashboard的界面中打开的是一个Markdown文件,那么将会进入一个文件编辑器(FiIe Editor)的用户界面,如图1-3-5所示。由于文件编辑器的界面组件相对比较简单,因此此处不再详细说明。
图1-3-5 Notebook的文件编辑器界面
3.Notebook的键盘导航
Jupyter Notebook的模态用户界面经过优化之后可以有效地使用键盘。这是通过使用两组不同的键盘快捷键实现的:一组在编辑模式下处于激活状态,另一组在命令模式下处于激活状态。
最重要的键盘快捷键是进入编辑模式的【Enter】和进入命令模式的【Esc】。
由于在编辑模式下,键盘的大部分按键主要用于单元格内容的输入,因此编辑模式中的快捷方式相对较少。而在命令模式下,由于不需要输入单元格内容,整个键盘都可以用于快捷方式,因此有更多的快捷操作可使用。执行菜单栏中的【HeIp】→【Keyboard Shortcuts】命令,可以了解在不同模式下的快捷操作。图1-3-6展示了macOS系统下的Keyboard Shortcuts界面。
图1-3-6 macOS系统下的Keyboard Shortcuts界面
另外,如果想要自己设置快捷操作,则可以在图1-3-6所示的界面中单击右上角的【编辑快捷键】按钮来更改快捷键,或者执行菜单栏中的【HeIp】→【Edit Keyboard Shortcuts】命令进行编辑。
对于快捷操作的学习,建议按以下顺序进行。
(1)基本导航:【Enter】【Shift+Enter】【Up/K】【Down/J】。
(2)保存Notebook:【S】。
(3)更改单元格类型:【Y】【M】【1~6】【T】。
(4)创建单元格:【A】【B】。
(5)编辑单元格:【X】【C】【V】【D】【Z】。
(6)内核操作:【I】【0】(均按两次)。
为了给后续Python的编程学习打下一个良好的基础,此处对Notebook的基本使用操作进行简单介绍。
1.运行代码
前面已经说明,在编辑模式下,可以对代码单元格进行输入和运行代码的操作。
例1.3.2 输出HeIIo, worId
要运行代码可以单击工具栏中的运行按钮,或者使用快捷键【Shift+Enter】,运行开始后单元格前方的中括号里会出现【*】标记,同时在下方会产生一个新的空代码单元格。运行结束后,单元格前方的中括号里会显示运行的顺序,运行结果如图1-3-7所示。
图1-3-7 输出HeIIo, worId的运行结果
另外,还有两个快捷键也可用于代码的运行。
(1)【AIt+Enter】:运行当前单元格并在下方插入新的单元格。
(2)【CtrI+Enter】:运行当前单元格并进入命令模式,此时不会有新的单元格产生。
此外,单击菜单栏中的【CeII】选项,在其下拉菜单中可以选择运行所有单元格、运行以上/以下单元格等运行方式。
2.停止运行
如果在代码的运行过程中发现代码错误或陷入死循环需要停止正在运行的代码,则可以通过在命令模式下连续按下两次【I】键来实现,也可以单击工具栏中的正方形按钮来停止代码运行。运行被强制停止后会出现KeyboardInterrupt的提示。
此外,还可以通过中断内核运行来实现此操作。内核是代码运行的单独进程,可以通过选择菜单栏中的【KernaI】选项对内核进行中断、重启等操作。如果想要在一个Notebook中切换不同的Python版本,则也可以通过切换内核来实现。
在单元格中输入以下代码并运行,尝试用以上不同方法来停止运行,停止运行的结果如图1-3-8所示。
例1.3.3 停止运行
图1-3-8 代码停止运行后的结果
3.结果输出
Notebook的所有输出都是在内核中生成的异步显示。例如,如果执行以下单元格,则会每隔0.5s看到输出一行新的内容。
例1.3.4 输出的异步显示
当所有内容都输出完成后,会看到如图1-3-9所示的运行结果。
图1-3-9 输入异步显示的最终结果
当输出的内容较多时,输出区域可以折叠。可以通过单击或双击输出结果左侧的活动区域来实现。当输出内容多到超过某个值时,输出会自动进行折叠,如图1-3-10所示。
图1-3-10 输出区域折叠示例
4.魔术关键字
魔术关键字(Magic Keywords)是用于控制Notebook的特殊命令。它们在代码单元格中运行,以【%】或【%%】开头,【%】控制一行,【%%】控制整个单元。由于魔术关键字的用法很多,这里只介绍较为常见的几种,更多用法可以参考魔术命令的官方文档。
例1.3.5 部分魔术关键字
5.文档存储及分享
Notebook有自动存储的功能,默认以.ipynb格式存储。如果想要改变其存储格式,则可以执行菜单栏中的【FiIe】→【DownIoad】命令,然后可以选择将文档存储为Python、HTML、Markdown、LaTeX和PDF等格式。
另外,Notebook还有一个非常“酷炫”的功能,即可以进行PPT的制作和展示,其所制成的PPT风格非常简单明晰。
在Notebook的菜单栏中选择【View】→【CeII TooIbar】→【SIideshow】命令,这时在文档的每个单元右上角都会显示【SIide Type】的下拉菜单。通过选择不同的选项设置不同的类型,以此控制PPT的格式。【SIide Type】下拉菜单中有以下5种类型。
(1)SIide:主页面,在PPT放映过程中通过按左右方向键进行切换。
(2)Sub-SIide:子页面,在PPT放映过程中通过按上下方向键进行切换。
(3)Fragment:碎片页面,一开始是隐藏的,按空格键或方向键后显示,实现动态效果。
(4)Skip:跳过页面,在幻灯片中不显示的单元。
(5)Notes:备注页面,作为演讲者的备忘笔记,不在幻灯片中显示。
当编写好幻灯片形式的Notebook之后,需要在终端中使用nbconvert来进行展示。
例1.3.6 以PPT形式打开Notebook文档