¿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

Alineamiento de dos secuencias

Después de esta lección: Puedo calcular la puntuación de un alineamiento global con coincidencias, discrepancias y huecos.

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

¿Cómo se comparan dos secuencias?

El alineamiento por parejas coloca dos secuencias una sobre otra para ver cuánto se parecen. Una puntuación convierte ese parecido en un número, y así se pueden comparar muchas parejas con justicia.

Dos secuencias casi iguales pueden diferir en una base de más o de menos. El alineamiento deja un hueco justo ahí y el resto vuelve a coincidir.

Al final de esta lección

Nota

Puedo calcular la puntuación de un alineamiento global con coincidencias, discrepancias y huecos.

Palabras clave

PalabraQué significaEjemplo
Alineamientodos secuencias colocadas una sobre otra, columna a columna
Coincidenciauna columna con la misma base arriba y abajo
Discrepanciauna columna con dos bases distintas
Huecouna columna con un guion: falta una baseG-TC
Puntuaciónla suma de lo que vale cada columna

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

Cada columna del alineamiento suma o resta

Se escriben las dos secuencias una encima de otra y se puntúa cada columna. En este módulo una coincidencia vale +1, una discrepancia vale -1 y un hueco vale -2.

La puntuación del alineamiento es la suma de todas las columnas. Cuanto más alta, más se parecen las secuencias.

Ejemplo resuelto: puntuar GATC contra G-TC

ColumnaArribaAbajoQué esPuntos
1GGCoincidencia+1
2A-Hueco-2
3TTCoincidencia+1
4CCCoincidencia+1
Total1

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

Puntúa el alineamiento con un programa

Comando
docker exec jupyter python3 -c "a='GATC'; b='G-TC'; print(sum(-2 if '-' in (x, y) else (1 if x == y else -1) for x, y in zip(a, b)))"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Cuenta coincidencias, discrepancias y huecos

Comando
docker exec jupyter python3 -c "a='GATC'; b='G-TC'; print(sum(1 for x, y in zip(a, b) if x == y), sum(1 for x, y in zip(a, b) if x != y and '-' not in (x, y)), (a + b).count('-'))"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Hay muchos alineamientos y se busca el mejor

Para dos secuencias hay muchísimas formas de colocar huecos. Probarlas todas tarda demasiado. El alineamiento global busca la que da la puntuación más alta.

Comparar letra a letra sin huecos suele fallar: una base de más desplaza todo lo que viene después, y parece que no se parecen.

Compara GATC con GTC sin ningún hueco

Comando
docker exec jupyter python3 -c "a='GATC'; b='GTC'; print(sum(1 if x == y else -1 for x, y in zip(a, b)))"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Una tabla guarda las mejores puntuaciones

Se hace una tabla. Cada celda es la mejor puntuación de un trozo del principio de la primera secuencia contra un trozo del principio de la segunda.

Una celda toma el mayor de tres valores. Uno es la celda en diagonal más una coincidencia o discrepancia. Otro es la de arriba más un hueco, y el tercero la de la izquierda más un hueco. La primera fila y la primera columna son huecos: 0, -2, -4, y así.

Ejemplo resuelto: la tabla de GATC contra GTC

InicioGTC
Inicio0-2-4-6
G-21-1-3
A-4-10-2
T-6-30-1
C-8-5-21

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

Rellena la tabla con dos bucles

Código: python
# Rellena la tabla: la mejor puntuación para cada pareja de prefijos.
a = "GATC"
b = "GTC"
match = 1
mismatch = -1
gap = -2
table = []
for i in range(len(a) + 1):
    table.append([0] * (len(b) + 1))
for i in range(1, len(a) + 1):
    table[i][0] = i * gap
for j in range(1, len(b) + 1):
    table[0][j] = j * gap
for i in range(1, len(a) + 1):
    for j in range(1, len(b) + 1):
        if a[i - 1] == b[j - 1]:
            diagonal = table[i - 1][j - 1] + match
        else:
            diagonal = table[i - 1][j - 1] + mismatch
        up = table[i - 1][j] + gap
        left = table[i][j - 1] + gap
        table[i][j] = max(diagonal, up, left)
for row in table:
    print(row)
# La celda de abajo a la derecha es la mejor puntuación. Cambia b a "GAC".

Un error muy común

Advertencia

Mucha gente cree que basta con comparar las secuencias letra a letra desde la izquierda. Si una secuencia tiene una base de más, todas las columnas siguientes quedan desplazadas. Un hueco las recoloca. Por eso se prueban huecos y se elige la mejor puntuación.

Para ir más lejos: otra tabla

Rellena a mano la tabla de AGT contra AT con +1, -1 y -2. Después comprueba la esquina final con tu función. ¿Qué pasa si las dos secuencias se intercambian? Prueba con GATC y GTC en los dos órdenes.

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.