Biopython - 序列比對



序列比對是指將兩個或多個序列(DNA、RNA或蛋白質序列)按照特定順序排列,以識別它們之間相似區域的過程。

識別相似區域使我們能夠推斷許多資訊,例如物種之間哪些性狀是保守的,不同物種的基因相似程度如何,物種如何進化等等。Biopython 為序列比對提供了廣泛的支援。

讓我們在本節中學習 Biopython 提供的一些重要功能:

解析序列比對

Biopython 提供了一個模組 Bio.AlignIO 來讀取和寫入序列比對。在生物資訊學中,有很多格式可以指定序列比對資料,類似於前面學習的序列資料。Bio.AlignIO 提供與 Bio.SeqIO 類似的 API,不同之處在於 Bio.SeqIO 用於處理序列資料,而 Bio.AlignIO 用於處理序列比對資料。

在開始學習之前,讓我們從網際網路下載一個示例序列比對檔案。

要下載示例檔案,請按照以下步驟操作:

步驟 1 - 開啟您喜歡的瀏覽器,訪問 http://pfam.xfam.org/family/browse 網站。它將按字母順序顯示所有 Pfam 家族。

步驟 2 - 選擇任何一個 seed 值較少的家族。它包含最少的資料,使我們能夠輕鬆地處理比對。在這裡,我們選擇了 PF18225,它會開啟 http://pfam.xfam.org/family/PF18225 並顯示有關它的完整詳細資訊,包括序列比對。

步驟 3 - 轉到比對部分,下載 Stockholm 格式的序列比對檔案 (PF18225_seed.txt)。

讓我們嘗試使用 Bio.AlignIO 讀取下載的序列比對檔案,如下所示:

匯入 Bio.AlignIO 模組

>>> from Bio import AlignIO

使用 read 方法讀取比對。read 方法用於讀取給定檔案中可用的單個比對資料。如果給定檔案包含多個比對,我們可以使用 parse 方法。parse 方法返回可迭代的比對物件,類似於 Bio.SeqIO 模組中的 parse 方法。

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

列印比對物件。

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

我們還可以檢查比對中可用的序列 (SeqRecord),如下所示:

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

多序列比對

通常,大多數序列比對檔案包含單個比對資料,使用read 方法對其進行解析就足夠了。在多序列比對的概念中,比較兩個或多個序列以找到它們之間最佳的子序列匹配,並在單個檔案中產生多序列比對。

如果輸入序列比對格式包含多個序列比對,則需要使用parse 方法而不是read 方法,如下所示:

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

在這裡,parse 方法返回可迭代的比對物件,可以對其進行迭代以獲取實際的比對。

成對序列比對

成對序列比對一次只比較兩個序列,並提供最佳可能的序列比對。成對比對易於理解,並且易於從生成的序列比對中推斷。

Biopython 提供了一個特殊的模組Bio.pairwise2,用於使用成對方法識別比對序列。Biopython 應用最佳演算法來查詢比對序列,並且與其他軟體不相上下。

讓我們編寫一個示例,使用 pairwise 模組查詢兩個簡單且假設的序列的序列比對。這將幫助我們理解序列比對的概念以及如何使用 Biopython 對其進行程式設計。

步驟 1

使用以下命令匯入模組pairwise2

>>> from Bio import pairwise2

步驟 2

建立兩個序列,seq1 和 seq2:

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

步驟 3

呼叫方法 pairwise2.align.globalxx 以及 seq1 和 seq2,使用以下程式碼行查詢比對:

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

在這裡,globalxx 方法執行實際工作,並找到給定序列中所有可能的最佳比對。實際上,Bio.pairwise2 提供了一組方法,它們遵循以下約定來在不同情況下查詢比對。

<sequence alignment type>XY

這裡,序列比對型別指的是比對型別,可以是全域性區域性。全域性型別是透過考慮整個序列來查詢序列比對。區域性型別是透過檢視給定序列的子集來查詢序列比對。這將很繁瑣,但能更好地瞭解給定序列之間的相似性。

  • X 指的是匹配得分。可能的值為 x(精確匹配)、m(基於相同字元的得分)、d(使用者提供的帶有字元和匹配得分的字典)以及最終的 c(使用者自定義函式,用於提供自定義評分演算法)。

  • Y 指的是空位罰分。可能的值為 x(無空位罰分)、s(兩個序列的罰分相同)、d(每個序列的罰分不同)以及最終的 c(使用者自定義函式,用於提供自定義空位罰分)。

因此,localds 也是一個有效的方法,它使用區域性比對技術、使用者提供的匹配字典和使用者為兩個序列提供的空位罰分來查詢序列比對。

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

這裡,blosum62 指的是 pairwise2 模組中可用的字典,用於提供匹配得分。-10 指的是空位開啟罰分,-1 指的是空位擴充套件罰分。

步驟 4

遍歷可迭代的比對物件,獲取每個單獨的比對物件並列印它。

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

步驟 5

Bio.pairwise2 模組提供了一個格式化方法 format_alignment,可以更好地視覺化結果:

>>> 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 還提供另一個模組來進行序列比對,Align。該模組提供了一組不同的 API 來簡化引數設定,例如演算法、模式、匹配得分、空位罰分等。對 Align 物件的簡單瞭解如下:

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

對序列比對工具的支援

Biopython 透過 Bio.Align.Applications 模組為許多序列比對工具提供介面。列出了一些工具:

  • ClustalW
  • MUSCLE
  • EMBOSS needle 和 water

讓我們在 Biopython 中編寫一個簡單的示例,透過最流行的比對工具 ClustalW 建立序列比對。

步驟 1 - 從 http://www.clustal.org/download/current/ 下載 Clustalw 程式並安裝它。此外,使用“clustal”安裝路徑更新系統 PATH。

步驟 2 - 從模組 Bio.Align.Applications 匯入 ClustalwCommanLine。

>>> from Bio.Align.Applications import ClustalwCommandline

步驟 3 - 透過使用 Biopython 包中可用的輸入檔案 opuntia.fasta 呼叫 ClustalwCommanLine 設定 cmd。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

步驟 4 - 呼叫 cmd() 將執行 clustalw 命令,並輸出生成的比對檔案 opuntia.aln。

>>> stdout, stderr = cmd()

步驟 5 - 讀取並列印比對檔案,如下所示:

>>> 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
>>>
廣告
© . All rights reserved.