2016-04-08 5 views
3

Ich habe eine Liste von taxids der wie folgt aussieht:Wie taxonomic spezifische IDs für Königreich, Phylum, Klasse, Ordnung, Familie, Gattung und Arten von Taxid bekommen?

1204725 
2162 
1300163 
420247 

Ich suche eine Datei mit taxonomischen ids, um von dem taxids oben zu bekommen:

kingdom_id  phylum_id  class_id  order_id  family_id  genus_id  species_id 

Ich bin mit dem Paket " ete3 ". Ich benutze das Werkzeug ete-ncbiquery, das dir die Abstammung von den oben genannten IDs sagt. (Ich betreibe es von meinem Linux-Laptop mit dem Befehl unten)

ete3 ncbiquery --search 1204725 2162 13000163 420247 --info 

Das Ergebnis sieht wie folgt aus:

# Taxid Sci.Name Rank Named Lineage Taxid Lineage 
2162 Methanobacterium formicicum species root,cellular organisms,Archaea,Euryarchaeota,Methanobacteria,Methanobacteriales,Methanobacteriaceae,Methanobacterium,Methanobacterium formicicum 1,131567,2157,28890,183925,2158,2159,2160,2162 
1204725 Methanobacterium formicicum DSM 3637 no rank root,cellular organisms,Archaea,Euryarchaeota,Methanobacteria,Methanobacteriales,Methanobacteriaceae,Methanobacterium,Methanobacterium formicicum,Methanobacterium formicicum DSM 3637 1,131567,2157,28890,183925,2158,2159,2160,2162,1204725 
420247 Methanobrevibacter smithii ATCC 35061 no rank root,cellular organisms,Archaea,Euryarchaeota,Methanobacteria,Methanobacteriales,Methanobacteriaceae,Methanobrevibacter,Methanobrevibacter smithii,Methanobrevibacter smithii ATCC 350611,131567,2157,28890,183925,2158,2159,2172,2173,420247 

Ich habe keine Ahnung, welche Elemente (IDS) entsprechen dem, was ich suche (falls vorhanden)

+0

fragen biostars.org .eg: https://www.biostars.org/p/16262/ – Pierre

Antwort

5

Der folgende Code:

import csv 
from ete3 import NCBITaxa 

ncbi = NCBITaxa() 

def get_desired_ranks(taxid, desired_ranks): 
    lineage = ncbi.get_lineage(taxid) 
    lineage2ranks = ncbi.get_rank(lineage) 
    ranks2lineage = dict((rank, taxid) for (taxid, rank) in lineage2ranks.items()) 
    return {'{}_id'.format(rank): ranks2lineage.get(rank, '<not present>') for rank in desired_ranks} 

def main(taxids, desired_ranks, path): 
    with open(path, 'w') as csvfile: 
     fieldnames = ['{}_id'.format(rank) for rank in desired_ranks] 
     writer = csv.DictWriter(csvfile, delimiter='\t', fieldnames=fieldnames) 
     writer.writeheader() 
     for taxid in taxids: 
      writer.writerow(get_desired_ranks(taxid, desired_ranks)) 

if __name__ == '__main__': 
    taxids = [1204725, 2162, 1300163, 420247] 
    desired_ranks = ['kingdom', 'phylum', 'class', 'order', 'family', 'genus', 'species'] 
    path = 'taxids.csv' 
    main(taxids, desired_ranks, path) 

Erzeugt eine Datei, die wie folgt aussieht:

kingdom_id phylum_id class_id order_id family_id genus_id species_id 
<not present> 28890 183925 2158 2159 2160 2162 
<not present> 28890 183925 2158 2159 2160 2162 
<not present> 28890 183925 2158 2159 2160 2162 
<not present> 28890 183925 2158 2159 2172 2173 
0

Verwenden Sie die Taxid Lineage-Nummern in Ihren Ergebnissen, indem Sie sie in der get_rank-Methode von ete3 verwenden. Als example:

from ete3 import NCBITaxa 
ncbi = NCBITaxa() 

print ncbi.get_rank([9606, 9443]) 
# {9443: u'order', 9606: u'species'} 

Vermutlich das resultierende Wörterbuch, um die Ranginformationen aller IDs enthalten sollte, einschließlich aller Zwischen „no rank“ IDs, die Sie beseitigen möchten.

Verwandte Themen