引言:这是《Python for Excel》的第二章《Chapter 2:Development Environment》中讲解Jupyter Notebooks的部分。工欲善其技,必先利其器。了解和熟练操作好的开发工具,在学习和使用Python时就会更加专注于其自身,并且也有助于Python开发。
在此特别说明,这里发布的文章仅仅为学习笔记,略去了书中一些我认为无关紧要的文字,或者稍作修改,并且有些地方加上了我自己学习感悟,有兴趣的朋友可以对照原书研读。此外,如有侵权,留言告知,我会删除。
Jupyter Notebooks
在上一节中,展示了如何从Anaconda提示符启动交互式Python会话。如果你想要一个简陋的环境来测试一些简单的东西,这非常有用。然而,对于大多数工作,你需要一个更易于使用的环境。例如,在Anaconda提示符下运行PythonREPL很难返回到前面的命令并显示图表。幸运的是,Anaconda提供的不仅仅是Python解释器:它还包括Jupyter笔记本,这是在数据科学环境下运行Python代码的最流行的方式之一。Jupyter笔记本允许你通过将可执行Python代码与格式化文本、图片和图表组合到一个在浏览器中运行的交互式笔记本中来讲述故事。它们对初学者很友好,因此对刚开始学习Python特别有用。同时,它们在教学、原型制作和研究方面也非常受欢迎,因为它们促进了可复制的研究。
Jupyter笔记本已经成为Excel的一个重要竞争对手,因为它们涵盖了与工作簿大致相同的用例:可以快速准备、分析和可视化数据。与Excel的不同之处在于,所有这些都是通过编写Python代码实现的,而不是在Excel中用鼠标点击。另一个优点是Jupyter笔记本不会混合数据和业务逻辑:Jupyter笔记本保存你的代码和图表,而通常使用外部CSV文件或数据库中的数据。与Excel相比,在笔记本中显示Python代码可以更容易地查看正在发生的事情,而Excel公式隐藏在单元格值后面。Jupyter笔记本也很容易在本地和远程服务器上运行。服务器通常比你的本地计算机具有更大的能力,并且可以在无人参与的情况下运行代码,这在Excel中是很难做到的。
在本节中,将向你展示如何运行和导航Jupyter笔记本的基本知识:我们将了解笔记本单元格,并了解编辑和命令模式之间的区别,如何正确关闭笔记本,了解单元格运行顺序的重要性。
运行Jupyter Notebooks
在Anaconda提示符下,更改到相对应的存储库的目录,然后启动Jupyter笔记本服务器:
(base)> cd D:完美Excel
(base)> jupyter notebook
这将自动打开浏览器并显示Jupyter仪表板,其中包含运行命令所在目录中的文件。在Jupyter仪表板的右上角,单击New,然后从下拉列表中选择Python3(参见图2-2)。
图2-2:Jupyter仪表板
这将为你的第一个空Jupyter笔记本打开一个新的浏览器选项卡,如图2-3所示。
图2-3:空的Jupyter笔记本
一个好习惯是点击Jupyter徽标旁边的Untitled1,将工作簿重命名为更有意义的内容,例如first_笔记本。图2-3的下半部分显示了一个笔记本单元格。
笔记本单元格
在图2-3中,可以看到一个带有闪烁光标的空单元格。如果光标不闪烁,用鼠标点击单元格,即在[]的右侧。现在重复上一节中的练习:键入3 4并通过单击顶部菜单栏中的运行按钮运行单元格,或者更简单地通过按Shift Enter运行单元格。这将运行在单元格中的代码,在单元格下方打印结果并跳转到下一个单元格。在本例中,它在下面插入一个空单元格,因为到目前为止我们只有一个单元格。更详细一点:当一个单元格在计算时,它显示在[*]中,当它完成时,星号变成一个数字,例如在[1]中。在单元格下方,相应的输出将标有相同的编号:Out[1]。每次运行单元格时,计数器都会增加1,这有助于查看单元格的执行顺序。接下来,我将以这种格式显示代码示例,例如,前面的REPL示例如下所示:
In [1]: 3 4
Out[1]: 7
当通过按Shift Enter来运行它时,将获得我在Out[1]下显示为输出的内容。在浏览器中输入时你会注意到,输入单元格使用不同的颜色对字符串、数字等进行格式设置,以便于阅读。这称为语法突出显示。
单元格输出
如果单元格中的最后一行返回值,则Jupyter笔记本会在Out[]下自动打印该值。但是,当你使用print函数或出现异常时,它将直接打印在In单元格的下方,而不带Out[]标签。本书中的代码示例的格式反映了这种行为。
单元格可以有不同的类型,我们感兴趣的有两种:
代码
这是默认类型。只要你想运行Python代码,就可以使用它。
Markdown
Markdown是一种使用标准文本字符进行格式化的语法,可用于在笔记本中包含格式良好的解释和说明。
要将单元格类型更改为Markdown,选择该单元格,然后在“单元格模式”下拉列表中选择Markdown(见图2-3)。在后面的表中会为你显示一个更改单元格模式的键盘快捷键。将空单元格更改为Markdown单元格后,键入以下文本,其中解释了一些Markdown规则:
# 这是第一级标题
## 这是第二级标题
你可以使你的文本为*斜体*或**加粗**或'等距'
* 这是一个项目符号点
* 这是另一个项目符号点
按下Shift Enter键后,文本将呈现为格式良好的HTML。此时,你的笔记本应该如图2-4所示。Markdown单元格还允许包含图像、视频或公式。
图2-4:运行一个代码单元格和一个Markdown单元格后的笔记本
编辑 VS. 命令模式
当你与Jupyter笔记本中的单元格交互时,你就处于编辑模式(editmode)或命令模式(commandmode):
编辑模式
单击单元格可启动编辑模式:选定的单元格周围的边框变为绿色,单元格中的光标闪烁。选择单元格时,也可以按Enter键,而不是单击单元格。
命令模式
要切换到命令模式,按退出键(ESC);选定的单元格周围的边框将为蓝色,并且不会有任何闪烁的光标。在命令模式下可以使用的最重要的键盘快捷键如下表所示。
表:键盘快捷键(命令模式)
了解这些键盘快捷键将使你能够高效地使用笔记本,而无需一直在键盘和鼠标之间切换。
注意运行顺序
jupyter笔记本虽然简单易用,但是如果不按顺序运行单元格,也很容易让你陷入混乱状态。假设有下列自上而下运行的笔记本单元格:
In [2]: a = 1
In [3]: a
Out[3]: 1
In [4]: a = 2
单元格Out[3]按预期那样打印值1。然而,如果你返回并再次运行In[3],你将在这种情况下结束:
In [2]: a = 1
In [5]: a
Out[5]: 2
In [4]: a = 2
Out[5]现在显示的是值2,这可能不是从顶部读取笔记本时所期望的值,尤其是[4]中的单元格距离较远而需要向下滚动时。为了防止出现这种情况,建议你不只是重新运行单个单元格,还要重新运行它以前的所有单元格。Jupyter笔记本提供了一种简单的方法,可以在“Cell>Runall above”菜单下完成此操作。
关闭Jupyter笔记本
每个笔记本都在一个独立的Jupyter kernel内核中运行。内核是一个“引擎”,它运行在笔记本单元格中键入的Python代码。每个内核都以CPU和RAM的形式使用来自操作系统的资源。因此,当你关闭笔记本时,还应关闭其内核,以便其他任务可以再次使用这些资源,这将防止你的系统变慢。实现这一点的最简单方法是通过“File>Closeand Halt”关闭笔记本。如果只关闭浏览器选项卡,内核将不会自动关闭。或者,在Jupyter仪表板上,你可以从Running选项卡关闭正在运行的笔记本。
要关闭整个Jupyter服务器,单击Jupyter仪表板右上角的退出(Quit)按钮。如果你已经关闭了浏览器,则可以在笔记本服务器正在运行的Anaconda提示符中键入Ctrl C两次,或者完全关闭Anaconda提示符。
现在,我们已经知道如何使用Jupyter笔记本,接下来我们将学习如何编写和运行标准Python脚本。为此,我们将使用VisualStudio Code,这是一个强大的文本编辑器,具有很好的Python支持。