Как получить таксономические специфические идентификаторы для царства, типа, класса, отряда, семейства, рода и вида из таксида?

У меня есть список такси, который выглядит так:

1204725
2162
1300163
420247

Я хочу получить файл с таксономическими идентификаторами в порядке из приведенных выше таксидов:

kingdom_id      phylum_id       class_id        order_id        family_id       genus_id        species_id   

Я использую пакет "ete3". Я использую инструмент ete-ncbiquery, который сообщает вам происхождение от приведенных выше идентификаторов. (Я запускаю его со своего ноутбука с Linux с помощью приведенной ниже команды)

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

Результат выглядит следующим образом:

# 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

Я понятия не имею, какие элементы (IDS) соответствуют тому, что я ищу (если есть)


person aLbAc    schedule 08.04.2016    source источник
comment
спросите на сайте biostars.org, например: biostars.org/p/16262   -  person Pierre    schedule 08.04.2016


Ответы (3)


Следующий код:

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)

Создает файл, который выглядит следующим образом:

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
person BioGeek    schedule 09.04.2016

Имея в результатах номера Taxid Lineage, попробуйте использовать их в методе ete3 get_rank. В качестве примера:

from ete3 import NCBITaxa
ncbi = NCBITaxa()

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

Предположительно результирующий словарь должен содержать информацию о рангах всех идентификаторов, включая любые промежуточные идентификаторы «без ранга», которые вы, возможно, захотите исключить.

person flyingfinger    schedule 08.04.2016

Вы также можете использовать пакет R taxonomizr. Пакету требуется немного времени, чтобы загрузить необходимые файлы, но после этого все довольно быстро и легко.

library("taxonomizr)
getNamesAndNodes()
taxaNodes <- read.nodes('nodes.dmp')
taxaNames <- read.names('names.dmp')
taxaID <- c("1204725", "2162", "1300163", "420247")

getNamesAndNodes загружает файлы names.dmp и nodes.dmp с ncbi.

person msakya    schedule 08.05.2018