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 步 − 选择种子值较少的任何一个家庭。 它包含最少的数据,使我们能够轻松地进行比对。 在这里,我们选择/单击 PF18225,它会打开转到 http://pfam.xfam.org/family/PF18225 并显示有关它的完整详细信息,包括序列比对。

第 3 步 − 转到比对部分并下载斯德哥尔摩格式的序列比对文件 (PF18225_seed.txt)。

让我们尝试使用 Bio.AlignIO 读取下载的序列比对文件,如下所示 −

导入Bio.AlignIO模块

>>> from Bio import AlignIO

使用读取方法读取比对。 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 方法返回可迭代的比对对象,它可以被迭代以获得实际的比对方式。


成对序列比对

成对序列比对一次只比较两个序列,并提供可能的最佳序列比对。 Pairwise 易于理解,并且可以从生成的序列比对中推断出来。

Biopython 提供了一个特殊的模块Bio.pairwise2 来使用成对方法识别比对序列。 Biopython采用最佳算法寻找比对序列,与其他软件不相上下。

让我们编写一个示例,使用成对模块查找两个简单和假设序列的序列比对。 这将帮助我们理解序列比对的概念以及如何使用 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

这里的序列比对类型是指比对类型,可以是global,也可以是 local. global 类型,就是考虑整个序列来寻找序列比对。 local. global类型也通过查看给定序列的子集来找到序列比对。 这会很乏味,但可以更好地了解给定序列之间的相似性。

  • 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 and water

让我们在 Biopython 中编写一个简单的示例,以通过最流行的比对工具 ClustalW 创建序列比对。

第 1 步 − 从 http://www.clustal.org/download/current/ 下载 Clustalw 程序并安装它。 此外,使用"clustal"安装路径更新系统路径。

第 2 步 − 从模块 Bio.Align.Applications 导入 ClustalwCommanLine。

>>> from Bio.Align.Applications import ClustalwCommandline

第 3 步 − 通过使用输入文件调用 ClustalwCommanLine 来设置 cmd,opuntia.fasta 在 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

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