在对两组不同的数据进行相同的分析时,是否有一种很好的方法可以模块化和重用IPython Notebook(Jupyter)中的代码?
例如,我有一个笔记本,其中有很多单元格正在对数据文件进行分析。我有另一个相同格式的数据文件,我想运行相同的分析并比较输出。这些选项都没有特别吸引人:
有更好的方法吗?
答案 0 :(得分:2)
然后,当在笔记本中实际执行它时,每次要进入下一个重要部分时,都会调用演示对象包装器。因此,您的单元格主要包含对该演示包装器对象的调用。
选项2显然是代码重用的最佳选择,它可以说是所有软件工程中的事实标准。
我认为笔记本概念本身并不能很好地扩展到3,4,5 ......不同的数据文件。笔记本演示文稿不是批处理插座。如果您发现自己需要跨不同数据集进行参数扫描,并希望在为每个参数组加载的不同数据之上重新运行分析(即使参数'可能就像不同的数据集一样简单文件名)它引起了一个糟糕的代码味道。这可能意味着分析水平是在“互动”中进行的。方式是错的。见证分析'交互式'同时执行批处理是两个非常不兼容的目标。更好的想法是分别批处理所有参数集,'离线'从任何演示的角度出发,然后构建一组独立的函数,这些函数可以从计算和存储的批处理结果中生成可视结果。然后笔记本将只是一系列函数调用,每个函数调用都会立即在所有参数集中生成汇总数据(其中一些可以是批处理期间选择的参数集的示例),以便进行必要的比较并有意义地进行并排显示结果数据。
'见证'整个交互式演示文稿,对一个参数集执行分析,然后将一些全局变量/切换到新笔记本/在同一笔记本中运行更多单元格,以便见证'关于不同参数集的相同演示听起来对我来说是无用的,在某种意义上我无法想象这样一种情况:消费演示文稿的模式并不比使用首先计算所有感兴趣的参数集的目标摘要演示文稿更糟糕并将重要结果汇总成比较。
也许我能想到的唯一一个案例就是玩具教学演示,比如一些玩具频率数据和一系列做一些简单的傅立叶分析的笔记本。但这恰好是分析函数成为辅助模块的情况,而笔记本本身只是让你有选择地声明你想要在哪个玩具输入文件上运行笔记本。