Programación en Python para el Procesamiento de Secuencias Biológicas

Clasificado en Informática

Escrito el en español con un tamaño de 8,55 KB

Operaciones con Nucleótidos en Python

En bioinformática, una de las tareas más comunes es contar la cantidad de cada nucleótido (A, T, C, G) en una secuencia de ADN.

# Contar la cantidad de cada nucleótido (A, T, C, G) en una secuencia de ADN.
secuencia_adn = "AAGCGGAATTTGACACAGACTATAAGAAGAGCCTGTGGATAAAAAGGATCGAAACTGTGTAGAAAGGGGAGATCTCTTTCGTGGTTTAGGTTATGATCCGCCGTCCCGCTAGCGATCTCTGGATCGGGATCGTCACGGTAAAGCCGCCTTATGCGCGGCGCACCCCGGCGTAGTCGTGTCCATGCGCAGCCGGGTGCCTGAAAAATCATGAGTTACATAACTAACGTCTGTTCCTTTTCT"
NucleotA = secuencia_adn.count("A")
NucleotT = secuencia_adn.count("T")
NucleotG = secuencia_adn.count("G")
NucleotC = secuencia_adn.count("C")

2. Reemplazar Nucleótidos

Es posible reemplazar todas las adeninas (A) en una secuencia de ADN con timinas (T) e imprimir los primeros 10 nucleótidos (nts).

secuencia_adn = "AAGCGGAATTTGACACAGACTATAAGAAGAGCCTGTGGATAAAAAGGATCGAAACTGTGTAGAAAGGGGAGATCTCTTTCGTGGTTTAGGTTATGATCCGCCGTCCCGCTAGCGATCTCTGGATCGGGATCGTCACGGTAAAGCCGCCTTATGCGCGGCGCACCCCGGCGTAGTCGTGTCCATGCGCAGCCGGGTGCCTGAAAAATCATGAGTTACATAACTAACGTCTGTTCCTTTTCT"
sec_mod = secuencia_adn.replace("A", "T")
print(sec_mod[0:10])

3. Comprobar si una Secuencia es un Palíndromo

Verificar si una secuencia de ADN es un palíndromo mediante el uso de índices.

secuencia_adn = "AATTTTAA"
palin = (f"{secuencia_adn[7:8]}{secuencia_adn[6:7]}{secuencia_adn[5:6]}{secuencia_adn[4:5]}{secuencia_adn[3:4]}{secuencia_adn[2:3]}{secuencia_adn[1:2]}{secuencia_adn[0:1]}")
print(str(palin.find(secuencia_adn)))

4. Encontrar Subcadenas

Determinar cuántas veces aparece un fragmento específico (subcadena) en una secuencia de ADN.

secuencia_adn = "AAGCGGAATTTGACACAGACTATAAGAAGAGCCTGTGGATAAAAAGGATCGAAACTGTGTAGAAAGGGGAGATCTCTTTCGTGGTTTAGGTTATGATCCGCCGTCCCGCTAGCGATCTCTGGATCGGGATCGTCACGGTAAAGCCGCCTTATGCGCGGCGCACCCCGGCGTAGTCGTGTCCATGCGCAGCCGGGTGCCTGAAAAATCATGAGTTACATAACTAACGTCTGTTCCTTTTCT"
subcadena = "CGA"
print(str(secuencia_adn.count(subcadena)))

5. Convertir a Minúsculas y Verificar Tipo

Convierte una secuencia de ADN a minúsculas y usa la función type() para verificar el tipo de la variable.

secuencia_adn = "AGCTAGCTAGCACTG"
minusc = (secuencia_adn.lower())
print(minusc)
print(type(minusc))

6. Reemplazo y Concatenación de Secuencias

Reemplaza todos los nucleótidos "A" en una secuencia dada con "T" y concatena la secuencia original con la modificada, mostrando el resultado y la longitud de la secuencia concatenada.

secuencia_adn = "AAGCGGAATTTGACACAGACTATAAGAAGAGCCTGTGGATAAAAAGGATCGAAACTGTGTAGAAAGGGGAGATCTCTTTCGTGGTTTAGGTTATGATCCGCCGTCCCGCTAGCGATCTCTGGATCGGGATCGTCACGGTAAAGCCGCCTTATGCGCGGCGCACCCCGGCGTAGTCGTGTCCATGCGCAGCCGGGTGCCTGAAAAATCATGAGTTACATAACTAACGTCTGTTCCTTTTCT"
Sec_mod = (secuencia_adn.replace("A", "T"))
conc = (secuencia_adn + Sec_mod)
print(conc)
print(len(conc))

Ejercicios Prácticos de Bioinformática

1) Cálculo del Contenido A+T

Escribir un programa que calcule el tanto por uno de A+T de una cadena de DNA.

my_dna = "ACTGATCGATTACGTATAGTATTTGCTATCATACATATATATCGATGCGTTCAT"
count_A = my_dna.count("A")
count_T = my_dna.count("T")
dna_length = len(my_dna)
count_AT = count_A + count_T
CantAT = count_AT / dna_length
print(CantAT)

2) Generación de la Cadena Complementaria

Programa para calcular la cadena complementaria de una secuencia dada.

my_dna = "ACTGATCGATTACGTATAGTATTTGCTATCATACATATATATCGATGCGTTCAT"
raw_compl = my_dna.replace("C","g").replace("A", "t").replace("G", "C").replace("T", "A")
complementaria = raw_compl.upper()
print(complementaria)

3) Longitud de Fragmentos de Restricción

La cadena adjunta contiene un sitio de restricción de la enzima EcoRI: G*AATTC (el asterisco muestra el punto de corte). El programa calcula los tamaños resultantes tras la digestión.

my_dna = "ACTGATCGATTACGTATAGTAGAATTCTATCATACATATATATCGATGCGTTCAT"
my_dna.find("GAATTC")
corte = my_dna.replace("GAATTC" , "")
dna_length = len(corte) 
print(dna_length)

4) Procesamiento de Intrones y Exones

Fragmento de DNA genómico donde el primer exón va de la posición 1 a la 63 y el segundo de la 91 al final. El programa imprime las secuencias codificantes y calcula su porcentaje.

my_dna = "ATCGATCGATCGATCGACTGACTAGTCATAGCTATGCATGTAGCTACTCGATCGATCGATCGATCGATCGATCGATCGATCGATCATGCTATCATCGATCGATATCGATGCATCGACTACTAT"
largo = len(my_dna)
cod = my_dna[0:62] + my_dna[90:123]
largo_cod = len(cod)
porcentajecod = (largo_cod / largo) * 100
print(porcentajecod, "%")
Dnacompleto = my_dna[0:62] + my_dna[62:89].lower() +  my_dna[89:123]
print(Dnacompleto)

Fundamentos de Python: Operaciones y Sintaxis

Los programas de Python tienen la extensión .py. Los operadores aritméticos básicos funcionan de la siguiente manera:

  • Suma: +
  • Resta: -
  • Multiplicación: *
  • División: /

Nota: Python considera los números enteros (int) y los decimales (float) como objetos diferentes. Las operaciones tienen precedencia, por lo que conviene usar paréntesis.

60/3+2
60/(3+2)
# División de enteros (redondeo hacia abajo)
79 // 8
# Operador módulo (resto de la división)
23 % 10
# Exponenciación
3**2

Manipulación de Texto en Bioinformática

Las secuencias de ADN o proteínas son tratadas como texto (strings). Para ejecutar una sola línea de código en entornos como Spyder, se usa F9.

La función print() es fundamental para mostrar resultados. Las cadenas pueden delimitarse con comillas simples o dobles:

print("Hello world")
print('She said, "Hello world"')

Si cometemos errores, obtendremos un SyntaxError. El uso de la barra invertida (\) permite caracteres especiales:

  • \n: Salto de línea.
  • \t: Tabulador.

Uso de Variables y F-strings

Una variable es un contenedor de datos. En Python, los nombres son case-sensitive (distinguen mayúsculas de minúsculas).

my_dna = "ATGCGTA"
print(f"El contenido de la variable es: {my_dna}")

Las f-strings (cadenas formateadas) permiten incrustar expresiones dentro de llaves {}, facilitando la lectura del código.

Funciones y Métodos de Cadenas

  • len(): Obtiene la longitud de una cadena. Devuelve un int.
  • str(): Convierte un valor a cadena para permitir la concatenación con otros textos.
  • .lower() / .upper(): Cambian el caso de la cadena.
  • .replace(): Sustituye fragmentos de texto.
  • .count(): Cuenta apariciones de una subcadena.
  • .find(): Devuelve el índice de la primera aparición (o -1 si no existe).

Extracción de Subcadenas (Slicing)

El slicing permite extraer fragmentos. Es importante recordar que las posiciones empiezan en cero y el límite derecho no es inclusivo.

protein = "vlspadktnv"
# Imprime posiciones 3 y 4
print(protein[3:5])

Ejemplo de Cálculo Físico

Python también funciona como una calculadora programable para cualquier área científica:

Aceleracion = 9.8 # m/s2
Masa = 12 # Kg
Fuerza = Masa * Aceleracion
print(f"Fuerza = {Fuerza}")

Recapitulación de Conceptos Clave

  • Operaciones aritméticas elementales.
  • Diferencia entre funciones y argumentos.
  • Importancia de los comentarios y mensajes de error.
  • Almacenamiento en variables y tipos de datos (type).
  • Diferencia entre funciones y métodos.
  • Concatenación y uso de caracteres especiales.
  • Búsqueda, conteo y reemplazo en cadenas.
  • Extracción de fragmentos para crear nuevas secuencias.

Entradas relacionadas: