Учебная страница курса биоинформатики,
год поступления 2015
Ещё немного о BioPython
Сегодня мы разберем, как работать с файлами аннотаций и как изнутри программы скачивать данные из ncbi. Более подробно см. документацию BioPython:
http://biopython.org/DIST/docs/tutorial/Tutorial.html
Работа с файлами GenBank
Из предыдущего занятия мы знаем, что последовательности обрабатываются как объекты класса Seq. Для обработки аннотированных последовательностей есть класс SeqRecord, который кроме собственно последовательности умеет хранить информацию о разных биологических объектах, содержащихся в этой последовательности: генах, сайтах и пр. Аннотации часто хранятся в формате GenBank, и BioPython умеет с этим форматом работать. Допустим, у нас есть аннотированный геном бактерии Bacillus subtilis. Прочтем его.
Теперь пройдемся по всем аннотированным участкам (feature) и посмотрим, каких типов они бывают.
У каждого объекта feature класса Feature есть его положение – feature.location, – в котором записаны его начало, конец и цепь, на которой он лежит. Кроме того, у каждой feature в feature.qualifiers лежит словарь, где ключами являются все те поля, которые были в файле. Например, у некоторого гена были поля: /gene="dnaN" /locus_tag="BSU00020" /db_xref="GeneID:939970". Тогда словарь feature.qualifiers будет выглядеть так: {"gene":"dnaN", "locus_tag":"BSU00020", "db_xref":"GeneID:939970"}
Доступ к NCBI из Biopython
Бывает удобно скачивать информацию из баз NCBI на лету, внутри кода программы. Плохая новость: много так не накачаешь – они трепетно отслеживают частоту и объемы скачиваний и банят за превышения. Хорошая новость: биопитон эти ограничения знает и частично сам отслеживает. Нам понадобится подпакет Entrez. При подключении необходимо представиться: на этот адрес ncbi будет слать гневные письма, прежде чем забанить.
1. Доступные базы данных.
Получим список доступных баз данных:
Здесь record – словарь с единственным параметром.
2. Подключение к БД и поиск в ней
Давайте подключимся к PubMed и узнаем размер базы и дату последнего обновления (здесь и далее строки про import и email пропущены):
Теперь найдем число статей про Last Universal Common Ancestor (LUCA) – нам потребуется функция esearch()
Параметр term – что, собственно, искать. По умолчанию Entrez записывает в IdList только 20 находок, это регулируется параметром RetMax. Достанем идентификаторы всех статей Кунина за 2014 год.
Все возможные поля поиска можно посмотреть так:
3. Скачивание из БД
Чтобы что-то скачать, понадобится функция efetch(). Список параметров можно посмотреть по ссылке. Давайте скачаем одну из статей про LUCA по её идентификатору.
Здесь скачается не вся статья, и даже не всегда абстракт – только базовая информация о публикации. Обратите внимание на разницу между handle.read() и Entrez.read(handle). Первое читает обычный текст, второе парсит XML. По умолчанию все ответы приходят в формате XML.
Теперь скачаем все последовательности гена rpl16 из опунций.
Полученный файл можно сразу скормить модулю Seq:
Запрос можно уточнять и прописывать отдельные поля: term="Opuntia[ORGN] AND rpl16[GENE]". Ну а как посмотреть все существующие поля с из описаниями, вы уже знаете.