Convertir csv al árbol de Newick

Así que tengo un archivo csv donde cada línea representa datos jerárquicos en la forma: ‘Phylum’, ‘Class’, ‘Order’, ‘Family’, ‘Genus’, ‘Species’, ‘Subspecies’, ‘unique_gi’

Me gustaría convertir esto al formato clásico de árbol de Newick sin distancias. Un método nuevo o un paquete de python serían increíbles. ¡Gracias!

Podría usar un Python simple para construir un árbol a partir del CSV, y luego escribirlo en un árbol Newick. No estoy seguro de si esto es lo que estás tratando de hacer o no.

import csv from collections import defaultdict from pprint import pprint def tree(): return defaultdict(tree) def tree_add(t, path): for node in path: t = t[node] def pprint_tree(tree_instance): def dicts(t): return {k: dicts(t[k]) for k in t} pprint(dicts(tree_instance)) def csv_to_tree(input): t = tree() for row in csv.reader(input, quotechar='\''): tree_add(t, row) return t def tree_to_newick(root): items = [] for k in root.iterkeys(): s = '' if len(root[k].keys()) > 0: sub_tree = tree_to_newick(root[k]) if sub_tree != '': s += '(' + sub_tree + ')' s += k items.append(s) return ','.join(items) def csv_to_weightless_newick(input): t = csv_to_tree(input) #pprint_tree(t) return tree_to_newick(t) if __name__ == '__main__': # see https://docs.python.org/2/library/csv.html to read CSV file input = [ "'Phylum','Class','Order','Family','Genus','Species','Subspecies','unique_gi'", "'Phylum','Class','Order','example'", "'Another','Test'", ] print csv_to_weightless_newick(input) 

Ejemplo de salida:

 $ python ~/tmp/newick_tree.py (((example,((((unique_gi)Subspecies)Species)Genus)Family)Order)Class)Phylum,(Test)Another 

Además, esta biblioteca parece genial y te permite visualizar tus árboles: http://biopython.org/wiki/Phylo