序列比对是按特定顺序排列两个或多个序列(DNA,RNA或蛋白质序列)以识别它们之间相似区域的过程。
识别相似区域使我们能够推断出许多信息,例如物种之间保守的性状,遗传上不同物种的接近程度,物种如何进化等。Biopython为序列比对提供了广泛的支持。
让我们学习本章中Biopython提供的一些重要功能-
Biopython提供了一个模块Bio.AlignIO
来读取和写入序列比对。在生物信息学中,有许多格式可用于指定序列比对数据,类似于早期学习的序列数据。Bio.AlignIO
提供类似于Bio.SeqIO
的API,不同之处在于Bio.SeqIO
处理序列数据,而Bio.AlignIO
处理序列比对数据。
在开始学习之前,我们可以从Internet下载样本序列比对文件。要下载示例文件,请按照以下步骤操作:
第1步 - 打开浏览器,然后访问 - http://pfam.xfam.org/family/browse 网站。它将按字母顺序显示所有Pfam系列。
第2步 - 选择任何一个种子数量较少的家庭。它包含最少的数据,使我们能够轻松进行比对。在这里,我们选择/单击了PF18225,它会打开 http://pfam.xfam.org/family/PF18225 并显示有关它的完整详细信息,包括序列比对。
第3步 - 转到比对部分,并以Stockholm格式下载序列比对文件(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
方法-
>>> 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
在此,序列比对类型是指可以是全局或局部的比对类型。全局类型是通过考虑整个序列来寻找序列比对。局部类型也可以通过查看给定序列的子集来找到序列比对。这会比较乏味,但是可以更好地了解给定序列之间的相似性。
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)
第4步 - 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
模块为许多序列比对工具提供接口。下面列出了一些工具 -
让我们在Biopython中编写一个简单的示例,以通过比对工具ClustalW创建序列比对。
第2步 - 从 http://www.clustal.org/download/current/ 下载Clustalw程序并安装它。另外,将“ clustal”安装路径添加到系统PATH。
第2步 - 从模块Bio.Align.Applications
导入ClustalwCommanLine
。
>>> from Bio.Align.Applications import ClustalwCommandline
第3步 - 通过使用输入文件opuntia.fasta
调用ClustalwCommanLine
来设置cmd,该文件位于Biopython包中。从以下URL下载文件: 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 >>>