¿Qué es un motivo en una secuencia?
Un motivo es un patrón corto que aparece en una secuencia, y un k-mero es cualquier trozo de k bases seguidas. Buscar un motivo y contar k-meros sirve para encontrar trozos repetidos sin leer la secuencia a ojo.
La idea es sencilla: se desliza una ventana por la secuencia, de una base en una base, y se mira lo que queda dentro.
Al final de esta lección
Nota
Puedo buscar un motivo en una secuencia y contar sus k-meros.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Motivo | un patrón corto que se busca en una secuencia | ATG |
| k-mero | un trozo de k bases seguidas | |
| Ventana | el trozo que se mira en cada paso | |
| Solapamiento | dos apariciones que comparten alguna base | |
| Frecuencia | cuántas veces aparece algo |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un k-mero es un trozo de k bases
Con k = 3 cada trozo tiene tres bases. Se empieza en la posición 0, se corta un trozo seq[i:i + k] y se avanza una posición.
Una secuencia de n bases tiene n - k + 1 k-meros. La última ventana empieza en la posición n - k, porque debe quedarle espacio para k bases.
Ejemplo resuelto: los 3-meros de ATGATGCATGA
| Posición | Trozo | Posición | Trozo |
|---|---|---|---|
| 0 | ATG | 5 | GCA |
| 1 | TGA | 6 | CAT |
| 2 | GAT | 7 | ATG |
| 3 | ATG | 8 | TGA |
| 4 | TGC |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Cuenta los k-meros de la secuencia
docker exec jupyter python3 -c "s='ATGATGCATGA'; print(len(s) - 3 + 1, len(s) - 2 + 1)"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un diccionario cuenta cada k-mero
Para saber qué k-mero es más frecuente, se recorren las ventanas y se suma uno en un diccionario. La clave es el k-mero y el valor, cuántas veces ha salido.
Si la clave ya existe se suma uno. Si no, se crea con valor 1. Es el mismo patrón que se usa para contar bases.
Cuenta los k-meros con un bucle
seq = "ATGATGCATGA"
k = 3
counts = {}
for i in range(len(seq) - k + 1):
kmer = seq[i:i + k]
if kmer in counts:
counts[kmer] = counts[kmer] + 1
else:
counts[kmer] = 1
for kmer in sorted(counts):
print(kmer, counts[kmer])
# Cambia k a 2 y ejecuta de nuevo: ¿qué k-mero sale más veces?
Cuenta los 3-meros en una línea
docker exec jupyter python3 -c "import collections as c; s='ATGATGCATGA'; print(sorted(c.Counter(s[i:i+3] for i in range(len(s) - 2)).items()))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejemplo resuelto: los 3-meros contados
| 3-mero | Veces | Posiciones |
|---|---|---|
| ATG | 3 | 0, 3 y 7 |
| TGA | 2 | 1 y 8 |
| GAT | 1 | 2 |
| TGC | 1 | 4 |
| GCA | 1 | 5 |
| CAT | 1 | 6 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un motivo se busca en cada posición
Para buscar un motivo se compara, en cada posición, el trozo de esa longitud con el motivo. Si son iguales, se guarda la posición.
Las apariciones pueden solaparse: en AAAA, el motivo AA aparece en las posiciones 0, 1 y 2. Por eso hay que mirar todas las posiciones, no saltar de motivo en motivo.
Busca las posiciones del motivo ATG
docker exec jupyter python3 -c "s='ATGATGCATGA'; m='ATG'; print([i for i in range(len(s) - len(m) + 1) if s[i:i+len(m)] == m])"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Compara posiciones con count en AAAA
docker exec jupyter python3 -c "s='AAAA'; m='AA'; print([i for i in range(len(s) - len(m) + 1) if s[i:i+len(m)] == m], s.count(m))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error muy común
Advertencia
Mucha gente cree que s.count(motivo) cuenta todas las apariciones. No cuenta las que se solapan: en AAAA, count("AA") da 2, pero el motivo está en 3 posiciones. Para contar bien, recorre todas las ventanas.
Para ir más lejos: k-meros posibles
Con cuatro bases hay 4 x 4 x 4 = 64 posibles 3-meros. En la secuencia de la lección solo salen 6 distintos. ¿Cuántos 2-meros posibles hay? ¿Y cuántos salen en la secuencia? Compara los dos números y escribe qué te dicen.