Python tiene creada una función llamadavalues() que nos da los valores de un diccionario y de igual manera hay otra que se llama max() La cual es usada para encontror el número máximo en una lista. Con estas 2 usaremos para encontrar el el máximo patrón de bases nitrogenadas repetidas en un texto.
se usaría de la siguiente manera, mezclando ambas funciones:
m = max(freq.values)
- Para poder resolver esto debemos crear una nueva función, en este caso se le puso FrequentWords en términos de texto y del K mer (k).
- Creamos una lista llamda words vacía, en la que almacenaremos el patrón o patrones que más se repiten.
- A la función creada anteriormente llamada Frecuencymap, la guardamos en una variable, en este caso le pusimos freq.
- Usaremos la mezcla de las funciones values y max, que es m = max(freq.values()). El freq.values, nos da una lista de los valores de la variable freq.
- Realizamos un for que recorrerá cada valor de la variable freq, cada varlo recorrido será guardado en en variable key
- Con la condicion if compraremos cada valor del key con la función máxima “m”, para ver si es el maximo.
- Si es el máximo se agregará a la lista words.
Usaremos el mísmo texto que en el ejercicio anterior para poder verificar nuestro resultado
In [12]:
Text = 'ATCAATGATCAACGTAAGCTTCTAAGCATGATCAAGGTGCTCACACAGTTTATCCACAACCTGAGTGGATGACATCAAGATAGGTCGTTGTATCTCCTTCCTCTCGTACTCTCATGACCACGGAAAGATGATCAAGAGAGGATGATTTCTTGGCCATATCGCAATGAATACTTGTGACTTGTGCTTCCAATTGACATCTTCAGCGCCATATTGCGCTGGCCAAGGTGACGGAGCGGGATTACGAAAGCATGATCATGGCTGTTGTTCTGTTTATCTTGTTTTGACTGAGACTTGTTAGGATAGACGGTTTTTCATCACTGACTAGCCAAAGCCTTACTCTGCCTGACATCGACCGTAAATTGATAATGAATTTACATGCTTCCGCGACGATTTACCTCTTGATCATCGATCCGATTGAAGATCTTCAATTGTTAATTCTCTTGCCTCGACTCATAGCCATGATGAGCTCTTGATCATGTTTCCTTAACCCTCTATTTTTTACGGAAGAATGATCAAGCTGCTGCTCTTGATCATCGTTTC'
k = 3
def FrequencyMap(Text, k):
freq = {}
n = len(Text)
for i in range(n-k+1):
Pattern = Text[i:i+k]
freq[Pattern] = 0
for x in range(n-k+1):
if Pattern == Text[x:x+k]:
freq[Pattern] +=1
return freq
def FrequentWords(Text, k):
words = []
freq = FrequencyMap(Text, k)
m = max(freq.values())
for key in freq:
if m == freq[key]:
words.append(key)
return words
print(FrequentWords(Text, k))
['TGA']
Si comparamos con los resultados de los patrones en el frecuencymap, podemos ver TGA, está 25 veces, entonces estamos en lo correcto.