8

作为一名生物学本科生,我经常编写 python 软件以进行一些数据分析。一般结构总是:

有一些数据加载,对(统计、聚类...)执行分析,然后可视化结果。

有时对于同一个实验,数据可以采用不同的格式,您可以采用不同的方式来分析它们,并且可能有不同的可视化,这可能取决于或不取决于所执行的分析。

我正在努力寻找一种通用的“pythonic”和面向对象的方式来使其清晰且易于扩展。添加新类型的操作或对现有操作进行轻微更改应该很容易,所以我非常相信我应该使用 oop 来做到这一点。

我已经用加载实验数据的方法完成了一个Data对象。如果我有多个数据源以覆盖加载功能,我计划创建继承类。

在那之后......我不确定。我应该为每种类型的分析做一个带有子类的Analysis抽象类(并使用它们的属性来存储结果),并为Visualization做同样的事情,用一个包含 Data 实例和多个Analysis and Visualization实例的通用Experiment对象?或者可视化应该是采用分析和/或数据对象作为参数以构造图的函数吗?有没有更有效的方法?我错过了什么吗?

4

1 回答 1

5

您的一般想法会起作用,这里有一些更多细节,希望能帮助您继续:

  • 创建一个抽象Data类,使用一些通用方法,如,load等。saveprint
  • 为您感兴趣的每种特定形式的数据创建具体的子类。这可能是特定于任务的(例如用于自然语言处理的数据)或特定于形式的(以矩阵形式给出的数据,其中每一行对应于不同的观察)
  • 如您所说,创建一个抽象分析类。
  • 为每种分析形式创建具体的子类。每个具体的子类都应该重写一个方法,该方法process接受特定形式的Data并返回带有结果的Data的新实例(如果您认为结果的形式与输入数据的形式不同,请使用不同的类Result
  • 创建可视化类层次结构。每个具体的子类都应该覆盖一个方法,该方法visualize接受一个特定的数据实例(或者如果你使用不同的类,则为结果)并返回某种形式的图表。

我确实有一个警告:Python 是抽象的、强大的和高级的,以至于您通常不需要创建自己的 OO 设计——总是可以使用最小的代码来做你想做的事numpyscipymatplotlib,所以之前开始做额外的编码确保你需要它:)

于 2013-07-11T16:41:48.137 回答