工具篇|Python版Prodigal,性能最高提升100%!

👉 生信软件快看,带你十分钟了解新软件用法,加速你的研究

前言

Prodigal是一款编码蛋白基因(CDS)预测软件,专门用于原核生物的基因组或宏基因组。由于其容易上手的用法和优异的预测性能,截至目前已被引用5756次

最近在进行细菌的基因注释工作时,发现已有研究人员将起整合成为了python模块(pyrodigal),这项工作已发表在Journal of Open-Source Software上。该模块基于Cython与prodiagal绑定,能够直接与prodigal内部交互,同时优化了一些内容:

  • 更强的性能 :根据不同的序列而言,运行时间能节省1/3一半的时间。

  • 单一依赖:直接作为Python包分发,不存在Prodigal二进制文件

  • 没有中间文件:操作均发生在内存中,序列可直接作为字符串传递

  • 更好的内存使用:相比原始版本,采用了更紧凑的数据结构

  • 完全相同的结果 :pyrodigal经过广泛的测试,保证了与版本v2.6.3+31b300a的prodigal一样的结果。

  • 规范化的输出:无需再编写解析代码来读取Prodigal的结果

安装

该软件已托管到PyPI上,所以可以直接使用pip来进行快速安装

ruby 复制代码
$ pip install pyrodigal

或者,也可以通过conda来进行快速安装

r 复制代码
$ conda install -c bioconda pyrodigal

基础用法

基于Biopython的用法

案例:从Genebank中加载一个序列,使用pyrodigal搜索其基因,并以Fata格式打印结果

使用方法:pyrodigal.GeneFinder()

单一基因组输入

ini 复制代码
import Bio.SeqIO
import pyrodigal

record = Bio.SeqIO.read("sequence.gbk", "genbank")

orf_finder = pyrodigal.GeneFinder()
# 对于单一基因组输入下,需要使用train方法,否则无法获取到基因
orf_finder.train(bytes(record.seq))
genes = orf_finder.find_genes(bytes(record.seq))

宏基因组输入

python 复制代码
import Bio.SeqIO
import pyrodigal

record = Bio.SeqIO.read("sequence.gbk", "genbank")

orf_finder = pyrodigal.GeneFinder(meta=True) # 需要在方法内部注明meta=True
# 对于宏基因组输入时,软件采用预训练的文档进行分析,因此不需要再呼出train方法训练
for i, pred in enumerate(orf_finder.find_genes(bytes(record.seq))):
    print(f">{record.id}_{i+1}")
    print(pred.translate())

👉 如果biopython版本较旧<1.79,命令:bytes(record.seq)应该更改为record.seq.encode()

基于Scikit-bio的用法

python 复制代码
import skbio.io
import pyrodigal

seq = next(skbio.io.read("sequence.gbk", "genbank"))

orf_finder = pyrodigal.GeneFinder(meta=True)
for i, pred in enumerate(orf_finder.find_genes(seq.values.view('B'))):
    print(f">{record.id}_{i+1}")
    print(pred.translate())

除了方法GeneFinder****实现了Prodigal的核心用法外,Pyrodigal还提供了一些其他API方法,实现Python与Prodigal的深度交互,

  • TrainingInfo

  • MetagenomicBin

  • Genes

  • Nodes

  • Sequence

  • Masks

API方法的详细用法与参数见文档:pyrodigal.readthedocs.io/en/stable/a...

输出格式

如前文优点介绍,Pyrodigal 的创建是为了在构建更大的管道时跳过解析 Prodigal 的结果。开发人员也建议通过对象层操作 Pyrodigal 预测的基因,而不是将它们写入文件以便稍后解析。

Genes 基因

将找到的基因序列写入文件write_genes

python 复制代码
genes = orf_finder.find_genes(sequence)
with open("genes.fna", "w") as dst:
    genes.write_genes(dst, sequence_id="experiment1")
    
# 或者可以更改FASTA列的宽度
with open("genes.fna", "w") as dst:
    genes.write_genes(dst, sequence_id="experiment1", width=80)

Translations 翻译

将找到的蛋白质序列写入文件write_translations

python 复制代码
genes = orf_finder.find_genes(sequence)
with open("proteins.faa", "w") as dst:
    genes.write_translations(dst, sequence_id="experiment2")
# 同样的,可以指定转换表并控制FASTA列的宽度
with open("proteins.faa", "w") as dst:
    genes.write_translations(dst, sequence_id="experiment2", width=80, translation_table=11)

GFF 格式

将基因写入GFF格式的文件write_gff

python 复制代码
genes = orf_finder.find_genes(sequence)
with open("genes.gff", "w") as dst:
    genes.write_gff(dst, sequence_id="experiment3")
# 可以指定header来选择是否跳过GFF3
# 如果需要将不同序列的基因写入同一文件时,很有用
with open("genes.gff", "w") as dst:
    for i, record in enumerate(Bio.SeqIO.parse("contig.fna")):
        genes = orf_finder.find_genes(str(record.seq))
        genes.write_gff(dst, sequence_id=record.id, header=(i == 0))
# 此外,还可以通过设定参数include_translation_table=True,将翻译表包含在GFF中
# 对于宏基因组模式下可能有用,因为它们是非标准遗传密码预测

GenBank格式

将基因写入Genbank格式的文件write_genbank

python 复制代码
genes = orf_finder.find_genes(sequence)
with open("genes.gbk", "w") as dst:
    genes.write_genbank(dst, sequence_id="seqXYZ")

以上就是本期关于pyrodigal介绍,大家如果有什么问题或疑问的话,请在评论区或私信联系我.如果大家喜欢这期内容,请多多点赞支持,这对我非常重要!

本文由博客一文多发平台 OpenWrite 发布!

相关推荐
bubble小拾3 小时前
ElasticSearch高级功能详解与读写性能调优
大数据·elasticsearch·搜索引擎
ZOHO项目管理软件3 小时前
EDM平台大比拼 用户体验与营销效果双重测评
大数据
HyperAI超神经4 小时前
Meta 首个多模态大模型一键启动!首个多针刺绣数据集上线,含超 30k 张图片
大数据·人工智能·深度学习·机器学习·语言模型·大模型·数据集
Hello.Reader6 小时前
TopK算法在大数据重复数据分析中的应用与挑战
大数据·算法·数据分析
数据龙傲天6 小时前
1688商品API接口:电商数据自动化的新引擎
java·大数据·sql·mysql
Elastic 中国社区官方博客6 小时前
Elasticsearch:使用 LLM 实现传统搜索自动化
大数据·人工智能·elasticsearch·搜索引擎·ai·自动化·全文检索
Jason不在家8 小时前
Flink 本地 idea 调试开启 WebUI
大数据·flink·intellij-idea
Elastic 中国社区官方博客9 小时前
使用 Vertex AI Gemini 模型和 Elasticsearch Playground 快速创建 RAG 应用程序
大数据·人工智能·elasticsearch·搜索引擎·全文检索
CHICX122910 小时前
【Hadoop】改一下core-site.xml和hdfs-site.xml配置就可以访问Web UI
xml·大数据·hadoop
权^10 小时前
MySQL--聚合查询、联合查询、子查询、合并查询(上万字超详解!!!)
大数据·数据库·学习·mysql