来自gff3文件的scikit-bio extract基因组特征

hol*_*ser 7 python bioinformatics python-3.x skbio

scikit-bio是否有可能从基因组fasta文件中提取存储在gff3格式文件中的基因组特征?

例:


genome.fasta

>sequence1
ATGGAGAGAGAGAGAGAGAGGGGGCAGCATACGCATCGACATACGACATACATCAGATACGACATACTACTACTATGA
Run Code Online (Sandbox Code Playgroud)

annotation.gff3

#gff-version 3
sequence1   source  gene    1   78  .   +   .   ID=gene1
sequence1   source  mRNA    1   78  .   +   .   ID=transcript1;parent=gene1
sequence1   source  CDS 1   6   .   +   0   ID=CDS1;parent=transcript1
sequence1   source  CDS 73  78  .   +   0   ID=CDS2;parent=transcript1
Run Code Online (Sandbox Code Playgroud)

mRNA特征(转录物1)的所需序列将是两个子CDS特征的连接.所以在这种情况下,这将是'ATGGAGCTATGA'.

m00*_*0am 1

该功能已添加到 scikit-bio 中,但 bioconda 中的可用版本尚不支持该功能 (2017-12-15)。gff3 的格式文件存在于Github 存储库中中。

您可以克隆存储库并使用以下命令在本地安装:

$ git clone https://github.com/biocore/scikit-bio.git
$ cd scikit-bio
$ python setup.py install
Run Code Online (Sandbox Code Playgroud)

按照文件中给出的示例,以下代码应该可以工作:

import io
from skbio.metadata import IntervalMetadata
from skbio.io import read

gff = io.StringIO(open("annotations.gff3", "r").read())
im = read(gff, format='gff3', into=IntervalMetadata, seq_id="sequence1")

print(im)
Run Code Online (Sandbox Code Playgroud)

对我来说,这会引发一个FormatIdentificationWarning,但条目报告正确:

4 interval features
-------------------
Interval(interval_metadata=<140154121000104>, bounds=[(0, 78)], fuzzy=[(False, False)], metadata={'source': 'source', 'type': 'gene', 'score': '.', 'strand': '+', 'ID': 'gene1'})
Interval(interval_metadata=<140154121000104>, bounds=[(0, 78)], fuzzy=[(False, False)], metadata={'source': 'source', 'type': 'mRNA', 'score': '.', 'strand': '+', 'ID': 'transcript1', 'parent': 'gene1'})
Interval(interval_metadata=<140154121000104>, bounds=[(0, 6)], fuzzy=[(False, False)], metadata={'source': 'source', 'type': 'CDS', 'score': '.', 'strand': '+', 'phase': 0, 'ID': 'CDS1', 'parent': 'transcript1'})
Interval(interval_metadata=<140154121000104>, bounds=[(72, 78)], fuzzy=[(False, False)], metadata={'source': 'source', 'type': 'CDS', 'score': '.', 'strand': '+', 'phase': 0, 'ID': 'CDS2', 'parent': 'transcript1'})
Run Code Online (Sandbox Code Playgroud)

在代码示例中,GFF3 和 FASTA 文件连接在用于读取函数的输入字符串中。也许这可以解决这个问题。另外,我也不是 100% 确定如何使用返回的间隔来提取特征。