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

相关推荐
SafePloy安策1 小时前
ES信息防泄漏:策略与实践
大数据·elasticsearch·开源
学术搬运工1 小时前
【珠海科技学院主办,暨南大学协办 | IEEE出版 | EI检索稳定 】2024年健康大数据与智能医疗国际会议(ICHIH 2024)
大数据·图像处理·人工智能·科技·机器学习·自然语言处理
Matrix702 小时前
HBase理论_背景特点及数据单元及与Hive对比
大数据·数据库·hbase
B站计算机毕业设计超人3 小时前
计算机毕业设计Python+大模型农产品价格预测 ARIMA自回归模型 农产品可视化 农产品爬虫 机器学习 深度学习 大数据毕业设计 Django Flask
大数据·爬虫·python·深度学习·机器学习·课程设计·数据可视化
Carl_奕然4 小时前
【大数据算法】MapReduce算法概述之:MapReduce基础模型
大数据·算法·mapreduce
Elastic 中国社区官方博客5 小时前
Elasticsearch 8.16:适用于生产的混合对话搜索和创新的向量数据量化,其性能优于乘积量化 (PQ)
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
飞翔的佩奇5 小时前
ElasticSearch:使用dsl语句同时查询出最近2小时、最近1天、最近7天、最近30天的数量
大数据·elasticsearch·搜索引擎·dsl
2301_769006785 小时前
19名专家被通报批评!国家科技重大专项评审违规!
大数据·人工智能·科技·sci·期刊·ssci
Yz98766 小时前
Kafka面试题
大数据·分布式·zookeeper·kafka·big data
爱搞技术的猫猫10 小时前
实现API接口的自动化
大数据·运维·数据库·性能优化·自动化·产品经理·1024程序员节