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 доп. балла.
Это задание позволит разобраться с тем как доставать нужную информацию из не всегда очень удачных по структуре биологических файлов (коих несчетное множество и не для всех из них имеются специализированные библиотеки). Дополнительный бонус - написанные скрипты можно будет непосредственно использовать в проектах по практикуму!
Удачи! ✨✨