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
>>>