面向对象的科学数据处理,如何巧妙地将数据、分析和可视化融入对象中?

8
作为生物学本科生,我经常编写Python软件进行数据分析。一般的结构是:
首先需要加载一些数据,对其进行分析(如统计、聚类等),然后可视化结果。
有时,同一个实验的数据可能以不同的格式出现,可以使用不同的分析方法,并且有多种可视化方式,这些可能与所执行的分析有关或者不相关。
我很难找到一种通用的“Pythonic”面向对象方式来使它清晰易懂并具有可扩展性。应该很容易添加新的操作类型或对现有操作进行轻微变化,因此我相信应该采用面向对象编程。
我已经创建了一个数据(Data)对象,其中包含加载试验数据的方法。如果有多个数据来源,我打算创建继承类来覆盖加载函数。
之后……我不确定接下来该怎么做。我应该创建一个Analysis抽象类,每种分析类型都有一个子类(并使用它们的属性来存储结果),并针对Visualization做同样的事情,使用一个通用的Experiment对象来保存数据实例以及多个AnalysisVisualization实例吗?还是可视化应该是一个函数,它将Analysis和/或Data对象作为参数来构造图表?还有更有效的方法吗?我有什么遗漏的吗?
2个回答

5
您的总体想法是可行的,以下是更多细节,希望能帮助您继续:
- 创建一个抽象的 Data 类,具有一些通用方法,如 load、save、print 等。 - 为您感兴趣的每种特定形式的数据创建具体的子类。这可能是任务特定的(例如自然语言处理的数据)或形式特定的(以矩阵形式给出的数据,其中每行对应不同的观测值)。 - 正如您所说,创建一个抽象的 Analysis 类。 - 为每种分析形式创建具体的子类。每个具体的子类都应覆盖一个 process 方法,该方法接受特定形式的 Data 并返回一个带有结果的新 Data 实例(如果您认为结果的形式与输入数据不同,则使用不同的 Result 类)。 - 创建一个可视化类层次结构。每个具体的子类都应覆盖一个可视化方法,该方法接受特定的 Data 实例(或 Result,如果您使用不同的类),并返回某种形式的图形。
我有一个警告:Python 抽象、强大且高级到足以不需要创建自己的 OO 设计 - 使用 numpy、scipy 和 matplotlib 可以始终使用最少的代码做到您想要的,因此在开始额外编码之前,请确保您需要它 :)

谢谢,我会这样操作。 - Geeklhem

0

虽然您已经提出了问题有一段时间了,但这个答案可能会有所帮助。

我创建并积极开发了一个 Python 库,可以做到这一点(尽管范围略广)。它被设计成您可以完全自定义数据处理,同时仍然拥有一些基本工具(包括绘图)。

这个库叫做实验笔记(enb),可以在 Github(https://github.com/miguelinux314/experiment-notebook)和通过 pip(例如pip install enb)获得。

我建议任何感兴趣的读者查看类似教程的文档(https://miguelinux314.github.io/experiment-notebook),以了解预期的工作流程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接