工具篇|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 发布!

相关推荐
藦卡机器人9 小时前
中国工业机器人发展现状
大数据·人工智能·机器人
Simon_lca9 小时前
突破合规瓶颈:ZDHC Supplier to Zero(工厂零排放 - 进阶型)体系全攻略
大数据·网络·人工智能·分类·数据挖掘·数据分析·零售
黄焖鸡能干四碗11 小时前
网络安全建设实施方案(Word文件参考下载)
大数据·网络·人工智能·安全·web安全·制造
云境筑桃源哇12 小时前
马踏春风 为爱启航 | 瑞派宠物医院(南部新城旗舰店)盛大开业!打造宠物医疗新标杆!
大数据·宠物
xixixi7777713 小时前
2026 年 03 月 20 日 AI+通信+安全行业日报(来更新啦)
大数据·人工智能·安全·ai·大模型·通信
F36_9_13 小时前
大数据治理平台选型避坑:2026 年 8 大主流系统实测
大数据·数据治理
成长之路51413 小时前
【实证分析】A股上市公司企业劳动力需求数据集(2000-2023年)
大数据
奔跑的呱呱牛13 小时前
GeoJSON 在大数据场景下为什么不够用?替代方案分析
java·大数据·servlet·gis·geojson
Lab_AI13 小时前
电池材料行业数据管理新突破:AI4S驱动的科学数据平台正在重塑电池材料开发范式
大数据·人工智能·ai4s·电池材料开发·电池材料研发·电池材料创新·ai材料研发
FindAI发现力量14 小时前
智能工牌:线下销售场景的数字化赋能解决方案
大数据·人工智能·销售管理·ai销售·ai销冠·销售智能体