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

时间:2015-03-30 18:57:53

标签: matplotlib ipython ipython-notebook jupyter

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

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

  • 将单元格复制并粘贴到第二个笔记本中。分析代码现在重复,更难更新。
  • 将分析代码移动到一个模块中并为两个文件运行。这将失去当前生成的数字的逐个单元格格式,并且只是将它们混合在一起细胞
  • 将两个文件加载到一个笔记本中并并排运行分析。这也涉及大量的复制和粘贴,并且不能很好地概括为3或4个不同的数据文件。

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

根据IPython Demo Mode example

,您可以将演示指令绑定到独立模块中

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

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

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

'见证'整个交互式演示文稿,对一个参数集执行分析,然后将一些全局变量/切换到新笔记本/在同一笔记本中运行更多单元格,以便见证'关于不同参数集的相同演示听起来对我来说是无用的,在某种意义上我无法想象这样一种情况:消费演示文稿的模式并不比使用首先计算所有感兴趣的参数集的目标摘要演示文稿更糟糕并将重要结果汇总成比较。

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