Я хотел бы преобразовать дерево из newick в формат, такой как graphml, который я могу открыть с помощью cytoscape.
Итак, у меня есть файл "small.newick", который содержит:
((raccoon:1,bear:6):0.8,((sea_lion:11.9, seal:12):7,((monkey:100,cat:47):20, weasel:18):2):3,dog:25);
До сих пор я так и делал (Python 3.6.5 | Anaconda):
from Bio import Phylo
import networkx
Tree = Phylo.read("small.newick", 'newick')
G = Phylo.to_networkx(Tree)
networkx.write_graphml(G, 'small.graphml')
Существует проблема с Клэдом, которую я могу исправить с помощью этого кода:
from Bio import Phylo
import networkx
def clade_names_fix(tree):
for idx, clade in enumerate(tree.find_clades()):
if not clade.name:
clade.name=str(idx)
Tree = Phylo.read("small.newick", 'newick')
clade_names_fix(Tree)
G = Phylo.to_networkx(Tree)
networkx.write_graphml(G, 'small.graphml')
Дайте мне что-то, что кажется достаточно милым:
Мои вопросы:
Это хороший способ сделать это? Мне кажется странным, что функция не заботится о внутренних именах узлов
Если вы замените одно имя узла на достаточно длинную строку, оно будет обрезано командой Phylo.to_networkx (Tree) . Как этого избежать?
Пример: замена слова "собака" на "test_tring_that_create_some_problem_later_on"