专栏首页小明的数据分析笔记本如何根据物种拉丁名找到其在NCBI Taxonomy所处的位置

如何根据物种拉丁名找到其在NCBI Taxonomy所处的位置

问题描述:

我想知道某个物种在NCBI的分类系统里被归为哪个目、哪个科、哪个属? 单个物种可以手动NCBI网站检索,如果物种数非常多如何实现?

之前读 ete3 的帮助文档的时候看到过类似的功能http://etetoolkit.org/docs/latest/tutorial/tutorial_ncbitaxonomy.html。最近可能会用到这个功能,记录自己使用的代码 (首先是安装ete3:自己windows10电脑安装了Anaconda3,直接在DOS窗口下使用命令pip install ete3即可安装)

  • 单个物种 以石榴Punica granatum为例
from ete3 import NCBITaxa
ncbi = NCBITaxa
name2taxid = ncbi.get_name_translator(["Punica granatum"])
for a,b in name2taxid.items():
    lineage = ncbi.get_lineage(b[0])
    names = ncbi.get_taxid_translator(lineage)
    for taxid in lineage:
        print(names[taxid])

输出结果

root
cellular organisms
Eukaryota
Viridiplantae
Streptophyta
Streptophytina
Embryophyta
Tracheophyta
Euphyllophyta
Spermatophyta
Magnoliophyta
Mesangiospermae
eudicotyledons
Gunneridae
Pentapetalae
rosids
malvids
Myrtales
Lythraceae
Punica
Punica granatum
  • 多个物种 将物种拉丁名放到文本文件里,每行一个
Lumnitzera littorea
Punica granatum
Heimia myrtifolia
Sonneratia alba
Epilobium ulleungensis

代码

import sys
from ete3 import NCBITaxa
input_file = sys.argv[1]
output_file = sys.argv[2]
ncbi = NCBITaxa()
fw = open(output_file,"w")
with open(input_file,"r") as fr:
    for line in fr:
        species_name = line.strip()
        name2taxid = ncbi.get_name_translator([species_name])
        for a,b in name2taxid.items():
            lineage = ncbi.get_lineage(b[0])
            names = ncbi.get_taxid_translator(lineage)
            i = 1
            for taxid in lineage:   
                if i < len(lineage):
                    fw.write(names[taxid]+",")
                    i = i + 1
                else:
                    fw.write(names[taxid]+"\n")
        print(species_name + ":","OK")


fw.close()
#使用方法
python .\get_species_placement_in_NCBI.py .\Organism_name.txt placement.txt
#输出结果
root,cellular organisms,Eukaryota,Viridiplantae,Streptophyta,Streptophytina,Embryophyta,Tracheophyta,Euphyllophyta,Spermatophyta,Magnoliophyta,Mesangiospermae,eudicotyledons,Gunneridae,Pentapetalae,rosids,malvids,Myrtales,Combretaceae,Lumnitzera,Lumnitzera littorea
root,cellular organisms,Eukaryota,Viridiplantae,Streptophyta,Streptophytina,Embryophyta,Tracheophyta,Euphyllophyta,Spermatophyta,Magnoliophyta,Mesangiospermae,eudicotyledons,Gunneridae,Pentapetalae,rosids,malvids,Myrtales,Lythraceae,Punica,Punica granatum
root,cellular organisms,Eukaryota,Viridiplantae,Streptophyta,Streptophytina,Embryophyta,Tracheophyta,Euphyllophyta,Spermatophyta,Magnoliophyta,Mesangiospermae,eudicotyledons,Gunneridae,Pentapetalae,rosids,malvids,Myrtales,Lythraceae,Heimia,Heimia myrtifolia
root,cellular organisms,Eukaryota,Viridiplantae,Streptophyta,Streptophytina,Embryophyta,Tracheophyta,Euphyllophyta,Spermatophyta,Magnoliophyta,Mesangiospermae,eudicotyledons,Gunneridae,Pentapetalae,rosids,malvids,Myrtales,Lythraceae,Sonneratia,Sonneratia alba
root,cellular organisms,Eukaryota,Viridiplantae,Streptophyta,Streptophytina,Embryophyta,Tracheophyta,Euphyllophyta,Spermatophyta,Magnoliophyta,Mesangiospermae,eudicotyledons,Gunneridae,Pentapetalae,rosids,malvids,Myrtales,Onagraceae,Onagroideae,Epilobieae,Epilobium,Epilobium ulleungensis

本文分享自微信公众号 - 小明的数据分析笔记本(gh_0c8895f349d3),作者:Punicagranatum

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python提取pdf文档中的表格数据、svg格式转换为pdf

    https://www.analyticsvidhya.com/blog/2020/08/how-to-extract-tabular-data-from-pd...

    用户7010445
  • R语言ggplot2频率分布直方图小例子

    image.png 将其另存为csv格式。 以上数据来源 https://www.r-graph-gallery.com/220-basic-ggplot2-h...

    用户7010445
  • R语言逻辑斯蒂回归小实例

    Logistic regression, also called a logit model, is used to model dichotomous out...

    用户7010445
  • Docker网络管理机制实例解析+创建自己Docker网络

    实例解析Docker网络管理机制(bridge network,overlay network),介绍Docker默认的网络方式,并创建自己的网络桥接方式,将开...

    王小雷
  • MySQL 数据类型

    这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PR...

    乐心湖
  • MySQL 数据类型

    数值类型 MySQL支持所有标准SQL数值数据类型。 这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似...

    joshua317
  • MySQL 数据类型

    MySQL中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。 ---- 数值类...

    Rare0716
  • 编译的Ceph二进制文件过大问题

    在ceph的研发群里看到一个cepher提出一个问题,编译的ceph的二进制文件过大,因为我一直用的打包好的rpm包,没有关注这个问题,重新编译了一遍发现确实有...

    用户2772802
  • 刨根究底字符编码之十三——UTF-16编码方式

    UTF-16编码方式源于UCS-2(Universal Character Set coded in 2 octets、2-byte Universal Cha...

    用户1876609
  • docker 中ulimit设置理解

    本次出现的问题现象:es pod启动失败,一直报max file descriptors [4096] for elasticsearch process is...

    程序员同行者

扫码关注云+社区

领取腾讯云代金券