Biopython - Allineamenti di sequenza
Sequence alignment è il processo di disposizione di due o più sequenze (di DNA, RNA o sequenze proteiche) in un ordine specifico per identificare la regione di somiglianza tra di loro.
Identificare la regione simile ci consente di dedurre molte informazioni come quali tratti sono conservati tra le specie, quanto sono vicine le diverse specie geneticamente, come le specie si evolvono, ecc. Biopython fornisce un ampio supporto per l'allineamento delle sequenze.
Impariamo alcune delle caratteristiche importanti fornite da Biopython in questo capitolo:
Parsing Sequence Alignment
Biopython fornisce un modulo, Bio.AlignIO per leggere e scrivere allineamenti di sequenza. In bioinformatica, sono disponibili molti formati per specificare i dati di allineamento di sequenza simili ai dati di sequenza appresi in precedenza. Bio.AlignIO fornisce API simili a Bio.SeqIO tranne per il fatto che Bio.SeqIO funziona sui dati della sequenza e Bio.AlignIO lavora sui dati di allineamento della sequenza.
Prima di iniziare a imparare, scarichiamo un file di allineamento della sequenza di esempio da Internet.
Per scaricare il file di esempio, seguire i passaggi seguenti:
Step 1 - Apri il tuo browser preferito e vai a http://pfam.xfam.org/family/browsesito web. Mostrerà tutte le famiglie Pfam in ordine alfabetico.
Step 2- Scegli una famiglia con un numero inferiore di valore seme. Contiene dati minimi e ci consente di lavorare facilmente con l'allineamento. Qui, abbiamo selezionato / cliccato PF18225 e si apre vai ahttp://pfam.xfam.org/family/PF18225 e mostra i dettagli completi su di esso, inclusi gli allineamenti di sequenza.
Step 3 - Vai alla sezione di allineamento e scarica il file di allineamento della sequenza in formato Stoccolma (PF18225_seed.txt).
Proviamo a leggere il file di allineamento della sequenza scaricato utilizzando Bio.AlignIO come di seguito -
Importa modulo Bio.AlignIO
>>> from Bio import AlignIO
Leggere l'allineamento utilizzando il metodo di lettura. Il metodo read viene utilizzato per leggere i dati di allineamento singolo disponibili nel file specificato. Se il file dato contiene molti allineamenti, possiamo usare il metodo di analisi. Il metodo parse restituisce un oggetto di allineamento iterabile simile al metodo parse nel modulo Bio.SeqIO.
>>> alignment = AlignIO.read(open("PF18225_seed.txt"), "stockholm")
Stampa l'oggetto di allineamento.
>>> 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
>>>
Possiamo anche controllare le sequenze (SeqRecord) disponibili nell'allineamento così come sotto -
>>> for align in alignment:
... print(align.seq)
...
MQNTPAERLPAIIEKAKSKHDINVWLLDRQGRDLLEQRVPAKVATVANQLRGRKRRAFARHREGP
AKQRGIAGLEEWLHRLDHSEAIPIFLIDEAGKDLLEREVPADITA---RLDRRREHGEHGVRKKP
ARRHGQEYFQQWLERQPKKVKEQVFAVDQFGRELLGRPLPEDMAPMLIALNYRNRESHAQVDKKP
TRRHGPESFRFWLERQPVEARDRIYAIDRSGAEILDRPIPRGMAPLFKVLSFRNREDQGLVNNKP
AINRNTQQLTQDLRAMPNWSLRFVYIVDRNNQDLLKRPLPPGIMVLAPRLTAKHPYDKVQDRNRK
AVNATEREFTERIRTLPHWARRNVFVLDSQGFEIFDRELPSPVADLMRKLDLDRPFKKLERKNRT
>>>
Allineamenti multipli
In generale, la maggior parte dei file di allineamento della sequenza contiene dati di allineamento singolo ed è sufficiente utilizzarli readmetodo per analizzarlo. Nel concetto di allineamento di sequenze multiple, due o più sequenze vengono confrontate per ottenere le migliori corrispondenze di sottosequenze tra di loro e risulta in un allineamento di sequenze multiple in un singolo file.
Se il formato di allineamento della sequenza di input contiene più di un allineamento di sequenza, è necessario utilizzarlo parse metodo invece di read metodo come specificato di seguito -
>>> 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
>>>
Qui, il metodo parse restituisce un oggetto di allineamento iterabile e può essere iterato per ottenere allineamenti effettivi.
Allineamento della sequenza a coppie
Pairwise sequence alignment confronta solo due sequenze alla volta e fornisce i migliori allineamenti di sequenza possibili. Pairwise è facile da capire ed eccezionale da dedurre dall'allineamento della sequenza risultante.
Biopython fornisce un modulo speciale, Bio.pairwise2per identificare la sequenza di allineamento utilizzando il metodo a coppie. Biopython applica il miglior algoritmo per trovare la sequenza di allineamento ed è alla pari con altri software.
Scriviamo un esempio per trovare l'allineamento di sequenza di due sequenze semplici e ipotetiche utilizzando il modulo pairwise. Questo ci aiuterà a capire il concetto di allineamento di sequenza e come programmarlo utilizzando Biopython.
Passo 1
Importa il modulo pairwise2 con il comando dato di seguito -
>>> from Bio import pairwise2
Passo 2
Crea due sequenze, seq1 e seq2 -
>>> from Bio.Seq import Seq
>>> seq1 = Seq("ACCGGT")
>>> seq2 = Seq("ACGT")
Passaggio 3
Chiama il metodo pairwise2.align.globalxx insieme a seq1 e seq2 per trovare gli allineamenti utilizzando la riga di codice sottostante -
>>> alignments = pairwise2.align.globalxx(seq1, seq2)
Qui, globalxxIl metodo esegue il lavoro effettivo e trova tutti i migliori allineamenti possibili nelle sequenze date. In realtà, Bio.pairwise2 fornisce una serie di metodi che seguono la convenzione seguente per trovare allineamenti in diversi scenari.
<sequence alignment type>XY
Qui, il tipo di allineamento della sequenza si riferisce al tipo di allineamento che può essere globale o locale. Il tipo globale trova l'allineamento della sequenza prendendo in considerazione l'intera sequenza. Il tipo locale sta trovando l'allineamento della sequenza esaminando anche il sottoinsieme delle sequenze date. Questo sarà noioso ma fornisce un'idea migliore della somiglianza tra le sequenze date.
X si riferisce al punteggio corrispondente. I valori possibili sono x (corrispondenza esatta), m (punteggio basato su caratteri identici), d (dizionario fornito dall'utente con carattere e punteggio di corrispondenza) e infine c (funzione definita dall'utente per fornire algoritmo di punteggio personalizzato).
Y si riferisce alla penalità del gap. I valori possibili sono x (nessuna penalità per gap), s (stesse penalità per entrambe le sequenze), d (penalità diverse per ogni sequenza) e infine c (funzione definita dall'utente per fornire penalità per gap personalizzate)
Quindi, localds è anche un metodo valido, che trova l'allineamento della sequenza utilizzando la tecnica di allineamento locale, il dizionario fornito dall'utente per le corrispondenze e la penalità del gap fornita dall'utente per entrambe le sequenze.
>>> test_alignments = pairwise2.align.localds(seq1, seq2, blosum62, -10, -1)
Qui, blosum62 fa riferimento a un dizionario disponibile nel modulo pairwise2 per fornire il punteggio di corrispondenza. -10 si riferisce alla penalità di gap aperto e -1 si riferisce alla penalità di estensione del gap.
Passaggio 4
Esegui il ciclo sull'oggetto allineamenti iterabili e ottieni ogni singolo oggetto di allineamento e stampalo.
>>> 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)
Passaggio 5
Il modulo Bio.pairwise2 fornisce un metodo di formattazione, format_alignment per visualizzare meglio il risultato -
>>> 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 fornisce anche un altro modulo per eseguire l'allineamento delle sequenze, Align. Questo modulo fornisce un diverso set di API per la semplice impostazione di parametri come algoritmo, modalità, punteggio di corrispondenza, penalità di gap, ecc. Una semplice occhiata all'oggetto Align è la seguente:
>>> 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
>>>
Supporto per strumenti di allineamento sequenza
Biopython fornisce l'interfaccia a molti strumenti di allineamento di sequenze tramite il modulo Bio.Align.Applications. Alcuni degli strumenti sono elencati di seguito:
- ClustalW
- MUSCLE
- EMBOSS ago e acqua
Scriviamo un semplice esempio in Biopython per creare l'allineamento della sequenza attraverso lo strumento di allineamento più popolare, ClustalW.
Step 1 - Scarica il programma Clustalw da http://www.clustal.org/download/current/e installalo. Inoltre, aggiorna il PATH di sistema con il percorso di installazione "clustal".
Step 2 - importa ClustalwCommanLine dal modulo Bio.Align.Applications.
>>> from Bio.Align.Applications import ClustalwCommandline
Step 3 - Imposta cmd chiamando ClustalwCommanLine con il file di input, opuntia.fasta disponibile nel pacchetto 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 - La chiamata a cmd () eseguirà il comando clustalw e fornirà un output del file di allineamento risultante, opuntia.aln.
>>> stdout, stderr = cmd()
Step 5 - Leggere e stampare il file di allineamento come di seguito -
>>> 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
>>>