对齐 (skbio.alignment

此模块提供计算和操作序列对齐的功能。DNA、RNA和蛋白质序列可以对齐,也可以使用自定义字母表排列序列。

数据结构

TabularMSA \(序列[, metadata, ...] )

以表格(行/列)形式存储多序列对齐方式。

优化(即,生产就绪)校准算法

StripedSmithWaterman 

执行条纹(带状)Smith Waterman对齐。

AlignmentStructure 

包装对齐c结构的结果,以便Python可以访问它

local_pairwise_align_ssw \(序列1,…)

将查询和目标序列与Striped Smith Waterman对齐。

慢(即仅用于教育目的)对齐算法

global_pairwise_align_nucleotide \(序列1,序列2)

全球比对核苷酸序列或与Needleman Wunsch比对

global_pairwise_align_protein \(序列1,序列2[, ...] )

将一对蛋白质序列或序列与neederman-Wunsch进行全球比对

global_pairwise_align \(序列1,序列2\ [, ...] )

全局对齐一对Seq或与Needleman Wunsch对齐

local_pairwise_align_nucleotide \(序列1,序列2)

两个核苷酸序列与Smith Waterman精确对齐

local_pairwise_align_protein \(序列1,序列2[, ...] )

精确地将两个蛋白质序列与Smith Waterman对齐

local_pairwise_align \(序列1,序列2,…)

局部对齐两个seq与Smith Waterman

一般功能

make_identity_substitution_matrix … [, ...] )

生成替换矩阵,其中所有匹配项得分相等

数据结构示例

将两个先前排列好的DNA序列装入 TabularMSA 对象,使用序列ID作为MSA的索引:

>>> from skbio import TabularMSA, DNA
>>> seqs = [DNA("ACC--G-GGTA..", metadata={'id': "seq1"}),
...         DNA("TCC--G-GGCA..", metadata={'id': "seq2"})]
>>> msa = TabularMSA(seqs, minter='id')
>>> msa
TabularMSA[DNA]
----------------------
Stats:
    sequence count: 2
    position count: 13
----------------------
ACC--G-GGTA..
TCC--G-GGCA..
>>> msa.index
Index(['seq1', 'seq2'], dtype='object')

对齐算法示例

优化对齐算法实例

使用方便 local_pairwise_align_ssw 功能:

>>> from skbio.alignment import local_pairwise_align_ssw
>>> alignment, score, start_end_positions = local_pairwise_align_ssw(
...     DNA("ACTAAGGCTCTCTACCCCTCTCAGAGA"),
...     DNA("ACTAAGGCTCCTAACCCCCTTTTCTCAGA")
... )
>>> alignment
TabularMSA[DNA]
------------------------------
Stats:
    sequence count: 2
    position count: 30
------------------------------
ACTAAGGCTCTCT-ACCCC----TCTCAGA
ACTAAGGCTC-CTAACCCCCTTTTCTCAGA
>>> score
27
>>> start_end_positions
[(0, 24), (0, 28)]

使用 StripedSmithWaterman 对象:

>>> from skbio.alignment import StripedSmithWaterman
>>> query = StripedSmithWaterman("ACTAAGGCTCTCTACCCCTCTCAGAGA")
>>> alignment = query("AAAAAACTCTCTAAACTCACTAAGGCTCTCTACCCCTCTTCAGAGAAGTCGA")
>>> print(alignment)
ACTAAGGCTC...
ACTAAGGCTC...
Score: 49
Length: 28

使用 StripedSmithWaterman 以有效的方式为多个目标创建对象并查找对齐的序列表示:

>>> from skbio.alignment import StripedSmithWaterman
>>> alignments = []
>>> target_sequences = [
...     "GCTAACTAGGCTCCCTTCTACCCCTCTCAGAGA",
...     "GCCCAGTAGCTTCCCAATATGAGAGCATCAATTGTAGATCGGGCC",
...     "TCTATAAGATTCCGCATGCGTTACTTATAAGATGTCTCAACGG",
...     "TAGAGATTAATTGCCACTGCCAAAATTCTG"
... ]
>>> query_sequence = "ACTAAGGCTCTCTACCCCTCTCAGAGA"
>>> query = StripedSmithWaterman(query_sequence)
>>> for target_sequence in target_sequences:
...     alignment = query(target_sequence)
...     alignments.append(alignment)
...
>>> print(alignments[0])
ACTAAGGCTC...
ACT-AGGCTC...
Score: 38
Length: 30
>>> print(alignments[0].aligned_query_sequence)
ACTAAGGCTC---TCTACCCCTCTCAGAGA
>>> print(alignments[0].aligned_target_sequence)
ACT-AGGCTCCCTTCTACCCCTCTCAGAGA

慢对齐算法实例

scikit-bio还提供了smithwaterman和Needleman-Wunsch对齐的纯Python实现。这些方法比上述方法慢得多,但作为有用的教育示例,因为它们更易于实验。提供蛋白质和核苷酸序列的局部和全局比对功能。这个 global*local* 函数在所应用的底层算法中有所不同 (global* 用针线工-巫师 local* 使用史密斯·沃特曼),以及 *protein*nucleotide 在他们的默认比赛得分,不匹配和差距。

在这里,我们使用11的缺口开放惩罚和1的缺口扩展惩罚来局部对齐一对蛋白质序列(换句话说,打开一个新的缺口比扩大一个现有的缺口要昂贵得多)。

>>> from skbio import Protein
>>> from skbio.alignment import local_pairwise_align_protein
>>> s1 = Protein("HEAGAWGHEE")
>>> s2 = Protein("PAWHEAE")
>>> alignment, score, start_end_positions = local_pairwise_align_protein(
...     s1, s2, 11, 1)

这将返回一个 skbio.TabularMSA 对象、对齐分数和每个对齐序列的开始/结束位置:

>>> alignment
TabularMSA[Protein]
---------------------
Stats:
    sequence count: 2
    position count: 5
---------------------
AWGHE
AW-HE
>>> score
25.0
>>> start_end_positions
[(4, 8), (1, 4)]

同样,我们可以对核苷酸序列进行全局比对:

>>> from skbio import DNA
>>> from skbio.alignment import global_pairwise_align_nucleotide
>>> s1 = DNA("GCGTGCCTAAGGTATGCAAG")
>>> s2 = DNA("ACGTGCCTAGGTACGCAAG")
>>> alignment, score, start_end_positions = global_pairwise_align_nucleotide(
...     s1, s2)
>>> alignment
TabularMSA[DNA]
----------------------
Stats:
    sequence count: 2
    position count: 20
----------------------
GCGTGCCTAAGGTATGCAAG
ACGTGCCTA-GGTACGCAAG