👉 生信软件快看,带你十分钟了解新软件用法,加速你的研究
前言
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 发布!