scikit-био экстракт геномных особенностей из файла gff3

Возможно ли в scikit-bio извлечь геномные элементы, хранящиеся в файле в формате gff3, из файла генома fasta?

Пример:


genome.fasta

>sequence1
ATGGAGAGAGAGAGAGAGAGGGGGCAGCATACGCATCGACATACGACATACATCAGATACGACATACTACTACTATGA

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

Желаемая последовательность для функции мРНК (транскрипт1) будет сочетать две дочерние функции CDS. Так что в этом случае это будет 'ATGGAGCTATGA',

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

Следуя примеру, приведенному в файле, должен работать следующий код:

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)

Для меня это поднимает 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'})

В примере в коде GFF3 и файл FASTA объединяются во входной строке, используемой для функции чтения. Может быть, это может решить эту проблему. Также я не уверен на 100%, как вы можете использовать возвращенные интервалы для извлечения функции.

Другие вопросы по тегам