Нахождение процентного сходства строк - PullRequest
0 голосов
/ 04 мая 2019

Я бы хотел найти количество совпадений между двумя строками, чтобы можно было вычислить процент сходства.Я хотел бы сделать это без необходимости загружать что-либо, поскольку это доставило мне неприятности.Я попытался загрузить zip-файл biopython и не смог понять, как его настроить.Я хотел бы, чтобы что-то, что я мог превратить в функцию, было бы легко использовать для различных последовательностей.Не нужно иметь возможность обрабатывать что-либо более, чем, скажем, 50 символов в строке.

Последовательности, которые я пытаюсь сравнить:

virX = 'TTTTCTTATTGT'
virZ = 'GTGGCAGACGGT'
virY = 'CTTCCTCACCGA'
virU = 'ATTACCAAAAGA'

выходы, которые я ищу: 1) процентное сходство между каждой последовательностью 2) две последовательности с наибольшим сходством

Это сработало, но для адаптации к другим последовательностям требуется много времени:

dnaA = 'ATATGCC'
dnaB = 'AAAGCGC'

count = 0
if dnaA[0] == dnaB[0]:
    count +=1
if dnaA[1] == dnaB[1]:
    count +=1
if dnaA[2] == dnaB[2]:
    count +=1
if dnaA[3] == dnaB[3]:
    count +=1
if dnaA[4] == dnaB[4]:
    count +=1
if dnaA[5] == dnaB[5]:
    count +=1
if dnaA[6] == dnaB[6]:
    count +=1

print(count, (count / len(dnaA) * 100), '%')

Я попробовал это, но это не сработало:

count = 0
for i in dnaA:
    if i == dnaB[i]:
        count += 1

Я попробовал это:

from itertools import izip
def hamming_distance(str1, str2):
    assert len(str1) == len(str2)
    return sum(chr1 != chr2 for chr1, chr2 in izip(str1, str2))

print(hamming_distance(dnaA, dnaB))

, который возвратил ошибку:

"Traceback (последний вызов был последним): файл" C: / Users / mac03 / AppData / Local / Programs / Python / Python37 /Wk5FriLab.py ", строка 79, из itertools import izip ImportError: невозможно импортировать имя 'izip' из 'itertools' (неизвестное местоположение)"

Я попытался изменить izip на zipэто не сработало.Я также попробовал эту функцию в записной книжке jupyter, и мне было выдано сообщение об ошибке:

"ImportError Traceback (последний вызов был последним) в 5 6 ----> 7 из itertools import zip 8 def hamming_distance (str1, str2): 9 assent len ​​(str1) == len (str2)

ImportError: невозможно импортировать имя 'zip' из 'itertools' (неизвестное местоположение) "

Iпробовал эти входные данные и также получал ошибки:

python -m ensurepip

"Файл" ", строка 6 python -m surepip I'm ^ SyntaxError: неверный синтаксис"

pip install pip --upgrade

"Файл" ", пункт 7 pip, установка pip --upgrade ^ SyntaxError: неверный синтаксис"

pip install biopython

"Файл" ", строка 7 pip install biopython^ SyntaxError: неверный синтаксис "

Ответы [ 2 ]

0 голосов
/ 04 мая 2019
dnaA = 'ATATGCC'
dnaB = 'AAAGCGC'
matches = [
    nucl_A == nucl_B
    for nucl_A, nucl_B in zip(dnaA, dnaB)
]
similarity = sum(matches)/len(matches)
similarity

Результат: 0.42857142857142855

Как функция:

def hamming_dist(gene_a, gene_b):  
    matches = [
        nucl_a == nucl_b
        for nucl_a, nucl_b in zip(gene_a, gene_b)
    ]
    return sum(matches)/len(matches)
0 голосов
/ 04 мая 2019

Попробуйте это для вычисления "количества" (я предположил, что длина строк равна):

dnaA = 'ATATGCC'
dnaB = 'AAAGCGC'
count = 0
indexB = 0
for i in dnaA:
  if i == dnaB[indexB]:
    count +=1
  indexB +=1
...