我在python包ete3中运行了一个名为codeml的程序。你知道吗
以下是codeml生成的模型打印:
>>> print(model)
Evolutionary Model fb.cluster_03502:
log likelihood : -35570.938479
number of parameters : 23
sites inference : None
sites classes : None
branches :
mark: #0 , omega: None , node_ids: 8 , name: ROOT
mark: #1 , omega: 789.5325 , node_ids: 9 , name: EDGE
mark: #2 , omega: 0.005 , node_ids: 4 , name: Sp1
mark: #3 , omega: 0.0109 , node_ids: 6 , name: Seq1
mark: #4 , omega: 0.0064 , node_ids: 5 , name: Sp2
mark: #5 , omega: 865.5116 , node_ids: 10 , name: EDGE
mark: #6 , omega: 0.005 , node_ids: 7 , name: Seq2
mark: #7 , omega: 0.0038 , node_ids: 11 , name: EDGE
mark: #8 , omega: 0.067 , node_ids: 2 , name: Sp3
mark: #9 , omega: 999.0 , node_ids: 12 , name: EDGE
mark: #10 , omega: 0.1165 , node_ids: 3 , name: Sp4
mark: #11 , omega: 0.1178 , node_ids: 1 , name: Sp5
但由于它只是一个打印,我需要将这些信息放入一个表格中,例如:
Omega node_ids name
None 8 ROOT
789.5325 9 EDGE
0.005 4 Sp1
0.0109 6 Seq1
0.0064 5 Sp2
865.5116 10 EDGE
0.005 7 Sp3
0.0038 11 EDGE
0.067 2 Sp3
999.0 12 EDGE
0.1165 3 Sp4
0.1178 1 Sp5
因为我需要分析这些信息。你知道吗
你知道如何处理打印输出吗?你知道吗
谢谢你的帮助。你知道吗
你的问题中隐含的假设有两个问题:
为什么要打印?你知道吗
你为什么一开始就打印模型?这不是以编程方式访问模型内部的好方法,因为这是为供人阅读而设计的,并且您无法确定是否在用于打印的
__str__()
方法中省略了模型的某些信息。你必须找出Evolutionary Model
是如何构造的,把这个结构转换成一个字典,然后用pandas.DataFrame.from_dict从这个字典创建一个数据帧。你知道吗首先看一下
model.__dict__()
和model.__repr__()
。你知道吗如果您可以查看定义
Evolutionary Model
的代码,当然可以直接查找Evolutionary Model
的结构并将其转换为字典。你知道吗为什么选择数据帧?你知道吗
如果您只想“解析”模型,那么如果您只想获得对其属性的编程访问,那么将其放入数据帧中需要做很多额外的工作。只要直接访问属性,例如
model.branches
,如果您想获得模型的branches
属性的值。你知道吗您可以使用
StringIO
和applymap
输出:
我看了看underlying code in model.py
似乎您可以使用
s = model.__str__()
来获得这个打印输出的字符串。在那里,您可以使用标准的字符串操作来解析字符串。我不知道字符串的确切形式,但您的代码可能如下所示:有更好的方法可以做到这一点,但它可以完成任务。你知道吗
相关问题 更多 >
编程相关推荐