本文主要是介绍使用Python ete3包快速大批量地寻找物种的NCBI Taxonomy分类的完整信息(物种名和Taxid可进行相互转换),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ete全称为Environment for Tree Exploration,直译就是树探索环境,此工具可以直接在终端输入
pip install ete3 进行安装即可。ete包主要功能与构建系统发生树有关,若是有相关需求可以查看其介绍文档,地址:The ETE tutorial。我主要使用到了其中的分类工具,即处理NCBI 的Taxonomy数据库的工具。此工具用于物种信息和分类号的转换十分简便,使用时是根据NCBI的最新分类文件来运作的,因此分类信息十分可靠。
目录
- 下载升级数据库
- NCBITaxa.get_rank()
- NCBITaxa.get_lineage()
- NCBITaxa.get_taxid_translator()
- NCBITaxa.get_name_translator()
- NCBITaxa.get_descendant_taxa()
- 叮!
下载升级数据库
ete3使用NCBI 的Taxonomy数据,因此需要首次使用时需要先下载数据。在应用中主要用到的是ete3包的NCBITaxa模块。首次使用NCBITaxa模块时会检测是否有分类数据存在,没有的话会自动下载。长期未更新时可以直接使用升级选项获取最新的分类数据。即:
from ete3 import NCBITaxa # 导入此模块
ncbi = NCBITaxa()
ncbi.update_taxonomy_database() # 升级
运行命令后显示如下,此文件taxdump.tar.gz来自于NCBI,网址为:https://ftp.ncbi.nih.gov/pub/taxonomy/
等待下载结束即可(可能下载速度有点慢)。这样准备工作就OK啦。
NCBITaxa.get_rank()
用于获得输入的各个Taxid之间的按照分类单位(即界门纲目科属种等)大小进行排列的顺序,例:
from ete3 import NCBITaxa
ncbi = NCBITaxa()
print(ncbi.get_rank([93061,9443,1282,190485]))
结果:
NCBITaxa.get_lineage()
用于获取输入Taxid代表的物种的完整分类信息,结果为一连串的Taxid号,例:
from ete3 import NCBITaxa
ncbi = NCBITaxa()
print(ncbi.get_lineage(294))
结果:
NCBITaxa.get_taxid_translator()
用于将Taxid转换为物种名或者对应的分类单位名,输入为列表形式。例:
from ete3 import NCBITaxa
ncbi = NCBITaxa()
print(ncbi.get_taxid_translator([9606]))
结果:
NCBITaxa.get_name_translator()
用于将物种名或者分类单位名转换为Taxid,输入为列表形式。例:
from ete3 import NCBITaxa
ncbi = NCBITaxa()
print(ncbi.get_name_translator(['Lactococcus lactis subsp. lactis']))
结果:
NCBITaxa.get_descendant_taxa()
用于获取某分类单位所包含之后的各后代名,例:
from ete3 import NCBITaxa
ncbi = NCBITaxa()
print(ncbi.get_descendant_taxa('Homo'))
结果:
因此根据上述所有方法,若要根据某物种名获取物种的完整分类信息,那么可以首先使用get_name_translator()获取物种的分类id,再利用get_lineage()获取完整的分类信息的Taxid,最后使用NCBITaxa.get_taxid_translator()将Taxid批量转换为物种名即可。
例如若有如下这些物种待分类:
根据这些物种名寻找其分类信息,可采用如下代码:
from ete3 import NCBITaxa
ncbi = NCBITaxa()with open('22.txt','r',encoding='UTF-8') as f:for line in f.readlines():line = line.strip()name2taxid = ncbi.get_name_translator([line])for value in name2taxid.values():b = str(name2taxid.values()).strip('dict_values([])')lineage = ncbi.get_lineage(b)names = ncbi.get_taxid_translator(lineage)list = []for taxid in lineage:list.append(names[taxid])print(list)
结果太长,此处仅展示2条:
[‘root’, ‘cellular organisms’, ‘Bacteria’, ‘Terrabacteria group’, ‘Firmicutes’, ‘Bacilli’, ‘Lactobacillales’, ‘Streptococcaceae’, ‘Lactococcus’, ‘Lactococcus lactis’, ‘Lactococcus lactis subsp. lactis’]
[‘root’, ‘cellular organisms’, ‘Bacteria’, ‘Terrabacteria group’, ‘Firmicutes’, ‘Bacilli’, ‘Bacillales’, ‘Staphylococcaceae’, ‘Staphylococcus’, ‘Staphylococcus epidermidis’]
可以看到这样分类出的结果是很准确的,因此此工具可以用于分类或其他用途。
叮!
参考:Dealing with the NCBI Taxonomy database
参考:https://zhuanlan.zhihu.com/p/59757585
这篇关于使用Python ete3包快速大批量地寻找物种的NCBI Taxonomy分类的完整信息(物种名和Taxid可进行相互转换)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!