Добро пожаловать обратно! Сегодня мы продолжаем работать над нашим проектом DNA Toolkit. В нашей последней статье мы создали первые две функции: validate_seq и нуклеотидная_частота. Файловую структуру менять не собираемся, но добавим еще две функции и одну структуру данных. Функции, которые мы добавим сегодня, наконец-то воспроизведут реальный биологический процесс. ДНК в РНК Транскрипция и генерация Комплемента (Обратный комплемент для вычислительных целей).

ДНК — это удивительный способ хранения инструкций природой, это биологический код. Он эффективен для вычислительного использования двумя способами. Во-первых, имея всего одну нить ДНК, мы можем создать другую цепочку, используя правило комплемента, а во-вторых, эти данные очень сжимаемы. Мы рассмотрим сжатие данных ДНК в наших будущих статьях/видео.

На двух изображениях ниже мы видим эти три шага:

  • Генерация комплемента ДНК.
  • ДНК -> Транскрипция РНК.
  • РНК -> Полипептид -> Трансляция белков.

В этой статье мы реализуем первые два шага, отмеченные цифрами 1 и 2 на втором изображении.

Начнем с добавления одной новой структуры DNA_ReverseComplement в наш файл structures.py в качестве словаря Python. Этот словарь будет использоваться, когда мы пройдемся по цепочке ДНК, нуклеотид за нуклеотидом. Затем словарь вернет дополнительный нуклеотид. Этот подход легко понять, так как мы просто использовали словарь и цикл for. Существует более питоновский способ генерации строки дополнения, который обсуждается позже.

Теперь давайте добавим функцию, которая будет использовать этот словарь, чтобы дать нам комплементарную цепь ДНК и обратить ее.

Здесь мы используем списковое понимание для перебора каждого символа в строке, сопоставляя его с ключом в DNA_ReverseComplement словаре чтобы получить значение из этого словаря. Когда у нас есть новый сгенерированный список комплементарных нуклеотидов, мы используем метод ''.join, чтобы склеить все символы в строку и перевернуть ее с помощью [::-1].

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

Давайте попробуем использовать Pythonic, метод maketrans, чтобы решить эту проблему, даже не используя словарь.

Строковый метод Python maketrans() возвращает таблицу перевода, которая сопоставляет каждый символ во внутренней строке с символом в той же позиции в исходной строке. Затем эта таблица передается функции translate().
Примечание. И intab, и outtab должны иметь одинаковую длину.

Вы можете узнать больше об этом методе здесь: Метод maketrans() Python String

Далее мы определяем функцию транскрипции. Это очень простой однострочный код на Python:

Этот код не требует пояснений, поскольку пока мы используем стандартную функциональность языка Python. Здесь мы просто находим тимин и заменяем его урацилом.

Вы могли заметить, что мы начали использовать интересный подход к комментированию кода. Мы оборачиваем наши комментарии в:

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

Это оно. Мы закончили реализацию наших двух новых функций. Давайте проверим их, добавив выходные данные обоих в наш файл main.py. Мы снова будем использовать f-строки, чтобы красиво отформатировать вывод.

Итак, вот результат для всех 4 функций, которые мы реализовали до сих пор:

В качестве бонуса я добавил цвета в наш код в новый файл: utilites.py. Это не связано с биоинформатикой, но если вы хотите попрактиковаться в Python и добавить подобную функцию, вы можете просмотреть видеоверсию DNA Toolkit. Часть 2, чтобы увидеть, как это делается. В будущем мы добавим в utilites.py еще много вспомогательных функций. Функции для чтения/записи файлов, чтения/записи баз данных и т. д.

Ссылка на GitLab: https://gitlab.com/RebelCoder/dna-toolset

Видеоверсию этой статьи можно посмотреть здесь:

Это все на данный момент. Увидимся в следующей статье.