工具篇|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来进行快速安装

$ pip install pyrodigal

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

$ conda install -c bioconda pyrodigal

基础用法

基于Biopython的用法

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

使用方法:pyrodigal.GeneFinder()

单一基因组输入

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))

宏基因组输入

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的用法

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方法的详细用法与参数见文档:https://pyrodigal.readthedocs.io/en/stable/api/index.html

输出格式

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

Genes 基因

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

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

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

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

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


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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容