4个提高Jupiter Notebooks开发效率的工具

时间:2022-01-29 06:31:54

通常,notebook被认为是促进糟糕的编码实践,因为它们很难进行版本控制,经常依赖于以特定顺序运行的单元格来返回正确的结果,并且测试和调试可能很棘手。

4个提高Jupiter Notebooks开发效率的工具

但是,当涉及到探索性数据分析和初始机器学习模型开发等任务时,jupiter notebooks 仍然是大多数数据科学家的首选。根据代码可视化输出(如图表和表)以及向分析中添加丰富注释的能力是任何其他工具都无法复制的。

虽然notebook仍然是如此受欢迎的选择,但值得研究一些可用的选项,以克服可能使notebook代码不那么健壮的一些问题。在本文中,我将通过代码示例简要介绍为某些问题提供解决方案的4种工具。这些包括:

  1. Nbdime 更好的版本控制
  2. nbQA 运行lint
  3. Jupyter-nbrequirements 管理依赖
  4. nbval 进行验证

Nbdime更好的版本控制

 

使用Github之类的工具对notebook进行版本控制可能很困难。版本控制工具不能很好地呈现差异,因为它们不能理解典型notebook的逻辑结构。这可能会使跟踪更改和合并代码变得困难,

Nbdime是一个旨在解决这个问题的工具,它提供了更丰富的、可视化的差异,可以很容易地看到同一notebook的不同版本之间的变化。

Nbdime可以通过pip安装。

  1. pip install nbdime 

这应该会自动安装和启用扩展。如果没有正确安装,可以使用以下命令手动安装,添加一个标志来确定为——system(系统范围)、——user(当前用户)、——sys-prefix(当前虚拟环境)安装。

nbdime extensions --enable [--sys-prefix/--user/--system]

一旦一切都安装好,如果你打开一个jupiternotebook,你现在应该有以下新图标在你的工具栏。

4个提高Jupiter Notebooks开发效率的工具

我创建了一个notebook来展示nbdime的功能,它在波士顿房价数据集上训练一个简单的线性模型。

4个提高Jupiter Notebooks开发效率的工具

新的图标现在应该在notebook的工具栏上可用,形成nbdime的web视图功能。这个视图提供了对notebook所做的更改的丰富的可视化表示。

点击git按钮将显示上次提交和当前保存的notebook版本之间的差异。

单击看起来像钟面的图标将显示最新检查点和当前保存的版本之间的差异。

我将对notebook做一些改变,并使用web视图查看与上次提交的差异。

在notebook中,我改变了我正在使用的模型,并对残差图做了一个小的改变。让我们看一下nbdime提供的结果差异。

从下面的图片中可以看到,nbdime逐行和单元格显示了自上次提交以来所更改的内容。它甚至显示了每个单元格的输出是如何改变的,包括图形。

4个提高Jupiter Notebooks开发效率的工具

nbQA进行代码检查

 

Linting是一个检查代码质量的过程。linting工具会扫描代码并检查常见的样式错误。例如,Python lint通常检查不符合广泛使用的风格指南(如Pep8)的代码。

NbQa是一个可以让你在jupiternotebook上运行任何标准python linter的工具。下面的代码可以通过这个工具访问:pylint, black, auto flake, check-ast, doctest, flake8, mypy和yapf。

要安装,只需运行以下程序。

  1. pip install nbqa 

让我们在我最近创建的notebook上运行pylint,这是一个常用的python linter。为此,您需要在命令行上运行以下命令。

  1. $ nbqa pylint dataframe_basics.ipynb 

这给了我一个标准的pylint输出,它突出显示了代码中的错误。

4个提高Jupiter Notebooks开发效率的工具

使用jupyter-nbrequirements管理依赖项

 

您使用notebook完成的每个项目可能需要不同的依赖项集。传统上,这些是在jupiternotebook外部使用虚拟环境管理的。

Jupyter nbrerequirements是一个工具,它可以让你管理依赖关系,并创建一个独立的优化环境,所有这些都在notebook中管理。

要开始使用pip安装库并使用下面所示的命令启用notebook扩展名。

  1. $ pip install jupyter-nbrequirements  
  2. $ jupyter nbextension install --user --py jupyter_nbrequirements

您可以通过使用单元魔术命令或使用将在notebook顶部显示的UI来在notebook中安装库。

4个提高Jupiter Notebooks开发效率的工具

要使用单元格魔法安装像pandas这样的库,只需在notebook单元格中输入以下内容。

  1. %dep add pandas --version ">=0.24.0"

使用nbval进行验证

 

正如本文前面所描述的,notebook最常用于模型的探索性分析和初始开发。通常,存储这种类型的分析和最初的项目开发是非常有用的,既可以用于文档目的,也可以用于将来可能基于这项工作的发现进行构建。

py测试插件nbval是验证存储的notebook的有用工具。Nbval将自动运行notebook中的每个单元格,并检查当前输出是否与存储在上一个保存版本的.ipynb文件中的输出匹配。这作为对底层源代码中没有任何更改的检查,从而验证原始分析或实验的结果仍然是可靠的。

要使用此工具,首先通过以下命令进行pip安装。

  1. pip install nbval 

通过运行以下命令,可以对目录中包含的所有文件执行测试。

  1. py.test --nbval

或者在一个特定的notebook上运行这行代码。

我在现有的两本notebook上进行测试。第一个运行没有错误,并给出如下输出。

4个提高Jupiter Notebooks开发效率的工具

下面给出了一个notebook测试失败的例子。

4个提高Jupiter Notebooks开发效率的工具

虽然notebook经常用于探索性分析和初始模型开发,而不是生产代码,但仍然应该被视为一个重要的工作存储。最初的实验和分析是过去结果的有用记录,在以后的日子里应该可以回到notebook上建立你的工作。因此,值得探索的工具可以帮助使在notebook中编写的代码更加健壮和可复制。

本文介绍了四种工具,它们可以帮助使notebook中的代码更好、更可重用。有关可重复数据科学代码的更多提示,请参阅下面我之前的文章。