Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

HW 6. Files

This is the repo for the sixth homework of the BI Python 2023 course

Homework description

Современная биоинформатика почти на 100% завязана на работу с файлами. Этим мы с вами в ДЗ 6 и займемся.

Основное задание

Состоит из 2-х пунктов: A и B. Все примеры файлов приложены в папке example_data.

  1. В вашем репозитории из ДЗ 5 (ваши биоинформатические утилиты) сейчас есть 2 ветки: main и вторая. Из второй ветки в main направлен pull-request. Перейдите на вторую ветку и начните от её последнего коммита новую третью ветку. По выполнению задания сделайте pull-request из третьей ветки в main.

A) Добработка FASTQ-модуля

  1. У нас есть модуль для работы с FASTQ-данными в виде словарей, но в реальной же жизни они приходят к нам в виде FASTQ-файлов. Исправьте главную функцию так, чтобы вместо словаря seqs она принимала аргумент input_path, а также добавьте аргумент output_filename.

  2. Реализуйте функцию для чтения чтения файла по заданному пути и переводу его в знакомый вам словарь. Все остальные функции по-идее уже умеют работать с этим словарем.

  3. Реализуйте функцию, которая принимает из главной фунции итоговый результат, а также output_filename, и сохраняет отфильтрованные данные в папку fastq_filtrator_resuls (ее может не быть) по имени output_filename.fastq. Если параметр output_filename не передан, то вместо него берется имя входного файла.

  4. Соотвественно в главной функции в начале добавится вызов функции для чтения и в конце добавится вызов функции для записи.

Про fastq-файлы можно посмотреть, например, здесь.

B) Чтение биоинформатических файлов.

  1. Создайте в корне вашего репозитория био-утилит новый скрипт - bio_files_processor.py. Реализуйте в нем 3 функции:

  2. Функция convert_multiline_fasta_to_oneline.

    Принимает на вход 2 аргумента (input_fasta и output_fasta). Читает поданный на вход fasta-файл, в котором последовательность (ДНК/РНК/белка/ … ) может быть разбита на несколько строк, после чего сохраняет в новый fasta-файл в котором каждая последовательность умещается в одну строку. К имени output_fasta прибавляется расширение .fasta, при этом сам этот аргумент не обязательный (что делать если его не передали?).

  3. Функция 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.

Pазбалловка

  • За чтение и запись FASTQ - 2 балла
  • За convert_multiline_fasta_to_oneline - 4 балла
  • За select_genes_from_gbk_to_fasta - 4 балла
  • За доп. функции - по 2 доп. балла.

Предполагаемый учебный результат

Это задание позволит разобраться с тем как доставать нужную информацию из не всегда очень удачных по структуре биологических файлов (коих несчетное множество и не для всех из них имеются специализированные библиотеки). Дополнительный бонус - написанные скрипты можно будет непосредственно использовать в проектах по практикуму!

Удачи! ✨✨

About

This is the repo for the sixth homework of the BI Python 2023 course

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages