Biopython - Alineaciones de secuencia

Sequence alignment es el proceso de ordenar dos o más secuencias (de ADN, ARN o secuencias de proteínas) en un orden específico para identificar la región de similitud entre ellas.

La identificación de la región similar nos permite inferir mucha información como qué rasgos se conservan entre especies, qué tan cercanas están genéticamente las diferentes especies, cómo evolucionan las especies, etc. Biopython proporciona un amplio apoyo para la alineación de secuencias.

Aprendamos algunas de las características importantes proporcionadas por Biopython en este capítulo:

Analizar la alineación de la secuencia

Biopython proporciona un módulo, Bio.AlignIO para leer y escribir alineaciones de secuencia. En bioinformática, hay muchos formatos disponibles para especificar los datos de alineación de secuencia de forma similar a los datos de secuencia aprendidos anteriormente. Bio.AlignIO proporciona una API similar a Bio.SeqIO, excepto que Bio.SeqIO funciona con los datos de secuencia y Bio.AlignIO funciona con los datos de alineación de secuencia.

Antes de comenzar a aprender, descarguemos un archivo de alineación de secuencia de muestra de Internet.

Para descargar el archivo de muestra, siga los pasos a continuación:

Step 1 - Abra su navegador favorito y vaya a http://pfam.xfam.org/family/browsesitio web. Mostrará todas las familias de Pfam en orden alfabético.

Step 2- Elija cualquier familia que tenga menos valor de semilla. Contiene datos mínimos y nos permite trabajar fácilmente con la alineación. Aquí, hemos seleccionado / hecho clic en PF18225 y se abre ir ahttp://pfam.xfam.org/family/PF18225 y muestra detalles completos al respecto, incluidas las alineaciones de secuencia.

Step 3 - Vaya a la sección de alineación y descargue el archivo de alineación de secuencias en formato de Estocolmo (PF18225_seed.txt).

Intentemos leer el archivo de alineación de secuencia descargado usando Bio.AlignIO como se muestra a continuación:

Importar módulo Bio.AlignIO

>>> from Bio import AlignIO

Lea la alineación utilizando el método de lectura. El método de lectura se utiliza para leer los datos de alineación individuales disponibles en el archivo dado. Si el archivo dado contiene muchas alineaciones, podemos usar el método de análisis. El método parse devuelve un objeto de alineación iterable similar al método parse en el módulo Bio.SeqIO.

>>> alignment = AlignIO.read(open("PF18225_seed.txt"), "stockholm")

Imprime el objeto de alineación.

>>> print(alignment)
SingleLetterAlphabet() alignment with 6 rows and 65 columns
MQNTPAERLPAIIEKAKSKHDINVWLLDRQGRDLLEQRVPAKVA...EGP B7RZ31_9GAMM/59-123 
AKQRGIAGLEEWLHRLDHSEAIPIFLIDEAGKDLLEREVPADIT...KKP A0A0C3NPG9_9PROT/58-119 
ARRHGQEYFQQWLERQPKKVKEQVFAVDQFGRELLGRPLPEDMA...KKP A0A143HL37_9GAMM/57-121 
TRRHGPESFRFWLERQPVEARDRIYAIDRSGAEILDRPIPRGMA...NKP A0A0X3UC67_9GAMM/57-121 
AINRNTQQLTQDLRAMPNWSLRFVYIVDRNNQDLLKRPLPPGIM...NRK B3PFT7_CELJU/62-126 
AVNATEREFTERIRTLPHWARRNVFVLDSQGFEIFDRELPSPVA...NRT K4KEM7_SIMAS/61-125
>>>

También podemos verificar las secuencias (SeqRecord) disponibles en la alineación, así como a continuación:

>>> for align in alignment: 
... print(align.seq) 
... 
MQNTPAERLPAIIEKAKSKHDINVWLLDRQGRDLLEQRVPAKVATVANQLRGRKRRAFARHREGP 
AKQRGIAGLEEWLHRLDHSEAIPIFLIDEAGKDLLEREVPADITA---RLDRRREHGEHGVRKKP 
ARRHGQEYFQQWLERQPKKVKEQVFAVDQFGRELLGRPLPEDMAPMLIALNYRNRESHAQVDKKP 
TRRHGPESFRFWLERQPVEARDRIYAIDRSGAEILDRPIPRGMAPLFKVLSFRNREDQGLVNNKP 
AINRNTQQLTQDLRAMPNWSLRFVYIVDRNNQDLLKRPLPPGIMVLAPRLTAKHPYDKVQDRNRK 
AVNATEREFTERIRTLPHWARRNVFVLDSQGFEIFDRELPSPVADLMRKLDLDRPFKKLERKNRT 
>>>

Múltiples alineaciones

En general, la mayoría de los archivos de alineación de secuencia contienen datos de alineación única y es suficiente para usar readmétodo para analizarlo. En el concepto de alineación de secuencia múltiple, se comparan dos o más secuencias para obtener las mejores coincidencias de subsecuencia entre ellas y da como resultado una alineación de secuencia múltiple en un solo archivo.

Si el formato de alineación de secuencia de entrada contiene más de una alineación de secuencia, entonces debemos usar parse método en lugar de read método como se especifica a continuación -

>>> from Bio import AlignIO 
>>> alignments = AlignIO.parse(open("PF18225_seed.txt"), "stockholm") 
>>> print(alignments) 
<generator object parse at 0x000001CD1C7E0360> 
>>> for alignment in alignments: 
... print(alignment) 
... 
SingleLetterAlphabet() alignment with 6 rows and 65 columns 
MQNTPAERLPAIIEKAKSKHDINVWLLDRQGRDLLEQRVPAKVA...EGP B7RZ31_9GAMM/59-123 
AKQRGIAGLEEWLHRLDHSEAIPIFLIDEAGKDLLEREVPADIT...KKP A0A0C3NPG9_9PROT/58-119 
ARRHGQEYFQQWLERQPKKVKEQVFAVDQFGRELLGRPLPEDMA...KKP A0A143HL37_9GAMM/57-121 
TRRHGPESFRFWLERQPVEARDRIYAIDRSGAEILDRPIPRGMA...NKP A0A0X3UC67_9GAMM/57-121 
AINRNTQQLTQDLRAMPNWSLRFVYIVDRNNQDLLKRPLPPGIM...NRK B3PFT7_CELJU/62-126 
AVNATEREFTERIRTLPHWARRNVFVLDSQGFEIFDRELPSPVA...NRT K4KEM7_SIMAS/61-125
>>>

Aquí, el método de análisis devuelve un objeto de alineación iterable y se puede iterar para obtener alineaciones reales.

Alineación de secuencia por pares

Pairwise sequence alignment compara solo dos secuencias a la vez y proporciona los mejores alineamientos de secuencia posibles. Pairwise es fácil de entender y excepcional de inferir de la alineación de secuencia resultante.

Biopython proporciona un módulo especial, Bio.pairwise2para identificar la secuencia de alineación utilizando el método por pares. Biopython aplica el mejor algoritmo para encontrar la secuencia de alineación y está a la par con otros programas.

Escribamos un ejemplo para encontrar la alineación de secuencia de dos secuencias simples e hipotéticas usando un módulo por pares. Esto nos ayudará a comprender el concepto de alineación de secuencias y cómo programarlo usando Biopython.

Paso 1

Importar el módulo pairwise2 con el comando dado a continuación -

>>> from Bio import pairwise2

Paso 2

Cree dos secuencias, seq1 y seq2 -

>>> from Bio.Seq import Seq 
>>> seq1 = Seq("ACCGGT") 
>>> seq2 = Seq("ACGT")

Paso 3

Llame al método pairwise2.align.globalxx junto con seq1 y seq2 para encontrar las alineaciones usando la siguiente línea de código:

>>> alignments = pairwise2.align.globalxx(seq1, seq2)

Aquí, globalxxEl método realiza el trabajo real y encuentra las mejores alineaciones posibles en las secuencias dadas. En realidad, Bio.pairwise2 proporciona un gran conjunto de métodos que siguen la siguiente convención para encontrar alineaciones en diferentes escenarios.

<sequence alignment type>XY

Aquí, el tipo de alineación de secuencia se refiere al tipo de alineación que puede ser global o local. El tipo global consiste en encontrar la alineación de secuencia teniendo en cuenta la secuencia completa. El tipo local busca la alineación de secuencias al observar también el subconjunto de las secuencias dadas. Esto será tedioso pero proporciona una mejor idea de la similitud entre las secuencias dadas.

  • X se refiere a la puntuación coincidente. Los valores posibles son x (coincidencia exacta), m (puntuación basada en caracteres idénticos), d (diccionario proporcionado por el usuario con carácter y puntuación de coincidencia) y finalmente c (función definida por el usuario para proporcionar un algoritmo de puntuación personalizado).

  • Y se refiere a la penalización por hueco. Los valores posibles son x (sin penalizaciones por espacio), s (mismas penalizaciones para ambas secuencias), d (penalizaciones diferentes para cada secuencia) y finalmente c (función definida por el usuario para proporcionar penalizaciones por espacio personalizadas)

Por lo tanto, localds también es un método válido, que encuentra la alineación de secuencia utilizando la técnica de alineación local, el diccionario proporcionado por el usuario para coincidencias y la penalización por espacio proporcionada por el usuario para ambas secuencias.

>>> test_alignments = pairwise2.align.localds(seq1, seq2, blosum62, -10, -1)

Aquí, blosum62 se refiere a un diccionario disponible en el módulo pairwise2 para proporcionar puntuación de coincidencia. -10 se refiere a penalización por apertura de hueco y -1 se refiere a penalización por extensión de hueco.

Etapa 4

Haga un bucle sobre el objeto de alineaciones iterables y obtenga cada objeto de alineación individual e imprímalo.

>>> for alignment in alignments: 
... print(alignment) 
... 
('ACCGGT', 'A-C-GT', 4.0, 0, 6) 
('ACCGGT', 'AC--GT', 4.0, 0, 6) 
('ACCGGT', 'A-CG-T', 4.0, 0, 6) 
('ACCGGT', 'AC-G-T', 4.0, 0, 6)

Paso 5

El módulo Bio.pairwise2 proporciona un método de formato, format_alignment para visualizar mejor el resultado:

>>> from Bio.pairwise2 import format_alignment 
>>> alignments = pairwise2.align.globalxx(seq1, seq2) 
>>> for alignment in alignments: 
... print(format_alignment(*alignment)) 
...

ACCGGT 
| | || 
A-C-GT 
   Score=4 
   
ACCGGT 
|| || 
AC--GT 
   Score=4 

ACCGGT 
| || | 
A-CG-T 
   Score=4 

ACCGGT 
|| | | 
AC-G-T 
   Score=4

>>>

Biopython también proporciona otro módulo para realizar la alineación de secuencias, Align. Este módulo proporciona un conjunto diferente de API para simplemente la configuración de parámetros como algoritmo, modo, puntaje de coincidencia, penalizaciones por espacios, etc. Un simple vistazo al objeto Align es el siguiente:

>>> from Bio import Align
>>> aligner = Align.PairwiseAligner()
>>> print(aligner)
Pairwise sequence aligner with parameters
   match score: 1.000000
   mismatch score: 0.000000
   target open gap score: 0.000000
   target extend gap score: 0.000000
   target left open gap score: 0.000000
   target left extend gap score: 0.000000
   target right open gap score: 0.000000
   target right extend gap score: 0.000000
   query open gap score: 0.000000
   query extend gap score: 0.000000
   query left open gap score: 0.000000
   query left extend gap score: 0.000000
   query right open gap score: 0.000000
   query right extend gap score: 0.000000
   mode: global
>>>

Soporte para herramientas de alineación de secuencias

Biopython proporciona una interfaz para muchas herramientas de alineación de secuencias a través del módulo Bio.Align.Applications. Algunas de las herramientas se enumeran a continuación:

  • ClustalW
  • MUSCLE
  • EMBOSS aguja y agua

Escribamos un ejemplo simple en Biopython para crear una alineación de secuencia a través de la herramienta de alineación más popular, ClustalW.

Step 1 - Descarga el programa Clustalw desde http://www.clustal.org/download/current/e instalarlo. Además, actualice la RUTA del sistema con la ruta de instalación "clustal".

Step 2 - importar ClustalwCommanLine desde el módulo Bio.Align.Applications.

>>> from Bio.Align.Applications import ClustalwCommandline

Step 3 - Configure cmd llamando a ClustalwCommanLine con el archivo de entrada, opuntia.fasta disponible en el paquete Biopython. https://raw.githubusercontent.com/biopython/biopython/master/Doc/examples/opuntia.fasta

>>> cmd = ClustalwCommandline("clustalw2",
infile="/path/to/biopython/sample/opuntia.fasta")
>>> print(cmd)
clustalw2 -infile=fasta/opuntia.fasta

Step 4 - Llamar a cmd () ejecutará el comando clustalw y dará una salida del archivo de alineación resultante, opuntia.aln.

>>> stdout, stderr = cmd()

Step 5 - Lea e imprima el archivo de alineación como se muestra a continuación -

>>> from Bio import AlignIO
>>> align = AlignIO.read("/path/to/biopython/sample/opuntia.aln", "clustal")
>>> print(align)
SingleLetterAlphabet() alignment with 7 rows and 906 columns
TATACATTAAAGAAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA
gi|6273285|gb|AF191659.1|AF191
TATACATTAAAGAAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA
gi|6273284|gb|AF191658.1|AF191
TATACATTAAAGAAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA
gi|6273287|gb|AF191661.1|AF191
TATACATAAAAGAAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA
gi|6273286|gb|AF191660.1|AF191
TATACATTAAAGGAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA
gi|6273290|gb|AF191664.1|AF191
TATACATTAAAGGAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA
gi|6273289|gb|AF191663.1|AF191
TATACATTAAAGGAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA
gi|6273291|gb|AF191665.1|AF191
>>>