在两个不同的数据文件上运行相同的 IPython 笔记本代码,并进行比较

And*_*Mao 5 matplotlib ipython jupyter jupyter-notebook

当对两组不同的数据进行相同的分析时,有没有一种好的方法可以在 IPython Notebook (Jupyter) 中模块化和重用代码?

例如,我有一个笔记本,其中有很多单元格对数据文件进行分析。我有另一个相同格式的数据文件,我想运行相同的分析并比较输出。这些选项看起来都没有特别有吸引力:

  • 将单元格复制并粘贴到第二个笔记本。分析代码现在是重复的并且更难更新。
  • 将分析代码移至模块中并为两个文件运行它。这将丢失当前生成的数字的逐个单元格格式,并将它们简单地混杂在一个巨大的单元格中。
  • 将这两个文件加载到一个笔记本中并并行运行分析。这还涉及大量复制和粘贴,并且不能很好地推广到 3 或 4 个不同的数据文件。

有一个更好的方法吗?

ely*_*ely 3

您可以将演示指令添加到独立模块中,按照IPython 演示模式示例

然后,当在笔记本中实际执行它时,每次想要进入下一个重要部分时,您都会调用演示对象包装器。因此,您的单元将主要由对该演示包装对象的调用组成。

选项 2 显然是代码重用的最佳选择,它可以说是所有软件工程中事实上的标准。

我认为笔记本概念本身并不能很好地扩展到 3、4、5……不同的数据文件。笔记本演示文稿并不是批处理容器。如果您发现自己需要跨不同的数据集进行参数扫描,并且希望在为每个参数组加载的不同数据之上重新运行分析(即使“参数”可能像不同的文件名一样简单),它会引发不好的代码味道。这可能意味着以“交互式”方式执行的分析水平是错误的。“交互式”见证分析并同时执行批处理是两个几乎不兼容的目标。更好的想法是单独批处理所有参数集,从任何演示的角度来看都是“离线”的,然后构建一组独立的函数,这些函数可以根据计算和存储的批处理结果生成可视化结果。然后,笔记本将只是一系列函数调用,每个函数调用都会立即生成所有参数集的摘要数据(其中一些可能是批处理期间选择的参数集的示例),以进行必要的比较并有意义并排显示结果数据。

“见证”对一个参数集执行分析的整个交互式演示,然后更改某些全局变量/切换到新笔记本/在同一笔记本中运行更多单元,以便“见证”在不同参数集上的相同演示听起来很边缘对我来说毫无用处,因为我无法想象这种使用演示文稿的模式并不比使用首先计算所有感兴趣的参数集的结果并将重要结果组合成比较的有针对性的摘要演示文稿更差的情况。

也许我能想到的唯一案例是玩具教学演示,例如一些玩具频率数据和一系列进行一些简单傅立叶分析之类的笔记本。但这正是需要将分析函数制作成辅助模块的情况,而笔记本本身只是让您有选择地声明要在哪个玩具输入文件上运行笔记本。