Skip to content

Python-BI-2023/HW5_Modules

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 

Repository files navigation

HW 5. Modules

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

Homework description

Прошел целый месяц учебы в ИБ! Вы все большие молодцы (те кто читает этот текст). За этот месяц мы на самом деле многому научились. Что самое главное, много ошибок мы сделали и много из них разобрали. Порой это очень важно - оглянуться назад, еще раз перечитать все комментарии к домашкам, еще раз перечитать свой код... Этим мы и займемся.

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

Состоит из 2-х пунктов. В итоге у вас получится ваш первый настоящий пакет с биоинформатическими утилитами!

  1. Создайте у себя публичный пустой репозиторий для ваших бионф-утилит, назовите как-нибудь по биоинформатически-утилитски. Создайте в нём ОТДЕЛЬНУЮ ВЕТКУ. В рамках этой ветки сделайте всю дальнейшую работу, в конце сделайте pull-request к себе же в main. В этом pull-request'е мы сможем оставить фидбек.

  2. Напишите утилиту для работы с fastq-последовательностями (по аналогии с ДЗ по ДНК/РНК и белкам). Главная функция принимает на вход 4 аргумента: seqs, gc_bounds, length_bounds, quality_threshold:

    • seqs - словарь, состоящий из fastq-сиквенсов. Структура следующая. Ключ - строка, имя последовательности. Значение - кортеж из двух строк: последовательность и качество. По сути это содержание fastq-файла, но мы с вами пока не проходили чтение файлов. Так что пока используем python-словарь. Потом достаточно будет добавить чтение файлов и запись их в словарь такого вида, чтобы всё работало от начала и до конца. В скрипте example_data.py для вас сделан пример для отладки.
    • gc_bounds - интервал GC состава (в процентах) для фильтрации (по-умолчанию равен (0, 100), т. е. все риды сохраняются). Если в аргумент передать одно число, то считается, что это верхняя граница. Примеры: gc_bounds = (20, 80) - сохраняем только риды с GC составом от 20 до 80%, gc_bounds = 44.4 - сохраняем риды с GC составом меньше, чем 44.4%.
    • length_bounds - интервал длины для фильтрации, всё аналогично gc_bounds, но по-умолчанию равен (0, 2**32).
    • quality_threshold - пороговое значение среднего качества рида для фильтрации, по-умолчанию равно 0 (шкала phred33). Риды со средним качеством по всем нуклеотидам ниже порогового отбрасываются.

    По итогам работы главная функция должна возвращать аналогичный словарь, состоящий только из тех сиквенсов, которые прошли все условия. Все описанные интервалы включают и верхнюю, и нижнюю границы. Задание должно быть выполнено без использования сторонных модулей (стандартную библиотеку использовать можно).

    Про fastq-файлы можно посмотреть, например, здесь, про определение качества на основе ASCII-кода можно почитать здесь, также вам может пригодиться таблица кодировки ASCII и функция ord (документация en, ru).

  3. Соберите ДЗ 3, 4, 5 в единый пакет для начинающего биоинформатика. Придумайте название и назовите так главный скрипт. В главном скрипте должно быть всего 3 функции: главная функция ДЗ 3, главная функция ДЗ 4 и главная функция ДЗ 5 (только они должны называться не main, а как то более осмысленно). Все остальные функции импортируются в вашем главном скрипте, но определяться должны где-то в другом месте. Создайте одну (1) папку, где держите весь этот код внутренних функций, сами функции как-нибудь логично разбейте по модулям. В общем, продумайте структуру.

    -/
     |- главный_скрипт.py # (импорты и 3 функции)
     |- README.md
     |- папка/
           |- доп_модуль.py # (ДНК-функции)
           |- доп_модуль_2.py # (белковые функции)
           |- доп_модуль_3.py # (FASTQ-функции)
           |- ...

    Соотвественно подразумевается, что для работы с вашей программой человеку достаточно импортировать главный скрипт и вызвать любую из трех функций из него.

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

Доп. моменты:

  • Сопроводите программу вторым лучшим README.md файлом в вашей жизни (первый лучший был в ДЗ 4).
  • В этом ДЗ качество кода (нейминги, пустые строки, анноатции типов, док.стринги, пробелы) будет сильно влиять на оценку. IDE по типу PyCharm или VSCode имеют фунцонал по авто-исправлению многих проблем такого рода.
  • Автотестов на GitHub в этом ДЗ нет, но вы можете прогнать линтеры на качество кода локально (как в ДЗ №3, подробнее читайте тут).
  • Отсутсвие улучшений по сравнению с версиями в ДЗ 3 и 4 может также привести к доп. потере баллов.

Форма сдачи

Прикрепите ссылку на свой pull-request Google Class.

Pазбалловка

  • За каждую из 3-x фильтраций fastq - 1 балл.
  • За главную функцию fastq-фильтратора - 1 балл.
  • За README - 2 балла
  • За улучшения кода ДНК/РНК и белковых тулов - 1 балла
  • За структуру репозитория и качество кода - 3 балла

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

Это задание позволит вам окончательно закрепить всё то, что мы проходили последние 3 недели. А также даст важный навык - умение читать свой код и исправлять его. Очень часто хочется писать код по принципу "сделал и забыл". Здесь же мы попытаемся заняться итеративной работой над собой и своим продуктом. Иногда это называется умным словом agile.

Удачи! ✨✨

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published