Как найти закономерности в данных биологической последовательности

Регулярные выражения (regex) в Python могут быть использованы для поиска шаблонов в генетике. Мы можем использовать регулярное выражение при анализе данных биологической последовательности, так как очень часто мы ищем шаблоны в ДНК, РНК или белках. Эти типы данных последовательности представляют собой просто строки и поэтому прекрасно подходят для анализа шаблонов с использованием регулярных выражений. Нас может заинтересовать поиск: нуклеотидных повторов, ответственных за заболевания человека, сайтов связывания факторов транскрипции ДНК, сайтов разрезания рестрикционных ферментов и специфических мутаций. Чтобы иметь возможность использовать регулярное выражение для достижения этой цели, мы должны сначала понять базовый синтаксис регулярного выражения и некоторые функции, специфичные для модуля регулярного выражения. В первом разделе этого руководства в примерах будут использоваться 4 нуклеотида ДНК; A, T, G и C.

Это короткое руководство направлено на:

1. Представьте синтаксис регулярных выражений с примерами, специфичными для генетики.

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

Регулярные выражения

Следующие символы являются специальными в регулярных выражениях: $ ^. * +? {} [] | \ и показаны в таблице 1 с соответствующим описанием. Метасимволы ^ и $ известны как якоря и представляют позиции во входной строке. ^ Соответствует началу строки, а знак $ соответствует концу строки. Шаблон ^ CCC будет соответствовать CCCGGG, но не GGGCCC. Шаблон AAA $ будет соответствовать TTTAAA, но не AAAGGG.

А. точка (или десятичная точка) - это подстановочный знак, который находит любой символ. Если протеинкиназа имеет консенсусную последовательность «RXYVHXFDEXK», где X обозначает любую аминокислоту, то регулярное выражение «R.YVH.FDE.K» будет успешным в поиске субстратов. Однако предупреждение, точка (.), Будет соответствовать любому символу, который даже не является буквой. Следовательно, шаблон «R.YVH.FDE.K» будет соответствовать «R8YVH £ FDE & K», что может быть не тем, что нам нужно.

Метасимволы, *, +,? И {} являются операторами квантификатора. Они используются для указания повторений символа или группы символов. Звездочки после символа или группы означают, что этот символ или группа не являются обязательными, но также могут повторяться. Примером в области генетики, где будет использоваться метасимвол звездочки, может быть случай, когда мы ищем через чтение RNA-seq, чтобы найти последовательности, которые 3’-полиаденилированы, путем поиска AAAAAA * $. Это регулярное выражение найдет ровно 5 A, за которыми следует ноль или более A. Метасимвол + похож на *, за исключением того, что он находит символ один или несколько раз. А? находит предыдущий символ или группу символов ноль или один раз.

Если требуется конкретизация или соответствие определенному количеству повторов, мы можем использовать обозначение фигурных скобок. Одно число в фигурных скобках будет точно соответствовать количеству повторов в предыдущем символе или группе. Например, CA {3} GATT будет соответствовать CAAAGATT, но не CAAGATT или CAAAAGATT. Чтобы указать диапазон, мы можем использовать тот же синтаксис фигурных скобок и общий шаблон, где {n, x} находит предыдущий символ или группу между n и x раз включительно. Например, TCG {2, 4} A будет соответствовать шаблонам TCGGA, TCGGGA, TCGGGA, но не TCGA или TCGGGGGA. Сводку этих метасимволов можно найти в таблице 1.

По шаблону

Модуль re используется для написания регулярных выражений (regex) в Python. Чтобы загрузить этот модуль, нам нужно использовать оператор импорта. Следующую строку кода необходимо включить в начало кода:

импорт re

Чтобы использовать инструмент из модуля регулярных выражений, необходимо поставить перед ним имя модуля. Самая простая функция регулярного выражения, re.search (), определяет, существует ли шаблон где-то в строке. re.search () принимает 2 аргумента, оба являются строками. Первый аргумент - это шаблон, который вы хотите найти, а второй аргумент - это строка, в которой вы хотите выполнить поиск. Для ясности в приведенном ниже примере я включил 2 аргумента в качестве аргументов ключевого слова. Обычно нет необходимости включать эти ключевые аргументы. Для полноты я включил альтернативную синтаксическую версию с комментариями.

Простой пример проиллюстрирован в приведенном ниже коде; здесь мы ищем наличие трехнуклеотидного повтора оснований A в пределах жестко закодированной переменной ДНК.

Результатом многих вызовов функций re является соответствующий объект. Если мы посмотрим на объект соответствия выше, мы можем определить, было ли совпадение. Диапазон определяет индекс строки, в которой произошло совпадение, а совпадение определяет точную строку, которая была сопоставлена.

Поиск по регулярному выражению также может использоваться как часть условного оператора:

Извлечение значений объектов соответствия

Часто в наших скриптах мы хотим не только определить, произошло ли совпадение, но и где точно произошло это совпадение. Мы также можем извлечь совпадение само. К счастью, Python упрощает извлечение значений объектов соответствия, таких как позиции индекса соответствия и точная строка, которая соответствует. Этого можно добиться, применив несколько методов к объекту сопоставления.

Чередование и группы символов

re.search () также можно использовать для поиска более гибких шаблонов. В качестве примера рестрикционный фермент NCII распознает образец нуклеотидной последовательности, CCSGG, где нуклеотидный код S может быть либо C, либо G. переделка. Здесь, чтобы представить несколько различных альтернатив, мы записываем альтернативы в круглых скобках и разделяем их вертикальной чертой (метасимвол | также известен как оператор выбора, см. Таблицу 1).

Полезность групп чередования проистекает из их способности использоваться в качестве единиц повторения. Например, чтобы определить, ограничена ли последовательность стартовым и стоп-кодоном и, следовательно, потенциально может быть открытой рамкой считывания, мы могли бы написать следующее выражение регулярного выражения:

Это регулярное выражение будет искать UAA, UAG и UGA в конце последовательности. Чтобы улучшить это регулярное выражение и убедиться, что стартовый и стоп-кодон находятся в одном кадре, мы могли бы изменить регулярное выражение на:

Это проверяет, что все символы между стартовым и стоп-кодоном кратны 3.

Группы персонажей

Группы символов также можно использовать для фиксации вариаций в пределах одного паттерна. Рассмотрим консенсусный сайт N-гликозилирования в белках. Этот мотив последовательности имеет узор; Asn, за которым следует все, кроме Pro, за которым следует Ser или Thr, за которым следует все, кроме Pro.

Используя соответствующие однобуквенные коды аминокислот с группами символов, мы можем записать этот шаблон следующим образом:

Этот шаблон идентифицирует однобуквенный код N, за которым следует любой символ, не являющийся P (см. Таблицу 1, группы инвертированных символов), за которым следует S или T, за которым следует любой символ, не являющийся P. Пара квадратных скобок со списком символов внутри них может представлять любой один из этих символов (см. Таблицу 1).

Возможности регулярных выражений

Настоящая мощь регулярных выражений раскрывается, когда эти инструменты используются вместе. Рассмотрим следующий сценарий. Многие наследственные нейродегенеративные заболевания человека, такие как болезнь Хантингтона (БХ), были связаны с аномальным увеличением количества тринуклеотидных повторов в определенных генах. Патологическая тяжесть HD коррелирует с количеством (CAG) n повторов в экзоне-1 гена htt, который кодирует белок хантингтон. При болезни Хантингтона большее количество повторов означает более раннее начало болезни и более быстрое ее прогрессирование. Кодон CAG определяет глутамин, а HD относится к широкому классу полиглутаминовых заболеваний. Здоровые (дикого типа) варианты этого гена имеют от 6 до 35 тандемных повторов, тогда как более 35 повторов практически гарантируют заболевание.

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

Codon CAA также кодирует глутамин, поэтому в htt_pattern выше мы должны использовать | оператор чередования. Затем мы можем использовать обозначение фигурных скобок, описанное выше, чтобы указать, сколько раз мы хотим найти этот шаблон. Здесь я выбрал 18 или более раз, сознательно выйдя за пределы верхнего предела.

Сначала я поискал в базе данных нуклеотидов NCBI последовательность мРНК htt и загрузил ее в свой рабочий каталог. Затем я прочитал эту последовательность и использовал свой шаблон для определения длины тандемных повторов глутамина, которые превышают 18. Для ясности я выделил совпадение в файле NCBI FASTA. Я также использовал функцию re.findall (), поскольку re.search () найдет только первое вхождение, и в этом случае возможно, что будет найдено много совпадений.

Вывод:

В этом руководстве содержится краткое введение в то, как регулярное выражение может применяться конкретно в генетике. Знания в регулярных выражениях легко переносимы, в частности, синтаксические формы и функциональность ведут себя примерно одинаково в Python и во многих других основных языках программирования, таких как Perl и R.