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

相关推荐
君不见,青丝成雪4 小时前
Flink双流join
大数据·数据仓库·flink
好好先森&5 小时前
Linux系统:C语言进程间通信信号(Signal)
大数据
EkihzniY5 小时前
结构化 OCR 技术:破解各类检测报告信息提取难题
大数据·ocr
吱吱企业安全通讯软件6 小时前
吱吱企业通讯软件保证内部通讯安全,搭建数字安全体系
大数据·网络·人工智能·安全·信息与通信·吱吱办公通讯
云手机掌柜6 小时前
Tumblr长文运营:亚矩阵云手机助力多账号轮询与关键词布局系统
大数据·服务器·tcp/ip·矩阵·流量运营·虚幻·云手机
拓端研究室8 小时前
专题:2025全球消费趋势与中国市场洞察报告|附300+份报告PDF、原数据表汇总下载
大数据·信息可视化·pdf
阿里云大数据AI技术10 小时前
MaxCompute聚簇优化推荐功能发布,单日节省2PB Shuffle、7000+CU!
大数据
Lx35213 小时前
Hadoop小文件处理难题:合并与优化的最佳实践
大数据·hadoop
激昂网络14 小时前
android kernel代码 common-android13-5.15 下载 编译
android·大数据·elasticsearch