Skip to content

Python-BI-2023/HW6_Files

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

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

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages