P1 Secuencias

Introducción al manejo de secuencias bioinformáticas usando fasta.

El archivo con el que van a trabajar está en la siguiente liga:

https://www.ncbi.nlm.nih.gov/nuccore/294657026?report=fasta

https://www.ncbi.nlm.nih.gov/nuccore/4996229?report=fasta

Ayuda con python.

Revisen las operaciones con cadenas

Ejemplo de conteo se subcadena en cadena

In [1]: cadena = 'AAACGCGCGT'

In [2]: cadena.count('A')

Out[2]: 3

Para poder contestar la primer función de la práctica primero necesitamos saber dos cosas, como leer un archivo y dejarlo en memoria y luego como transformar ese archivo leído en una tupla donde la primer entrada sean las etiquetas de la secuenica y la otra entrada sea la secuencia en una sola línea

Para leer un archivo y dejarlo en memoria hay que hacer lo siguiente:

In [1]: f = open('secuenciaej.fasta','r')

In [2]: gen = f.readlines()

Una forma alternativa es la siguiente:

In [5]: gen = open('secuenciaej.fasta','r').readlines()

En ambos casos si examinan la variable gen verán lo siguiente:

In [6]: gen

Out[6]:

['>ej_secuencia;A387429875\n',

'GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACA\n',

'GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACA\n',

'GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACA\n',

'GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACA\n',

'GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACA\n',

'GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACA\n',

'GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACA\n']

Ahora la variable gen es una lista donde la primer entrada es la etiqueta e información sobre la secuencia y todas las siguientes entradas son la secuencia segmentada la cual requerimos pegar en una sola línea. Para hacer esto necesitamos automatizar el proceso de concatenación después de hacer strip() para eliminar los espacios y caracteres vacíos del final:

In [13]: gen[2].strip() + gen[3].strip()

Out[13]: 'GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACA'

sobre todas las líneas de la 1 en adelante:

In [14]: gen[1:]

Out[14]:

['GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACA\n',

'GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACA\n',

'GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACA\n',

'GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACA\n',

'GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACA\n',

'GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACA\n',

'GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACA\n']

Podemos iterar sobre estas entradas con un for e irlas dejando en una variable:

In [18]: secuencia = ''

In [19]: for subsec in gen[1:]:

...: secuencia = secuencia + subsec.strip()

...:

Una forma alternativa de hacer esto es la siguiente

In [24]: from string import strip

In [25]: secuencia = ''.join( map( strip, gen[1:] ) )

Nuestra tupla queda de la siguiente forma:

In [28]: tupla = ( gen[0].strip(), secuencia )

In [29]: tupla

Out[29]:

('>ej_secuencia;A387429875',

'GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACA

GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGA

TTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATT

ACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTAC

AGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACA')

Ahora tenemos que poner todo esto en una sola función llamada recuperar_adn( archivo ):

In [31]: def recuperar_adn( archivo ):

...: gen = open(archivo,'r').readlines()

...: secencia = ''

...: for subsec in gen[1:]:

...: secuencia += subsec.strip()

...: tupla = ( gen[0].strip(), secuencia )

...: return tupla

...:

Fíjense en la pequeña modificación en la línea que contiene la función open, hemos cambiado el nombre específico del archivo por el de la variable, también fíjense en el pequeño cambio de la línea del for. Esta definición la deben poner en un script donde después irán poniendo las demás definiciones.