通过规范值管理科学数据依赖图的python解决方案

标签 python nosql scientific-computing bioinformatics aop

我有一个科学数据管理问题,这似乎很普遍,但我找不到现有的解决方案,甚至找不到它的描述,我一直对此感到困惑。我即将开始一个主要的重写(python),但我想我最后一次为现有的解决方案投了一次,所以我可以放弃自己的,回到生物学,或者至少学习一些合适的语言来更好地谷歌搜索.

问题:
我有昂贵的(数小时到数天的计算)和大(GB)数据属性,它们通常构建为一个或多个其他数据属性的转换。我需要准确地跟踪这些数据是如何构建的,这样如果它适合问题(使用正确的规范值构建)或根据需要构建新数据,我就可以将其重用作另一个转换的输入。尽管这无关紧要,但我通常从“增值”的某种异质分子生物学信息开始,例如,其他研究人员通过其他过程注释基因和蛋白质的基因组。我需要结合和比较这些数据来做出我自己的推论。通常需要许多中间步骤,而且这些步骤可能很昂贵。此外,最终结果可以成为额外转换的输入。所有这些转换都可以通过多种方式完成:使用不同的初始数据进行限制(例如使用不同的生物体),通过在相同的推理中使用不同的参数值,或通过使用不同的推理模型等。分析经常变化并建立在其他人的基础上以计划外的方式。我需要知道我拥有哪些数据(哪些参数或规范完全定义了它),以便我可以在适当的情况下重用它,以及一般的科学完整性。

我的总体努力:
我在设计我的 python 类时考虑到了描述问题。类对象构建的所有数据属性都由一组参数值描述。我将这些定义参数或规范称为“def_specs”,而这些 def_specs 及其值称为数据 atts 的“形状”。该过程的整个全局参数状态可能非常大(例如一百个参数),但任何一个类提供的数据 atts 只需要其中的一小部分,至少直接需要。目标是通过测试它们的形状是否是全局参数状态的子集来检查先前构建的数据 att 是否合适。

在一个类中,通过检查代码很容易找到定义形状的所需 def_specs。当一个模块需要来自另一个模块的数据属性时,就会出现问题。这些数据属性将有自己的形状,可能由调用对象作为 args 传递,但更多时候是从全局参数状态中过滤出来的。调用类应该增加其依赖项的形状,以维护其数据 atts 的完整描述。
理论上这可以通过检查依赖图手动完成,但是这个图可以深入,并且有很多模块,我不断地更改和添加,并且......我太懒惰和粗心了,无法手动完成.

因此,程序通过跟踪对其他类属性的调用并通过 __get__ 的托管堆栈将它们的形状推回到调用方,从而动态地发现数据 att 的完整形状。调用。当我重写时,我发现我需要严格控制对我的构建器类的属性访问,以防止任意信息影响数据 atts。幸运的是,python 使用描述符使这变得容易。

我将数据 atts 的形状存储在 db 中,以便我可以查询是否已经存在适当的数据(即其形状是当前参数状态的子集)。在我的重写中,我通过伟大的 SQLAlchemy 从 mysql 移动到对象 db(ZODB 或 couchdb?),因为当发现额外的 def_specs 时必须更改每个类的表,这很痛苦,并且因为一些 def_specs 是python 列表或字典,转换为 sql 很痛苦。

我不认为这个数据管理可以与我的数据转换代码分开,因为需要严格的属性控制,尽管我尽可能地这样做。我可以使用现有的类,方法是将它们与提供它们的 def_specs 作为类属性的类一起使用,并通过描述符进行 db 管理,但这些类是终端,因为无法进一步发现额外的依赖项形状。

如果数据管理和数据 build 不能轻易分开,我想不太可能有一个开箱即用的解决方案,而是有一千个具体的解决方案。也许有一个适用的模式?我很感激有关如何寻找或更好地描述问题的任何提示。对我来说,这似乎是一个普遍的问题,尽管管理深层数据可能与网络的盛行之风不一致。

最佳答案

我没有给你与 Python 相关的具体建议,但这里有一些想法:

您在生物信息学中遇到了一个共同的挑战。数据是庞大的、异构的,并且随着新技术的引入以不断变化的格式出现。我的建议是不要过度考虑您的管道,因为它们明天可能会发生变化。选择一些定义明确的文件格式,并尽可能频繁地将传入数据转换为这些格式。根据我的经验,通常最好使用松散耦合的工具来做好一件事,这样您就可以快速将它们链接在一起进行不同的分析。

您也可以考虑将此问题的一个版本转至 http://biostar.stackexchange.com/ 上的生物信息学堆栈交换。

关于通过规范值管理科学数据依赖图的python解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3076953/

相关文章:

objective-c - 用于密集型科学应用的 NSDecimalNumber?

machine-learning - Python(scikit learn)lda 崩溃为单一维度

python - 如何使用Pycharm在SQL Server中运行SQL?

python - 如何覆盖Python字典值?

python - 有没有为 SQL 和 NoSQL 提供数据库抽象层的 python Web 应用程序框架?

python - MATLAB 的 fmincon 函数的开源替代方案?

python - PostgreSQL - 无法创建表 - 数据类型点没有访问方法 "btree"的默认运算符类

Python 2.7.3 : When starting, 无法导入_socket

javascript - 为什么 Firebase 时间戳对象返回未定义?

java - CouchbaseClient 如何获取存储桶中所有 DesignDocuments 的列表