Найдите самую частотную последовательность среди других последовательностей

Мне дали 10 последовательностей ДНК, каждая из которых состоит из 18 оснований, и меня попросили написать программу, которая вычисляет наиболее часто встречающуюся последовательность (консенсус) среди всех этих последовательностей. Например, допустим, у меня есть "ACTGGA", "ACCAAT", "CTTAGG", "ATGAAG"

Консенсусной последовательностью будет «A (CT) TA (GA) G», потому что в первой базовой позиции каждой последовательности «A» встречается 3/4 раза. Для второй базовой позиции каждой последовательности у меня есть 2 последовательности с «C» и 2 последовательности с буквой «Т». Пока что моя консенсусная последовательность выглядит как A(CT), потому что я установил, что «A» встречается в 75% случаев в позиции 1, а для позиции 2 существует 50-50% вероятность появления «T» или «C» и т. д. Итак, я включу "C" и "T" во вторую позицию моего Консенсуса. Теперь я пытаюсь сделать это на питоне, используя pycharm, хотя я не очень хорошо с ним знаком. Я просто хотел подтолкнуть себя к изучению чего-то нового. Моя проблема в том, что когда я читаю текстовый файл в массив numpy следующим образом:

seq_array = np.asarray(list(map(str.strip, seq)))

В итоге мой массив равен 1d, как (10,) вместо (10,18), поэтому я не могу перебирать каждую строку и столбец, чтобы подсчитать каждый символ. Итак, как мне прочитать файл в размере 2d (10,18)? и вместо повторения каждого seq_array[r][c] есть ли более быстрый способ добраться до наиболее частой последовательности?


person Notoriousphd    schedule 28.12.2019    source источник
comment
Что такое seq? Список строк?   -  person Iain Shelvington    schedule 29.12.2019
comment
Что вы хотите, чтобы произошло в конфликте? (2 или более базы появляются одинаковое количество раз в позиции)   -  person Iain Shelvington    schedule 29.12.2019
comment
seq относится к with open("DNAsequences.txt","r") as seq: . Единственный конфликт, о котором я могу думать, это иметь 2 из 4 оснований в одном и том же положении для 5 и 5 последовательностей соответственно, например, первые 5 последовательностей в положении 1/18 начинаются с A, а другие 5 в положении 1/18 начинаются с C. В в этом случае я хочу, чтобы обе последовательности были как можно более частыми.   -  person Notoriousphd    schedule 29.12.2019
comment
Неясно, какова частота последовательности, поскольку она состоит из оснований, каждая из которых имеет свою собственную частоту. Не могли бы вы лучше определить, что вы подразумеваете под первым? Некоторые примеры данных и код, определяющий значение, также были бы очень полезны…   -  person martineau    schedule 29.12.2019
comment
Я бы с радостью предоставил некоторый код, но проблема в том, что у меня его еще нет, так как я застрял в самом начале. Простите меня за то, что я не использовал соответствующую терминологию раньше, но теперь я обновил исходный пост.   -  person Notoriousphd    schedule 29.12.2019


Ответы (1)


Проблема, с которой вы столкнулись при создании многомерного массива:

list(map(str.strip, seq))  # Returns a list of strings

list(map(list, map(str.strip, seq)))  # Will return a list of lists

seq_array = np.asarray(list(map(list, map(str.strip, seq))))
person Iain Shelvington    schedule 28.12.2019