¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Buscar motivos y contar k-meros

Después de esta lección: Puedo buscar un motivo en una secuencia y contar sus k-meros.

Lección de 60 min4 comandosLaboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

¿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

PalabraQué significaEjemplo
Motivoun patrón corto que se busca en una secuenciaATG
k-meroun trozo de k bases seguidas
Ventanael trozo que se mira en cada paso
Solapamientodos apariciones que comparten alguna base
Frecuenciacuá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ónTrozoPosiciónTrozo
0ATG5GCA
1TGA6CAT
2GAT7ATG
3ATG8TGA
4TGC

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Cuenta los k-meros de la secuencia

Comando
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

Código: python
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

Comando
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-meroVecesPosiciones
ATG30, 3 y 7
TGA21 y 8
GAT12
TGC14
GCA15
CAT16

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

Comando
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

Comando
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.

Sobre este laboratorio y su código: Laboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.