This is the repo for the sixth homework of the BI Python 2023 course
Современная биоинформатика почти на 100% завязана на работу с файлами. Этим мы с вами в ДЗ 6 и займемся.
Состоит из 2-х пунктов: A и B. Все примеры файлов приложены в папке example_data
.
- В вашем репозитории из ДЗ 5 (ваши биоинформатические утилиты) сейчас есть 2 ветки: main и вторая. Из второй ветки в main направлен pull-request. Перейдите на вторую ветку и начните от её последнего коммита новую третью ветку. По выполнению задания сделайте pull-request из третьей ветки в main.
A) Добработка FASTQ-модуля
-
У нас есть модуль для работы с FASTQ-данными в виде словарей, но в реальной же жизни они приходят к нам в виде FASTQ-файлов. Исправьте главную функцию так, чтобы вместо словаря
seqs
она принимала аргументinput_path
, а также добавьте аргументoutput_filename
. -
Реализуйте функцию для чтения чтения файла по заданному пути и переводу его в знакомый вам словарь. Все остальные функции по-идее уже умеют работать с этим словарем.
-
Реализуйте функцию, которая принимает из главной фунции итоговый результат, а также
output_filename
, и сохраняет отфильтрованные данные в папкуfastq_filtrator_resuls
(ее может не быть) по имениoutput_filename.fastq
. Если параметрoutput_filename
не передан, то вместо него берется имя входного файла. -
Соотвественно в главной функции в начале добавится вызов функции для чтения и в конце добавится вызов функции для записи.
Про fastq-файлы можно посмотреть, например, здесь.
B) Чтение биоинформатических файлов.
-
Создайте в корне вашего репозитория био-утилит новый скрипт -
bio_files_processor.py
. Реализуйте в нем 3 функции: -
Функция
convert_multiline_fasta_to_oneline
.Принимает на вход 2 аргумента (
input_fasta
иoutput_fasta
). Читает поданный на вход fasta-файл, в котором последовательность (ДНК/РНК/белка/ … ) может быть разбита на несколько строк, после чего сохраняет в новый fasta-файл в котором каждая последовательность умещается в одну строку. К имениoutput_fasta
прибавляется расширение.fasta
, при этом сам этот аргумент не обязательный (что делать если его не передали?). -
Функция
select_genes_from_gbk_to_fasta
.В одном из проектов по практикуму вам будет необходимо проанализировать механизм возникновения антибиотикоустойчивости у патогенной кишечной палочки. Один из способов анализа - это достать из gbk аннотации гены, фланкирующие гены антибиотикоустойчивости, и после - забластить их. Особенно удобно тут то, что BLAST может принимать множество последовательностей для поиска за раз. Допустим у вас имеется аннотация генома E. coli в которой есть несколько генов интереса. Теперь вы хотите выделить какое-то количество генов до и после каждого из гена интереса и сохранить их белковую последовательность (translation) в fasta-файл. Такой fasta-файл можно будет прямо в явном виде отправить на вход BLAST чтобы анализировать интересующие вас механизмы.
Принимает на вход следующие аргументы:
input_gbk
- путь до входного GBK файла.genes
- гены интереса, рядом с которыми ищутся соседи. Имейте ввиду, что в gbk название гена может включать дополнительные символы (подсказка)n_before
,n_after
- количество генов до и послe (>0). Дефолтные значения -1
.output_fasta
- название выходного файла. К имени прибавляется расширение.fasta
, при этом сам этот аргумент не обязательный (что делать если его не передали?).
C) Доп. задание
Доп_1. Функция change_fasta_start_pos
.
Принимает на вход 3 аргумента (input_fasta
, shift
и output_fasta
). Аргумент shift
- целое число (может быть отрицательным) - то на сколько надо сдвинуть начальную позицию в файле. Здесь считаем что на вход подается однострочная fasta с всего одной записью. Это может быть нужно при работе с прокриотами, у которых кольцевой геном в случае если он не очень верно проаннотирован.
# Ввод (содержимое файла)
# >Genome
# ATCG
change_fasta_start_pos(Ввод, 2, output_fasta)
# >Genome
# CGAT (второй нуклеотид справа стал первым)
change_fasta_start_pos(Ввод, -1, output_fasta)
# >Genome
# GATC (первый нуклеотид слева стал первым)
Доп_2. Функция parse_blast_output
.
Принимает на вход 2 аргумента (input_file
, output_file
).
Второе удобство описанного в пункте B.3 метода заключается в том, что можно не бегать глазами по страничке результатов бласта, а скачать их в нужном вам виде (txt, csv, json, … ) и проанализировать их программно. Это очень удобно при потоковом анализе! Допустим что вы уже выделили интересующие вас последовательности белков и отправили в BLAST. Теперь вы хотите по каждой последовательности вытащить название наилучшего совпадения с базой и сохранить все результаты в одном месте. Для отладки предлагается забластить файл полученный в прошлом задании и скачать результаты в виде txt, однако вы можете использовать и уже готовый файл
example_blast_results.txt
.
Программа читает заданный txt файл, для каждого запроса QUERY (абзац Sequences producing significant alignments:
) выбрать по первой строке из столбца Description
. Набор полученных белков сохранить в новый файл одним столбцом отсортированным по алфавиту. Аргументы программы:
input_file
- путь до входного txt файла.output_file
- название выходного файла. Подумайте что можно было бы сделать при пропуске пользователем этого параметра.
- Можно использовать только стандартную библиотеку. При чтении подобных биологических файлов в будущем можно будет найти соответствующие библиотеки (например biopython), однако сейчас лучше парсить их в список списков или список словарей - так вы лучше разберетесь с “голым” чтением файлов, что будет полезным если соответствующие библиотеки будут отсутсвовать.
- Функция
convert_multiline_fasta_to_oneline
чуть более алгоритмическая задачка, советую сперва продумать как правильно читать файл, мб нарисуйте это на листочке. Функцияparse_blast_output
чуть более про доставание нужной информации. Тут мб советую помедитировать над входным файлом. - Автотестов на GitHub в этом ДЗ нет, но вы можете прогнать линтеры на качество кода локально (как в ДЗ №3, подробнее читайте тут).
Прикрепите ссылку на свой pull-request Google Class.
- За чтение и запись FASTQ - 2 балла
- За
convert_multiline_fasta_to_oneline
- 4 балла - За
select_genes_from_gbk_to_fasta
- 4 балла - За доп. функции - по 2 доп. балла.
Это задание позволит разобраться с тем как доставать нужную информацию из не всегда очень удачных по структуре биологических файлов (коих несчетное множество и не для всех из них имеются специализированные библиотеки). Дополнительный бонус - написанные скрипты можно будет непосредственно использовать в проектах по практикуму!
Удачи! ✨✨