- Biopython 教程
- Biopython - 首页
- Biopython - 简介
- Biopython - 安装
- 创建简单的应用程序
- Biopython - 序列
- 高级序列操作
- 序列 I/O 操作
- Biopython - 序列比对
- Biopython - BLAST 概述
- Biopython - Entrez 数据库
- Biopython - PDB 模块
- Biopython - 基序对象
- Biopython - BioSQL 模块
- Biopython - 群体遗传学
- Biopython - 基因组分析
- Biopython - 表型微阵列
- Biopython - 绘图
- Biopython - 聚类分析
- Biopython - 机器学习
- Biopython - 测试技术
- Biopython 资源
- Biopython - 快速指南
- Biopython - 有用资源
- Biopython - 讨论
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
>>>