跳转到主要内容

Taxoniq:物种信息查询 - 快速、离线查询NCBI物种分类和相关数据

项目描述

Taxoniq:物种信息查询 - 快速、离线查询NCBI物种分类和相关数据

Taxoniq是一个Python和命令行界面,用于访问NCBI物种分类数据库以及与之相关联的数据源。

Taxoniq的功能包括

  • 从NCBI、WoL和相关数据库中每月更新的预计算索引
  • 离线操作:所有索引都包含在包中;查询物种信息时不会进行网络调用(单独地,Taxoniq可以给定物种或序列访问号ID从网络上获取核酸或蛋白质序列 - 请参阅下面的“检索序列”)
  • 具有JSON I/O、批量处理和输入流功能的CLI,便于使用和管道化在shell脚本中
  • 稳定、文档齐全、类型提示的Python API(支持Python 3.6及以上版本)
  • 全面的测试和持续集成
  • 直观的界面,具有有用的默认设置
  • 紧凑性、可读性和可扩展性

Taxoniq 包捆绑了 NCBI 分类数据库文件的索引压缩副本,包括与每个分类单元相关的 NCBI 分类数据库文件NCBI RefSeq 核苷酸和蛋白质序列访问号、WoL 全领域系统发育基因组距离数据库以及来自其他数据库的相关信息。NCBI RefSeq BLAST 数据库中出现的序列访问号已索引,因此,给定一个分类单元 ID、访问号或分类单元名称,您可以快速检索该分类单元的等级、谱系、描述、引用、代表性 RefSeq ID、LCA 信息、进化距离、序列(带有网络调用)等,具体请参阅下面 食谱 部分。完整的 API 文档 可用。

安装

pip3 install taxoniq

预构建的 wheel 文件适用于 Linux 和 MacOS 上的 Python 3.5+。在 MacOS 11 Big Sur 上,需要 Pip 20.3+ 才能安装预构建的 wheel 文件(您可以使用 pip3 --version 检查版本,并使用 pip3 install --upgrade pip 升级)。

概述

>>> import taxoniq
>>> t = taxoniq.Taxon(9606)
>>> t.scientific_name
'Homo sapiens'
>>> t.common_name
'human'

>>> t.ranked_lineage
[taxoniq.Taxon(9606), taxoniq.Taxon(9605), taxoniq.Taxon(9604), taxoniq.Taxon(9443),
 taxoniq.Taxon(40674), taxoniq.Taxon(7711), taxoniq.Taxon(33208), taxoniq.Taxon(2759)]
>>> len(t.lineage)
32
>>> [(t.rank.name, t.scientific_name) for t in t.ranked_lineage]
[('species', 'Homo sapiens'), ('genus', 'Homo'), ('family', 'Hominidae'), ('order', 'Primates'),
 ('class', 'Mammalia'), ('phylum', 'Chordata'), ('kingdom', 'Metazoa'), ('superkingdom', 'Eukaryota')]
>>> [(c.rank.name, c.common_name) for c in t.child_nodes]
[('subspecies', 'Neandertal'), ('subspecies', 'Denisova hominin')]

>>> t.refseq_representative_genome_accessions[:10]
[taxoniq.Accession('NC_000001.11'), taxoniq.Accession('NC_000002.12'), taxoniq.Accession('NC_000003.12'),
 taxoniq.Accession('NC_000004.12'), taxoniq.Accession('NC_000005.10'), taxoniq.Accession('NC_000006.12'),
 taxoniq.Accession('NC_000007.14'), taxoniq.Accession('NC_000008.11'), taxoniq.Accession('NC_000009.12'),
 taxoniq.Accession('NC_000010.11')]

>>> t.url
'https://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Info&id=9606'

# Wikidata provides structured links to many databases about taxa represented on Wikipedia
>>> t.wikidata_url
'https://www.wikidata.org/wiki/Q15978631'
>>> t2 = taxoniq.Taxon(scientific_name="Bacillus anthracis")
>>> t2.description
'<p class="mw-empty-elt"> </p> <p><i><b>Bacillus anthracis</b></i> is a Gram-positive and
 rod-shaped bacterium that causes anthrax, a deadly disease to livestock and, occasionally, to
 humans. It is the only permanent (obligate) pathogen within the genus <i>Bacillus</i>. Its
 infection is a type of zoonosis, as it is transmitted from animals to humans. It was discovered
 by a German physician Robert Koch in 1876, and became the first bacterium to be experimentally
 shown as a pathogen. The discovery was also the first scientific evidence for the germ theory
 of diseases.</p><p><i>B. anthracis</i> measures about 3 to 5 μm long and 1 to 1.2 μm wide, and
 has a genome of 5,227,293 bp in a single circular DNA. It has two extrachromosal DNA plasmids,
 pXO1 and pXO2, which are responsible for the pathogenicity. It forms a protective layer called
 endospore by which it can remain inactive for many years and suddenly becomes infective under
 suitable environmental conditions. Because of the resilience of the endospore, the bacterium is
 one of the most popular biological weapons. The protein capsule (poly-D-gamma-glutamic acid) is
 key to evasion of the immune response. It feeds on the heme of blood protein</p>...'
>>> t3 = taxoniq.Taxon(accession_id="NC_000913.3")
>>> t3.scientific_name
'Escherichia coli str. K-12 substr. MG1655"'
>>> t3.parent.parent.common_name
'E. coli'
>>> t3.refseq_representative_genome_accessions[0].length
4641652

# The get_from_s3() method is the only command that will trigger a network call.
>>> seq = t3.refseq_representative_genome_accessions[0].get_from_s3().read()
>>> len(seq)
4641652
>>> seq[:64]
b'AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGAT'

检索序列

NCBI BLAST 数据库的镜像存储在 AWS S3s3://ncbi-blast-databases)和 Google Storage (gs://blast-db)。这是一个关键资源,因为与 NCBI FTP 服务器相比,S3 和 GS 具有更高的带宽和吞吐量,因此可以使用范围请求从数据库文件中检索单个序列,而无需下载和保留整个数据库的副本。

Taxoniq PyPI 发行版(您使用 pip3 install taxoniq 安装的包)索引了以下 NCBI BLAST 数据库的序列访问号

  • Refseq 病毒代表性基因组(ref_viruses_rep_genomes)(核苷酸)
  • Refseq 原核生物代表性基因组(包含 refseq 组装)(ref_prok_rep_genomes)(核苷酸)
  • RefSeq 真核生物代表性基因组数据库(ref_euk_rep_genomes)(核苷酸)
  • 贝塔冠状病毒(核苷酸)

给定一个访问号,Taxoniq 可以发出单个 HTTP 请求,并返回一个类似文件的对象,从 S3 或 GS 镜像流式传输核苷酸序列,如下所示

with taxoniq.Accession("NC_000913.3").get_from_s3() as fh:
    fh.read()

为了简洁起见,您可以使用 urllib3.response.HTTPResponse.stream 替代 read(...),以避免在内存中保留整个序列

with taxoniq.Accession("NC_000913.3").get_from_s3() as fh:
    for chunk in fh.stream():
        sys.stdout.buffer.write(chunk)

要快速检索多个序列,您可能需要使用线程池同时打开多个网络连接

from concurrent.futures import ThreadPoolExecutor
def fetch_seq(accession):
    seq = accession.get_from_s3().read()
    return (accession, seq)

taxon = taxoniq.Taxon(scientific_name="Apis mellifera")
for accession, seq in ThreadPoolExecutor().map(fetch_seq, taxon.refseq_representative_genome_accessions):
    print(accession, len(seq))

此操作也在 CLI 中提供,具体请参阅以下说明。

命令行界面

pip3 install taxoniq 安装了一个命令行工具 taxoniq,它可以执行与 Python API 相同的许多功能

>taxoniq child-nodes --taxon-id 2 --output-format '{tax_id}: {scientific_name}'
[
    "1224: Proteobacteria",
    "2323: Bacteria incertae sedis",
    "32066: Fusobacteria",
    "40117: Nitrospirae",
    "48479: environmental samples",
    "49928: unclassified Bacteria",
    "57723: Acidobacteria",
    "68297: Dictyoglomi",
    "74152: Elusimicrobia",
    "200783: Aquificae",
    "200918: Thermotogae",
    "200930: Deferribacteres",
    "200938: Chrysiogenetes",
    "200940: Thermodesulfobacteria",
    "203691: Spirochaetes",
    "508458: Synergistetes",
    "1783257: PVC group",
    "1783270: FCB group",
    "1783272: Terrabacteria group",
    "1802340: Nitrospinae/Tectomicrobia group",
    "1930617: Calditrichaeota",
    "2138240: Coprothermobacterota",
    "2498710: Caldiserica/Cryosericota group",
    "2698788: Candidatus Krumholzibacteriota",
    "2716431: Coleospermum",
    "2780997: Vogosella"
]

有关详细信息,请参阅 taxoniq --help

使用 CLI 检索序列

要检索给定访问号的单个序列(FASTA 格式),请使用 taxoniq get-from-s3 --accession-id ACCESSION_ID

要检索多个序列(FASTA 格式),请使用 --accession-id - 并将 ID 通过标准输入传递,每行一个:taxoniq refseq-representative-genome-accessions --scientific-name="Apis mellifera" | jq -r .[] | taxoniq get-from-s3 --accession-id -

使用 core_nt 数据库

由于它们的大小,包含 BLAST 核苷酸数据库(core_nt)索引的 taxoniq wheel 分布在 GitHub 上,而不是 PyPI。运行 pip3 install taxoniq 后,您可以按照以下方式安装 NT 索引

  • 导航到 https://github.com/taxoniq/taxoniq/releases/latest
  • 在 "Assets" 部分,对于每个以 "ncbi_genbank" 开头并以 ".whl" 结尾的链接
    • 右键单击资产链接,然后单击 "复制链接地址"
    • 运行 pip3 install --upgrade <PASTED LINK ADDRESS>

core_nt 索引包还包含 RefSeq 代表性基因组访问号和贝塔冠状病毒访问号的索引(意味着它们是 PyPI 包的超集)。

流式 CLI I/O

taxoniq 命令行界面可以从 stdin 接收流式输入,并将流式输出到 stdout。这允许分摊启动和索引加载时间,并作为 shell 管道的一部分进行高效操作。

以下示例显示了 fastp、kraken2 和 taxoniq 的管道操作,以注释 Betacoronavirus 样本中找到的匹配项

in progress

食谱

进行中

链接

许可证

taxoniq 软件根据 MIT 许可证的条款进行许可。

此软件包的发行版包含来自 NCBI 分类、NCBI GenBank 和 NCBI RefSeq(Bethesda (MD):美国国立医学图书馆(US)、美国国立生物技术信息中心)的数据。这些数据根据 NCBI 公共领域声明 发布到公共领域。

此软件包的发行版包含根据 CC-BY-SA 许可证 许可的维基百科文本摘录。

错误

请在 GitHub 上报告错误、问题、功能请求等。

项目详细信息


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。

源分布

taxoniq-1.0.3.tar.gz (61.4 kB 查看散列)

上传时间

构建分布

taxoniq-1.0.3-py3-none-any.whl (32.3 kB 查看散列)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面