Biopython - Wyrównanie sekwencji

Sequence alignment to proces układania dwóch lub więcej sekwencji (sekwencji DNA, RNA lub białek) w określonej kolejności w celu określenia regionu podobieństwa między nimi.

Zidentyfikowanie podobnego regionu pozwala nam wnioskować o wielu informacjach, takich jak, jakie cechy są zachowane między gatunkami, jak blisko są różne gatunki genetycznie, jak ewoluują gatunki, itp. Biopython zapewnia szerokie wsparcie dla dopasowania sekwencji.

Nauczmy się niektórych ważnych funkcji udostępnionych przez Biopythona w tym rozdziale -

Parsing Sequence Alignment

Biopython dostarcza moduł Bio.AlignIO do odczytu i zapisu wyrównania sekwencji. W bioinformatyce dostępnych jest wiele formatów służących do określania danych dopasowania sekwencji, podobnych do wcześniej nauczonych danych o sekwencjach. Bio.AlignIO zapewnia API podobne do Bio.SeqIO, z wyjątkiem tego, że Bio.SeqIO działa na danych sekwencji, a Bio.AlignIO działa na danych dopasowania sekwencji.

Zanim zaczniemy się uczyć, pobierzmy z Internetu przykładowy plik dopasowania sekwencji.

Aby pobrać przykładowy plik, wykonaj poniższe czynności -

Step 1 - Otwórz swoją ulubioną przeglądarkę i przejdź do http://pfam.xfam.org/family/browsestronie internetowej. Wyświetli wszystkie rodziny Pfam w kolejności alfabetycznej.

Step 2- Wybierz jedną rodzinę, która ma mniejszą liczbę wartości nasion. Zawiera minimalną ilość danych i umożliwia nam łatwą pracę z wyrównaniem. Tutaj wybraliśmy / kliknęliśmy PF18225 i otwiera się przejdź dohttp://pfam.xfam.org/family/PF18225 i pokazuje pełne szczegóły na ten temat, w tym dopasowanie sekwencji.

Step 3 - Przejdź do sekcji wyrównywania i pobierz plik wyrównywania sekwencji w formacie sztokholmskim (PF18225_seed.txt).

Spróbujmy odczytać pobrany plik wyrównania sekwencji za pomocą Bio.AlignIO jak poniżej -

Importuj moduł Bio.AlignIO

>>> from Bio import AlignIO

Czytaj wyrównanie metodą odczytu. read służy do odczytu pojedynczych danych wyrównania dostępnych w danym pliku. Jeśli podany plik zawiera wiele wyrównania, możemy użyć metody parsowania. metoda parse zwraca iterowalny obiekt wyrównania podobny do metody parse w module Bio.SeqIO.

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

Wydrukuj obiekt wyrównania.

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

Możemy również sprawdzić sekwencje (SeqRecord) dostępne w dopasowaniu, a także poniżej -

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

Wiele linii trasowania

Ogólnie większość plików dopasowywania sekwencji zawiera pojedyncze dane dopasowania i są one wystarczające do użycia readmetoda, aby go przeanalizować. W koncepcji dopasowania wielu sekwencji, dwie lub więcej sekwencji jest porównywanych w celu uzyskania najlepszych dopasowań podciągów między nimi i daje w wyniku dopasowanie wielu sekwencji w jednym pliku.

Jeśli format dopasowania sekwencji wejściowej zawiera więcej niż jedno wyrównanie sekwencji, musimy użyć parse metoda zamiast read metoda określona poniżej -

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

Tutaj metoda parse zwraca iterowalny obiekt wyrównania i może być iterowana, aby uzyskać rzeczywiste wyrównania.

Wyrównanie sekwencji par

Pairwise sequence alignment porównuje tylko dwie sekwencje na raz i zapewnia najlepsze możliwe dopasowanie sekwencji. Pairwise jest łatwy do zrozumienia i wyjątkowy do wywnioskowania z wynikowego dopasowania sekwencji.

Biopython udostępnia specjalny moduł, Bio.pairwise2zidentyfikować sekwencję dopasowania metodą par. Biopython stosuje najlepszy algorytm do znalezienia sekwencji dopasowania i jest porównywalny z innym oprogramowaniem.

Napiszmy przykład, aby znaleźć dopasowanie sekwencji dwóch prostych i hipotetycznych sekwencji za pomocą modułu parami. Pomoże nam to zrozumieć koncepcję dopasowania sekwencji i jak je zaprogramować za pomocą Biopythona.

Krok 1

Zaimportuj moduł pairwise2 poleceniem podanym poniżej -

>>> from Bio import pairwise2

Krok 2

Utwórz dwie sekwencje, seq1 i seq2 -

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

Krok 3

Wywołaj metodę pairwise2.align.globalxx wraz z sekwencjami seq1 i seq2, aby znaleźć wyrównania, używając poniższego wiersza kodu -

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

Tutaj, globalxxwykonuje właściwą pracę i znajduje wszystkie najlepsze możliwe dopasowania w podanych sekwencjach. Właściwie Bio.pairwise2 zapewnia całkiem spory zestaw metod, które są zgodne z poniższą konwencją, aby znaleźć wyrównania w różnych scenariuszach.

<sequence alignment type>XY

Tutaj typ przyrównania sekwencji odnosi się do typu przyrównania, który może być globalny lub lokalny. typ globalny polega na znajdowaniu dopasowania sekwencji, biorąc pod uwagę całą sekwencję. typ lokalny polega na znalezieniu dopasowania sekwencji poprzez sprawdzenie również podzbioru danych sekwencji. Będzie to żmudne, ale pozwoli lepiej zrozumieć podobieństwo między podanymi sekwencjami.

  • X odnosi się do wyniku dopasowania. Możliwe wartości to x (dokładne dopasowanie), m (wynik oparty na identycznych znakach), d (słownik dostarczony przez użytkownika ze znakiem i wynikiem dopasowania) i wreszcie c (funkcja zdefiniowana przez użytkownika zapewniająca niestandardowy algorytm oceniania).

  • Y odnosi się do kary za przerwę. Możliwe wartości to x (brak kar za przerwy), s (te same kary dla obu sekwencji), d (różne kary za każdą sekwencję) i wreszcie c (funkcja zdefiniowana przez użytkownika w celu zapewnienia niestandardowych kar za przerwy)

Zatem localds jest również prawidłową metodą, która znajduje dopasowanie sekwencji przy użyciu techniki lokalnego dopasowania, słownik dostarczony przez użytkownika dla dopasowań i nałożoną przez użytkownika karę za przerwę dla obu sekwencji.

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

Tutaj blosum62 odnosi się do słownika dostępnego w module pairwise2, aby zapewnić wynik dopasowania. -10 odnosi się do kary za otwarcie przerwy, a -1 odnosi się do kary za wydłużenie przerwy.

Krok 4

Zrób pętlę nad iterowalnym obiektem wyrównywania, pobierz każdy obiekt wyrównywania i wydrukuj go.

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

Krok 5

Moduł Bio.pairwise2 zapewnia metodę formatowania, format_alignment w celu lepszej wizualizacji wyniku -

>>> 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 dostarcza również inny moduł do wyrównywania sekwencji, Align. Ten moduł zapewnia inny zestaw API do prostego ustawienia parametrów, takich jak algorytm, tryb, wynik dopasowania, kary za przerwy itp. Prosty rzut oka na obiekt Align jest następujący -

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

Obsługa narzędzi do wyrównywania sekwencji

Biopython zapewnia interfejs do wielu narzędzi do dopasowywania sekwencji poprzez moduł Bio.Align.Applications. Niektóre z narzędzi są wymienione poniżej -

  • ClustalW
  • MUSCLE
  • Igła EMBOSS i woda

Napiszmy prosty przykład w Biopythonie, aby stworzyć wyrównanie sekwencji za pomocą najpopularniejszego narzędzia do dopasowywania, ClustalW.

Step 1 - Pobierz program Clustalw z witryny http://www.clustal.org/download/current/i zainstaluj. Zaktualizuj również ścieżkę systemową PATH za pomocą „klastrowej” ścieżki instalacji.

Step 2 - importuj ClustalwCommanLine z modułu Bio.Align.Applications.

>>> from Bio.Align.Applications import ClustalwCommandline

Step 3 - Ustaw cmd, wywołując ClustalwCommanLine z plikiem wejściowym opuntia.fasta dostępnym w pakiecie 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 - Wywołanie cmd () uruchomi polecenie clustalw i wyświetli wynikowy plik wyrównania, opuntia.aln.

>>> stdout, stderr = cmd()

Step 5 - Przeczytaj i wydrukuj plik wyrównania, jak poniżej -

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