¿Cómo se guarda una secuencia de ADN?
Una secuencia de ADN (ácido desoxirribonucleico) se guarda en un ordenador como una cadena de texto hecha con cuatro letras: A, C, G y T. Con esa idea, la bioinformática cuenta, compara y transforma secuencias con programas en lugar de hacerlo a mano.
Todas las secuencias de este módulo son inventadas. Sirven para practicar con cadenas de texto y no dicen nada de ningún ser vivo.
Al final de esta lección
Nota
Puedo contar las bases de una secuencia, calcular su contenido GC y escribir su complemento inverso.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Secuencia | una cadena de bases en un orden | ATGCCA |
| Base | una de las cuatro letras A, C, G o T | |
| Contenido GC | el porcentaje de bases que son G o C | |
| Complemento | la secuencia que cambia cada base por su pareja | |
| Complemento inverso | el complemento leído de derecha a izquierda |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Una secuencia es una cadena de texto
En Python una secuencia es un str. len(s) da su longitud. s[0] es la primera base y s[-1] es la última.
Un trozo se corta con s[a:b]: empieza en la posición a y termina antes de la b. Las posiciones se cuentan desde 0. s.count("G") dice cuántas veces aparece una base.
Ejemplo resuelto: contar las bases de ATGCGCATTAAT
| Base | Veces | Parte de las 12 bases |
|---|---|---|
| A | 4 | 4 de 12 |
| C | 2 | 2 de 12 |
| G | 2 | 2 de 12 |
| T | 4 | 4 de 12 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Cuenta cada base de la secuencia
docker exec jupyter python3 -c "s='ATGCGCATTAAT'; print(len(s), s.count('A'), s.count('C'), s.count('G'), s.count('T'))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Corta tres trozos de la secuencia
docker exec jupyter python3 -c "s='ATGCGCATTAAT'; print(s[0:3], s[3:6], s[-3:])"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
El contenido GC es un porcentaje
El contenido GC dice qué parte de la secuencia son bases G o C. Se cuentan las G, se cuentan las C, se suman y se divide entre la longitud total.
Después se multiplica por 100 para tener un porcentaje. Dos secuencias de distinta longitud se comparan bien con este número.
Calcula el contenido GC con un bucle
sequences = ["ATGCGCATTAAT", "GGCCGC", "ATATAT"]
for seq in sequences:
gc = 0
for base in seq:
if base == "G" or base == "C":
gc = gc + 1
percent = round(100 * gc / len(seq), 1)
print(seq, percent)
# Añade otra secuencia inventada a la lista y vuelve a ejecutar.
Ejemplo resuelto: tres secuencias inventadas
| Secuencia | Bases G o C | Longitud | Contenido GC |
|---|---|---|---|
| ATGCGCATTAAT | 4 | 12 | 33,3 % |
| GGCCGC | 6 | 6 | 100 % |
| ATATAT | 0 | 6 | 0 % |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Calcula el contenido GC en una línea
docker exec jupyter python3 -c "s='ATGCGCATTAAT'; print(round(100 * (s.count('G') + s.count('C')) / len(s), 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 error muy común
Advertencia
Mucha gente cree que el contenido GC se divide entre el número de bases G y C. No: se divide entre la longitud total. La A y la T también cuentan en la longitud, aunque no se sumen en el numerador.
El complemento inverso se hace en dos pasos
Cada base tiene una pareja: A con T, y C con G. El complemento cambia cada base por su pareja.
El complemento inverso es el complemento leído al revés. Primero se cambia cada letra y después se da la vuelta a la cadena. En Python, s[::-1] da la vuelta a una cadena.
Ejemplo resuelto: el complemento inverso de ATGCCA
| Paso | Resultado |
|---|---|
| Secuencia original | ATGCCA |
| Complemento, base a base | TACGGT |
| Complemento leído al revés | TGGCAT |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Escribe el complemento inverso con un diccionario
pairs = {"A": "T", "T": "A", "G": "C", "C": "G"}
seq = "ATGCCA"
complement = ""
for base in seq:
complement = complement + pairs[base]
print(complement)
print(complement[::-1])
# Prueba con otra secuencia inventada: "GGATCC".
Comprueba los dos pasos en una línea
docker exec jupyter python3 -c "s='ATGCCA'; c={'A':'T','T':'A','G':'C','C':'G'}; k=''.join(c[b] for b in s); print(k); print(k[::-1])"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Para ir más lejos: una secuencia al revés
Escribe la secuencia ATGCCA al revés, sin cambiar las letras, y compárala con su complemento inverso. ¿Son la misma cadena? Después busca una secuencia inventada que sea igual a su propio complemento inverso. Pista: empieza por GA y piensa en las parejas.