Bio.Align 套件
子套件
- Bio.Align.Applications 套件
- 模組內容
MuscleCommandline
MuscleCommandline.__init__()
MuscleCommandline.anchors
MuscleCommandline.anchorspacing
MuscleCommandline.brenner
MuscleCommandline.center
MuscleCommandline.cluster
MuscleCommandline.cluster1
MuscleCommandline.cluster2
MuscleCommandline.clw
MuscleCommandline.clwout
MuscleCommandline.clwstrict
MuscleCommandline.clwstrictout
MuscleCommandline.core
MuscleCommandline.diagbreak
MuscleCommandline.diaglength
MuscleCommandline.diagmargin
MuscleCommandline.diags
MuscleCommandline.dimer
MuscleCommandline.distance1
MuscleCommandline.distance2
MuscleCommandline.fasta
MuscleCommandline.fastaout
MuscleCommandline.gapextend
MuscleCommandline.gapopen
MuscleCommandline.group
MuscleCommandline.html
MuscleCommandline.htmlout
MuscleCommandline.hydro
MuscleCommandline.hydrofactor
MuscleCommandline.in1
MuscleCommandline.in2
MuscleCommandline.input
MuscleCommandline.le
MuscleCommandline.log
MuscleCommandline.loga
MuscleCommandline.matrix
MuscleCommandline.maxdiagbreak
MuscleCommandline.maxhours
MuscleCommandline.maxiters
MuscleCommandline.maxtrees
MuscleCommandline.minbestcolscore
MuscleCommandline.minsmoothscore
MuscleCommandline.msf
MuscleCommandline.msfout
MuscleCommandline.noanchors
MuscleCommandline.nocore
MuscleCommandline.objscore
MuscleCommandline.out
MuscleCommandline.phyi
MuscleCommandline.phyiout
MuscleCommandline.phys
MuscleCommandline.physout
MuscleCommandline.profile
MuscleCommandline.quiet
MuscleCommandline.refine
MuscleCommandline.refinew
MuscleCommandline.refinewindow
MuscleCommandline.root1
MuscleCommandline.root2
MuscleCommandline.scorefile
MuscleCommandline.seqtype
MuscleCommandline.smoothscoreceil
MuscleCommandline.smoothwindow
MuscleCommandline.sp
MuscleCommandline.spn
MuscleCommandline.spscore
MuscleCommandline.stable
MuscleCommandline.sueff
MuscleCommandline.sv
MuscleCommandline.tree1
MuscleCommandline.tree2
MuscleCommandline.usetree
MuscleCommandline.verbose
MuscleCommandline.version
MuscleCommandline.weight1
MuscleCommandline.weight2
ClustalwCommandline
ClustalwCommandline.__init__()
ClustalwCommandline.align
ClustalwCommandline.bootlabels
ClustalwCommandline.bootstrap
ClustalwCommandline.case
ClustalwCommandline.check
ClustalwCommandline.clustering
ClustalwCommandline.convert
ClustalwCommandline.dnamatrix
ClustalwCommandline.endgaps
ClustalwCommandline.fullhelp
ClustalwCommandline.gapdist
ClustalwCommandline.gapext
ClustalwCommandline.gapopen
ClustalwCommandline.helixendin
ClustalwCommandline.helixendout
ClustalwCommandline.helixgap
ClustalwCommandline.help
ClustalwCommandline.hgapresidues
ClustalwCommandline.infile
ClustalwCommandline.iteration
ClustalwCommandline.kimura
ClustalwCommandline.ktuple
ClustalwCommandline.loopgap
ClustalwCommandline.matrix
ClustalwCommandline.maxdiv
ClustalwCommandline.maxseqlen
ClustalwCommandline.negative
ClustalwCommandline.newtree
ClustalwCommandline.newtree1
ClustalwCommandline.newtree2
ClustalwCommandline.nohgap
ClustalwCommandline.nopgap
ClustalwCommandline.nosecstr1
ClustalwCommandline.nosecstr2
ClustalwCommandline.noweights
ClustalwCommandline.numiter
ClustalwCommandline.options
ClustalwCommandline.outfile
ClustalwCommandline.outorder
ClustalwCommandline.output
ClustalwCommandline.outputtree
ClustalwCommandline.pairgap
ClustalwCommandline.pim
ClustalwCommandline.profile
ClustalwCommandline.profile1
ClustalwCommandline.profile2
ClustalwCommandline.pwdnamatrix
ClustalwCommandline.pwgapext
ClustalwCommandline.pwgapopen
ClustalwCommandline.pwmatrix
ClustalwCommandline.quicktree
ClustalwCommandline.quiet
ClustalwCommandline.range
ClustalwCommandline.score
ClustalwCommandline.secstrout
ClustalwCommandline.seed
ClustalwCommandline.seqno_range
ClustalwCommandline.seqnos
ClustalwCommandline.sequences
ClustalwCommandline.stats
ClustalwCommandline.strandendin
ClustalwCommandline.strandendout
ClustalwCommandline.strandgap
ClustalwCommandline.terminalgap
ClustalwCommandline.topdiags
ClustalwCommandline.tossgaps
ClustalwCommandline.transweight
ClustalwCommandline.tree
ClustalwCommandline.type
ClustalwCommandline.usetree
ClustalwCommandline.usetree1
ClustalwCommandline.usetree2
ClustalwCommandline.window
ClustalOmegaCommandline
ClustalOmegaCommandline.__init__()
ClustalOmegaCommandline.auto
ClustalOmegaCommandline.clusteringout
ClustalOmegaCommandline.clustersize
ClustalOmegaCommandline.dealign
ClustalOmegaCommandline.distmat_full
ClustalOmegaCommandline.distmat_full_iter
ClustalOmegaCommandline.distmat_in
ClustalOmegaCommandline.distmat_out
ClustalOmegaCommandline.force
ClustalOmegaCommandline.guidetree_in
ClustalOmegaCommandline.guidetree_out
ClustalOmegaCommandline.help
ClustalOmegaCommandline.hmm_input
ClustalOmegaCommandline.infile
ClustalOmegaCommandline.infmt
ClustalOmegaCommandline.isprofile
ClustalOmegaCommandline.iterations
ClustalOmegaCommandline.log
ClustalOmegaCommandline.long_version
ClustalOmegaCommandline.max_guidetree_iterations
ClustalOmegaCommandline.max_hmm_iterations
ClustalOmegaCommandline.maxnumseq
ClustalOmegaCommandline.maxseqlen
ClustalOmegaCommandline.outfile
ClustalOmegaCommandline.outfmt
ClustalOmegaCommandline.outputorder
ClustalOmegaCommandline.percentid
ClustalOmegaCommandline.profile1
ClustalOmegaCommandline.profile2
ClustalOmegaCommandline.residuenumber
ClustalOmegaCommandline.seqtype
ClustalOmegaCommandline.threads
ClustalOmegaCommandline.usekimura
ClustalOmegaCommandline.verbose
ClustalOmegaCommandline.version
ClustalOmegaCommandline.wrap
PrankCommandline
PrankCommandline.__init__()
PrankCommandline.F
PrankCommandline.codon
PrankCommandline.convert
PrankCommandline.d
PrankCommandline.dnafreqs
PrankCommandline.dots
PrankCommandline.f
PrankCommandline.fixedbranches
PrankCommandline.gapext
PrankCommandline.gaprate
PrankCommandline.kappa
PrankCommandline.longseq
PrankCommandline.m
PrankCommandline.matinitsize
PrankCommandline.matresize
PrankCommandline.maxbranches
PrankCommandline.mttranslate
PrankCommandline.nopost
PrankCommandline.notree
PrankCommandline.noxml
PrankCommandline.o
PrankCommandline.once
PrankCommandline.printnodes
PrankCommandline.pwdist
PrankCommandline.pwgenomic
PrankCommandline.pwgenomicdist
PrankCommandline.quiet
PrankCommandline.realbranches
PrankCommandline.rho
PrankCommandline.scalebranches
PrankCommandline.shortnames
PrankCommandline.showtree
PrankCommandline.showxml
PrankCommandline.skipins
PrankCommandline.t
PrankCommandline.termgap
PrankCommandline.translate
PrankCommandline.tree
PrankCommandline.twice
PrankCommandline.uselogs
PrankCommandline.writeanc
MafftCommandline
MafftCommandline.__init__()
MafftCommandline.LEXP
MafftCommandline.LOP
MafftCommandline.aamatrix
MafftCommandline.adjustdirection
MafftCommandline.adjustdirectionaccurately
MafftCommandline.amino
MafftCommandline.auto
MafftCommandline.bl
MafftCommandline.clustalout
MafftCommandline.dpparttree
MafftCommandline.ep
MafftCommandline.fastapair
MafftCommandline.fastaparttree
MafftCommandline.fft
MafftCommandline.fmodel
MafftCommandline.genafpair
MafftCommandline.globalpair
MafftCommandline.groupsize
MafftCommandline.input
MafftCommandline.input1
MafftCommandline.inputorder
MafftCommandline.jtt
MafftCommandline.lep
MafftCommandline.lexp
MafftCommandline.localpair
MafftCommandline.lop
MafftCommandline.maxiterate
MafftCommandline.memsave
MafftCommandline.namelength
MafftCommandline.nofft
MafftCommandline.noscore
MafftCommandline.nuc
MafftCommandline.op
MafftCommandline.partsize
MafftCommandline.parttree
MafftCommandline.phylipout
MafftCommandline.quiet
MafftCommandline.reorder
MafftCommandline.retree
MafftCommandline.seed
MafftCommandline.sixmerpair
MafftCommandline.thread
MafftCommandline.tm
MafftCommandline.treeout
MafftCommandline.weighti
DialignCommandline
DialignCommandline.__init__()
DialignCommandline.afc
DialignCommandline.afc_v
DialignCommandline.anc
DialignCommandline.cs
DialignCommandline.cw
DialignCommandline.ds
DialignCommandline.fa
DialignCommandline.ff
DialignCommandline.fn
DialignCommandline.fop
DialignCommandline.fsm
DialignCommandline.input
DialignCommandline.iw
DialignCommandline.lgs
DialignCommandline.lgs_t
DialignCommandline.lmax
DialignCommandline.lo
DialignCommandline.ma
DialignCommandline.mask
DialignCommandline.mat
DialignCommandline.mat_thr
DialignCommandline.max_link
DialignCommandline.min_link
DialignCommandline.mot
DialignCommandline.msf
DialignCommandline.n
DialignCommandline.nt
DialignCommandline.nta
DialignCommandline.o
DialignCommandline.ow
DialignCommandline.pst
DialignCommandline.smin
DialignCommandline.stars
DialignCommandline.stdo
DialignCommandline.ta
DialignCommandline.thr
DialignCommandline.xfr
ProbconsCommandline
ProbconsCommandline.__init__()
ProbconsCommandline.a
ProbconsCommandline.annot
ProbconsCommandline.clustalw
ProbconsCommandline.consistency
ProbconsCommandline.emissions
ProbconsCommandline.input
ProbconsCommandline.ir
ProbconsCommandline.pairs
ProbconsCommandline.paramfile
ProbconsCommandline.pre
ProbconsCommandline.train
ProbconsCommandline.verbose
ProbconsCommandline.viterbi
TCoffeeCommandline
TCoffeeCommandline.SEQ_TYPES
TCoffeeCommandline.__init__()
TCoffeeCommandline.convert
TCoffeeCommandline.gapext
TCoffeeCommandline.gapopen
TCoffeeCommandline.infile
TCoffeeCommandline.matrix
TCoffeeCommandline.mode
TCoffeeCommandline.outfile
TCoffeeCommandline.outorder
TCoffeeCommandline.output
TCoffeeCommandline.quiet
TCoffeeCommandline.type
MSAProbsCommandline
MSAProbsCommandline.__init__()
MSAProbsCommandline.alignment_order
MSAProbsCommandline.annot
MSAProbsCommandline.clustalw
MSAProbsCommandline.consistency
MSAProbsCommandline.infile
MSAProbsCommandline.iterative_refinement
MSAProbsCommandline.numthreads
MSAProbsCommandline.outfile
MSAProbsCommandline.verbose
MSAProbsCommandline.version
- 模組內容
- Bio.Align.substitution_matrices 套件
- 模組內容
Array
Array.__new__()
陣列.__array_finalize__()
陣列.__getitem__()
陣列.__setitem__()
陣列.__contains__()
陣列.__array_prepare__()
陣列.__array_wrap__()
陣列.__array_ufunc__()
陣列.__reduce__()
陣列.__setstate__()
陣列.transpose()
陣列.alphabet
陣列.copy()
陣列.get()
陣列.items()
陣列.keys()
陣列.values()
陣列.update()
陣列.select()
陣列.__format__()
陣列.format()
陣列.__str__()
陣列.__repr__()
讀取()
載入()
- 模組內容
子模組
- Bio.Align.AlignInfo 模組
- Bio.Align.a2m 模組
- Bio.Align.analysis 模組
- Bio.Align.bed 模組
- Bio.Align.bigbed 模組
- Bio.Align.bigmaf 模組
- Bio.Align.bigpsl 模組
- Bio.Align.chain 模組
- Bio.Align.clustal 模組
- Bio.Align.emboss 模組
- Bio.Align.exonerate 模組
- Bio.Align.fasta 模組
- Bio.Align.hhr 模組
- Bio.Align.interfaces 模組
AlignmentIterator
AlignmentIterator.mode
AlignmentIterator.fmt
AlignmentIterator.__init__()
AlignmentIterator.__next__()
AlignmentIterator.__len__()
AlignmentIterator.__enter__()
AlignmentIterator.__exit__()
AlignmentIterator.__getitem__()
AlignmentIterator.rewind()
AlignmentIterator.__abstractmethods__
AlignmentIterator.__annotations__
AlignmentWriter
AlignmentWriter.mode
AlignmentWriter.fmt
AlignmentWriter.__init__()
AlignmentWriter.write_header()
AlignmentWriter.write_footer()
AlignmentWriter.format_alignment()
AlignmentWriter.write_single_alignment()
AlignmentWriter.write_multiple_alignments()
AlignmentWriter.write_alignments()
AlignmentWriter.write_file()
AlignmentWriter.write()
AlignmentWriter.__abstractmethods__
AlignmentWriter.__annotations__
- Bio.Align.maf 模組
- Bio.Align.mauve 模組
- Bio.Align.msf 模組
- Bio.Align.nexus 模組
- Bio.Align.phylip 模組
- Bio.Align.psl 模組
- Bio.Align.sam 模組
- Bio.Align.stockholm 模組
- Bio.Align.tabular 模組
模組內容
用於處理序列比對的程式碼。
這個模組中最重要的東西之一是 MultipleSeqAlignment 類別,用於 Bio.AlignIO 模組中。
- class Bio.Align.AlignmentCounts(gaps, identities, mismatches)
基底類別:
tuple
- __getnewargs__()
將自己作為一個純粹的元組返回。用於複製和 pickle。
- static __new__(_cls, gaps, identities, mismatches)
建立 AlignmentCounts(gaps, identities, mismatches) 的新實例
- __repr__()
返回格式良好的表示字串
- __slots__ = ()
- gaps
欄位編號 0 的別名
- identities
欄位編號 1 的別名
- mismatches
欄位編號 2 的別名
- class Bio.Align.MultipleSeqAlignment(records, alphabet=None, annotations=None, column_annotations=None)
基底類別:
object
表示經典的多重序列比對 (MSA)。
我們指的是一組長度相同(通常使用間隙字元進行插入或填充)的序列(通常顯示為行)。然後,資料可以被視為字母矩陣,具有明確定義的列。
您通常會使用 AlignIO 模組載入比對檔案來建立 MSA
>>> from Bio import AlignIO >>> align = AlignIO.read("Clustalw/opuntia.aln", "clustal") >>> print(align) Alignment with 7 rows and 156 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
在某些方面,您可以將這些物件視為 SeqRecord 物件的清單,每個物件都代表比對的一行。迭代比對會給出每行的 SeqRecord 物件
>>> len(align) 7 >>> for record in align: ... print("%s %i" % (record.id, len(record))) ... gi|6273285|gb|AF191659.1|AF191 156 gi|6273284|gb|AF191658.1|AF191 156 gi|6273287|gb|AF191661.1|AF191 156 gi|6273286|gb|AF191660.1|AF191 156 gi|6273290|gb|AF191664.1|AF191 156 gi|6273289|gb|AF191663.1|AF191 156 gi|6273291|gb|AF191665.1|AF191 156
您也可以透過索引來存取單獨的行,將其視為 SeqRecord 物件
>>> print(align[0].id) gi|6273285|gb|AF191659.1|AF191 >>> print(align[-1].id) gi|6273291|gb|AF191665.1|AF191
並提取列作為字串
>>> print(align[:, 1]) AAAAAAA
或者,僅提取前十列作為子比對
>>> print(align[:, :10]) Alignment with 7 rows and 10 columns TATACATTAA gi|6273285|gb|AF191659.1|AF191 TATACATTAA gi|6273284|gb|AF191658.1|AF191 TATACATTAA gi|6273287|gb|AF191661.1|AF191 TATACATAAA gi|6273286|gb|AF191660.1|AF191 TATACATTAA gi|6273290|gb|AF191664.1|AF191 TATACATTAA gi|6273289|gb|AF191663.1|AF191 TATACATTAA gi|6273291|gb|AF191665.1|AF191
將此比對切片與比對相加相結合,可以讓您刪除比對的某一部分。例如,僅取前十列和最後十列
>>> print(align[:, :10] + align[:, -10:]) Alignment with 7 rows and 20 columns TATACATTAAGTGTACCAGA gi|6273285|gb|AF191659.1|AF191 TATACATTAAGTGTACCAGA gi|6273284|gb|AF191658.1|AF191 TATACATTAAGTGTACCAGA gi|6273287|gb|AF191661.1|AF191 TATACATAAAGTGTACCAGA gi|6273286|gb|AF191660.1|AF191 TATACATTAAGTGTACCAGA gi|6273290|gb|AF191664.1|AF191 TATACATTAAGTATACCAGA gi|6273289|gb|AF191663.1|AF191 TATACATTAAGTGTACCAGA gi|6273291|gb|AF191665.1|AF191
注意 - 此物件不嘗試對下一代定序中使用的比對類型進行建模,這種比對中有多個定序讀取比對短得多,並且通常存在具有特殊狀態的共有序列或參考序列。
- __init__(records, alphabet=None, annotations=None, column_annotations=None)
初始化新的 MultipleSeqAlignment 物件。
- 參數
- records - SeqRecord 物件的清單(或迭代器),其
序列都具有相同的長度。這可以是空的清單。
- alphabet - 僅為了向後相容性;它的值應始終
為 None。
annotations - 有關整個比對的資訊(字典)。
- column_annotations - 每列註解(受限字典)。
這會保存 Python 序列(清單、字串、元組),其長度與列數相符。一個典型的用途是二級結構共有字串。
您通常會使用 Bio.AlignIO 從檔案載入 MSA,但您也可以從 SeqRecord 物件的清單中執行此操作
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> from Bio.Align import MultipleSeqAlignment >>> a = SeqRecord(Seq("AAAACGT"), id="Alpha") >>> b = SeqRecord(Seq("AAA-CGT"), id="Beta") >>> c = SeqRecord(Seq("AAAAGGT"), id="Gamma") >>> align = MultipleSeqAlignment([a, b, c], ... annotations={"tool": "demo"}, ... column_annotations={"stats": "CCCXCCC"}) >>> print(align) Alignment with 3 rows and 7 columns AAAACGT Alpha AAA-CGT Beta AAAAGGT Gamma >>> align.annotations {'tool': 'demo'} >>> align.column_annotations {'stats': 'CCCXCCC'}
- property column_annotations
序列的每個字母註解的字典。
- __str__()
返回比對的多行字串摘要。
此輸出旨在具有可讀性,但大型比對會顯示為截斷。最多顯示 20 行(序列)和 50 列,以及記錄識別碼。這應該很適合在單一螢幕上顯示。例如:
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> from Bio.Align import MultipleSeqAlignment >>> a = SeqRecord(Seq("ACTGCTAGCTAG"), id="Alpha") >>> b = SeqRecord(Seq("ACT-CTAGCTAG"), id="Beta") >>> c = SeqRecord(Seq("ACTGCTAGATAG"), id="Gamma") >>> align = MultipleSeqAlignment([a, b, c]) >>> print(align) Alignment with 3 rows and 12 columns ACTGCTAGCTAG Alpha ACT-CTAGCTAG Beta ACTGCTAGATAG Gamma
另請參閱比對的 format 方法。
- __repr__()
傳回物件的表示形式以進行除錯。
表示形式不能與 eval() 一起使用來重新建立物件,而這通常對於簡單的 Python 物件是可行的。例如:
<Bio.Align.MultipleSeqAlignment instance (2 records of length 14) at a3c184c>
十六進制字串是物件的記憶體位址,請參閱 help(id)。這提供了一種簡單的方法來視覺上區分相同大小的比對。
- __format__(format_spec)
以指定檔案格式傳回比對作為字串。
格式應為 Bio.AlignIO 支援作為輸出格式的小寫字串(例如「fasta」、「clustal」、「phylip」、「stockholm」等),該格式用於將比對轉換為字串。
例如:
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> from Bio.Align import MultipleSeqAlignment >>> a = SeqRecord(Seq("ACTGCTAGCTAG"), id="Alpha", description="") >>> b = SeqRecord(Seq("ACT-CTAGCTAG"), id="Beta", description="") >>> c = SeqRecord(Seq("ACTGCTAGATAG"), id="Gamma", description="") >>> align = MultipleSeqAlignment([a, b, c]) >>> print(format(align, "fasta")) >Alpha ACTGCTAGCTAG >Beta ACT-CTAGCTAG >Gamma ACTGCTAGATAG >>> print(format(align, "phylip")) 3 12 Alpha ACTGCTAGCT AG Beta ACT-CTAGCT AG Gamma ACTGCTAGAT AG
- __iter__()
將比對行作為 SeqRecord 物件進行迭代。
例如:
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> from Bio.Align import MultipleSeqAlignment >>> a = SeqRecord(Seq("ACTGCTAGCTAG"), id="Alpha") >>> b = SeqRecord(Seq("ACT-CTAGCTAG"), id="Beta") >>> c = SeqRecord(Seq("ACTGCTAGATAG"), id="Gamma") >>> align = MultipleSeqAlignment([a, b, c]) >>> for record in align: ... print(record.id) ... print(record.seq) ... Alpha ACTGCTAGCTAG Beta ACT-CTAGCTAG Gamma ACTGCTAGATAG
- __len__()
傳回比對中的序列數量。
使用 len(alignment) 來取得序列的數量(即列數),以及使用 alignment.get_alignment_length() 來取得最長序列的長度(即欄數)。
如果您將對齊結果視為 SeqRecord 物件的列表,這會很容易記住。
- get_alignment_length()
回傳對齊結果的最大長度。
對齊結果中的所有物件(希望)都應該具有相同的長度。此函數會遍歷並尋找對齊結果中序列的最大長度,來找出此長度。
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> from Bio.Align import MultipleSeqAlignment >>> a = SeqRecord(Seq("ACTGCTAGCTAG"), id="Alpha") >>> b = SeqRecord(Seq("ACT-CTAGCTAG"), id="Beta") >>> c = SeqRecord(Seq("ACTGCTAGATAG"), id="Gamma") >>> align = MultipleSeqAlignment([a, b, c]) >>> align.get_alignment_length() 12
如果您想知道對齊結果中序列的數量,請改用 len(align)。
>>> len(align) 3
- extend(records)
將更多 SeqRecord 物件作為列新增到對齊結果中。
它們的長度必須與原始對齊結果相同。例如:
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> from Bio.Align import MultipleSeqAlignment >>> a = SeqRecord(Seq("AAAACGT"), id="Alpha") >>> b = SeqRecord(Seq("AAA-CGT"), id="Beta") >>> c = SeqRecord(Seq("AAAAGGT"), id="Gamma") >>> d = SeqRecord(Seq("AAAACGT"), id="Delta") >>> e = SeqRecord(Seq("AAA-GGT"), id="Epsilon")
首先,我們建立一個小的對齊結果(三列)。
>>> align = MultipleSeqAlignment([a, b, c]) >>> print(align) Alignment with 3 rows and 7 columns AAAACGT Alpha AAA-CGT Beta AAAAGGT Gamma
現在,我們可以將另外兩列擴展到此對齊結果中。
>>> align.extend([d, e]) >>> print(align) Alignment with 5 rows and 7 columns AAAACGT Alpha AAA-CGT Beta AAAAGGT Gamma AAAACGT Delta AAA-GGT Epsilon
由於對齊物件允許迭代每一列作為 SeqRecord,您可以將 extend 方法與第二個對齊結果一起使用(前提是其序列的長度與原始對齊結果相同)。
- append(record)
將一個 SeqRecord 物件作為新列新增到對齊結果中。
它的長度必須與原始對齊結果相同(除非這是第一個記錄)。
>>> from Bio import AlignIO >>> align = AlignIO.read("Clustalw/opuntia.aln", "clustal") >>> print(align) Alignment with 7 rows and 156 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 >>> len(align) 7
現在,我們將建構一個虛擬記錄以附加作為範例。
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> dummy = SeqRecord(Seq("N"*156), id="dummy")
現在將其附加到對齊結果中。
>>> align.append(dummy) >>> print(align) Alignment with 8 rows and 156 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 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN...NNN dummy >>> len(align) 8
- __add__(other)
將兩個具有相同列數的對齊結果相加來合併它們。
如果您有兩個多重序列對齊結果 (MSA),有兩種方式可以考慮將它們相加:按列或按行。使用 extend 方法是按列新增。使用加法運算子是按行新增。例如:
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> from Bio.Align import MultipleSeqAlignment >>> a1 = SeqRecord(Seq("AAAAC"), id="Alpha") >>> b1 = SeqRecord(Seq("AAA-C"), id="Beta") >>> c1 = SeqRecord(Seq("AAAAG"), id="Gamma") >>> a2 = SeqRecord(Seq("GT"), id="Alpha") >>> b2 = SeqRecord(Seq("GT"), id="Beta") >>> c2 = SeqRecord(Seq("GT"), id="Gamma") >>> left = MultipleSeqAlignment([a1, b1, c1], ... annotations={"tool": "demo", "name": "start"}, ... column_annotations={"stats": "CCCXC"}) >>> right = MultipleSeqAlignment([a2, b2, c2], ... annotations={"tool": "demo", "name": "end"}, ... column_annotations={"stats": "CC"})
現在,讓我們看看這兩個對齊結果。
>>> print(left) Alignment with 3 rows and 5 columns AAAAC Alpha AAA-C Beta AAAAG Gamma >>> print(right) Alignment with 3 rows and 2 columns GT Alpha GT Beta GT Gamma
然後將它們相加。
>>> combined = left + right >>> print(combined) Alignment with 3 rows and 7 columns AAAACGT Alpha AAA-CGT Beta AAAAGGT Gamma
為了使此操作生效,兩個對齊結果必須具有相同數量的記錄(這裡它們都有 3 列)。
>>> len(left) 3 >>> len(right) 3 >>> len(combined) 3
個別列是 SeqRecord 物件,可以將它們相加。請參閱 SeqRecord 文件,以瞭解如何處理註釋。此範例是一個特殊情況,因為兩個原始對齊結果都具有相同的名稱,這表示當列被相加時,它們也會得到相同的名稱。
任何常見的註釋都會保留,但不同的註釋會遺失。這與 SeqRecord 註釋中使用的行為相同,旨在防止不適當值的意外傳播。
>>> combined.annotations {'tool': 'demo'}
類似地,任何常見的每欄註釋都會合併。
>>> combined.column_annotations {'stats': 'CCCXCCC'}
- __getitem__(index)
存取對齊結果的一部分。
根據索引,您可以取得一個 SeqRecord 物件(表示單一列)、一個 Seq 物件(表示單一欄)、一個字串(表示單一字元)或另一個對齊結果(表示對齊結果的部分或全部)。
align[r,c] 會取得一個字元作為字串;align[r] 會取得一列作為 SeqRecord;align[r,:] 會取得一列作為 SeqRecord;align[:,c] 會取得一欄作為 Seq。
align[:] 和 align[:,:] 會取得對齊結果的副本。
任何其他方式都會取得一個子對齊結果,例如:align[0:2] 或 align[0:2,:] 僅使用列 0 和 1;align[:,1:3] 僅使用欄 1 和 2;align[0:2,1:3] 僅使用列 0 和 1,且僅使用欄 1 和 2。
我們將在此處使用以下範例對齊結果進行說明。
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> from Bio.Align import MultipleSeqAlignment >>> a = SeqRecord(Seq("AAAACGT"), id="Alpha") >>> b = SeqRecord(Seq("AAA-CGT"), id="Beta") >>> c = SeqRecord(Seq("AAAAGGT"), id="Gamma") >>> d = SeqRecord(Seq("AAAACGT"), id="Delta") >>> e = SeqRecord(Seq("AAA-GGT"), id="Epsilon") >>> align = MultipleSeqAlignment([a, b, c, d, e])
您可以使用整數索引來存取對齊結果的一列作為 SeqRecord(在這裡,將對齊結果視為 SeqRecord 物件的列表)。
>>> first_record = align[0] >>> print("%s %s" % (first_record.id, first_record.seq)) Alpha AAAACGT >>> last_record = align[-1] >>> print("%s %s" % (last_record.id, last_record.seq)) Epsilon AAA-GGT
您也可以使用 Python 的切片表示法來建立一個僅包含部分 SeqRecord 物件的子對齊結果。
>>> sub_alignment = align[2:5] >>> print(sub_alignment) Alignment with 3 rows and 7 columns AAAAGGT Gamma AAAACGT Delta AAA-GGT Epsilon
這包括對 step 的支援,即 align[start:end:step],可以用來選取每隔一個序列。
>>> sub_alignment = align[::2] >>> print(sub_alignment) Alignment with 3 rows and 7 columns AAAACGT Alpha AAAAGGT Gamma AAA-GGT Epsilon
或者取得一個列反向的對齊結果副本。
>>> rev_alignment = align[::-1] >>> print(rev_alignment) Alignment with 5 rows and 7 columns AAA-GGT Epsilon AAAACGT Delta AAAAGGT Gamma AAA-CGT Beta AAAACGT Alpha
您也可以使用兩個索引來同時指定列和欄。使用簡單的整數會得到一個字元字串。例如:
>>> align[3, 4] 'C'
這等效於:
>>> align[3][4] 'C'
或:
>>> align[3].seq[4] 'C'
若要取得單一欄(作為字串),請使用此語法。
>>> align[:, 4] 'CCGCG'
或者,取得欄的一部分:
>>> align[1:3, 4] 'CG'
然而,一般來說,您會取得一個子對齊結果。
>>> print(align[1:5, 3:6]) Alignment with 4 rows and 3 columns -CG Beta AGG Gamma ACG Delta -GG Epsilon
對於任何使用過 NumPy 陣列或矩陣物件的人來說,這一切都應該很熟悉。
- __delitem__(index)
依索引刪除 SeqRecord,或依切片刪除多個 SeqRecord。
- sort(key=None, reverse=False)
對對齊結果的列(SeqRecord 物件)進行原地排序。
這會預設使用 SeqRecord 物件 ID 依字母順序排序這些列。可以透過提供一個鍵函數來控制排序,該函數必須將每個 SeqRecord 對應到一個排序值。
如果您想新增兩個使用相同記錄識別符號但順序不同的對齊結果,這會很有用。例如:
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> from Bio.Align import MultipleSeqAlignment >>> align1 = MultipleSeqAlignment([ ... SeqRecord(Seq("ACGT"), id="Human"), ... SeqRecord(Seq("ACGG"), id="Mouse"), ... SeqRecord(Seq("ACGC"), id="Chicken"), ... ]) >>> align2 = MultipleSeqAlignment([ ... SeqRecord(Seq("CGGT"), id="Mouse"), ... SeqRecord(Seq("CGTT"), id="Human"), ... SeqRecord(Seq("CGCT"), id="Chicken"), ... ])
如果您在沒有排序的情況下直接嘗試新增這些,您會得到這個。
>>> print(align1 + align2) Alignment with 3 rows and 8 columns ACGTCGGT <unknown id> ACGGCGTT <unknown id> ACGCCGCT Chicken
請參閱 SeqRecord 文件,其中說明了為什麼當識別符號之類的註釋不符時,您會取得預設值。但是,如果我們先對對齊結果進行排序,然後將它們相加,則會得到想要的結果。
>>> align1.sort() >>> align2.sort() >>> print(align1 + align2) Alignment with 3 rows and 8 columns ACGCCGCT Chicken ACGTCGTT Human ACGGCGGT Mouse
作為使用不同排序順序的範例,您可以依每個序列的 GC 含量進行排序。
>>> from Bio.SeqUtils import gc_fraction >>> print(align1) Alignment with 3 rows and 4 columns ACGC Chicken ACGT Human ACGG Mouse >>> align1.sort(key = lambda record: gc_fraction(record.seq)) >>> print(align1) Alignment with 3 rows and 4 columns ACGT Human ACGC Chicken ACGG Mouse
還有一個 reverse 引數,因此如果您想依 ID 但反向排序。
>>> align1.sort(reverse=True) >>> print(align1) Alignment with 3 rows and 4 columns ACGG Mouse ACGT Human ACGC Chicken
- property substitutions
回傳一個陣列,其中包含對齊結果中字母替換的次數。
例如,考慮三個 DNA 序列的多重序列對齊結果:
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> from Bio.Align import MultipleSeqAlignment >>> seq1 = SeqRecord(Seq("ACGT"), id="seq1") >>> seq2 = SeqRecord(Seq("A--A"), id="seq2") >>> seq3 = SeqRecord(Seq("ACGT"), id="seq3") >>> seq4 = SeqRecord(Seq("TTTC"), id="seq4") >>> alignment = MultipleSeqAlignment([seq1, seq2, seq3, seq4]) >>> print(alignment) Alignment with 4 rows and 4 columns ACGT seq1 A--A seq2 ACGT seq3 TTTC seq4
>>> m = alignment.substitutions >>> print(m) A C G T A 3.0 0.5 0.0 2.5 C 0.5 1.0 0.0 2.0 G 0.0 0.0 1.0 1.0 T 2.5 2.0 1.0 1.0
請注意,矩陣是對稱的,計數平均分配在對角線的兩側。例如,對齊結果中 A 和 T 之間的總替換次數為 3.5 + 3.5 = 7。
在計算替換矩陣時,會考慮與序列相關的任何權重。例如,給定以下多重序列對齊結果:
GTATC 0.5 AT--C 0.8 CTGTC 1.0
對於第一欄,我們有:
('A', 'G') : 0.5 * 0.8 = 0.4 ('C', 'G') : 0.5 * 1.0 = 0.5 ('A', 'C') : 0.8 * 1.0 = 0.8
- property alignment
回傳基於 MultipleSeqAlignment 物件的 Alignment 物件。
這會複製每個 SeqRecord 與無間隙的序列。將來對 MultipleSeqAlignment 中原始記錄的任何變更都不會影響 Alignment 中新的記錄。
- class Bio.Align.Alignment(sequences, coordinates=None)
基底類別:
object
表示序列對齊結果。
Alignment 物件具有一個 .sequences 屬性,用於儲存已對齊的序列(Seq、MutableSeq、SeqRecord 或字串物件),以及一個 .coordinates 屬性,用於儲存將對齊定義為 NumPy 陣列的序列座標。
- 其他常用屬性(可能存在,也可能不存在)是:
- annotations - 具有描述
對齊結果的註釋的字典;
- column_annotations - 具有描述對齊結果中每個
欄的註釋的字典;
score - 對齊分數。
- classmethod infer_coordinates(lines)
從列印的對齊結果推斷座標(已淘汰)。
此方法主要用於 Biopython 的對齊結果剖析器,但也可能適用於其他用途。
對於由 N 個序列組成的對齊結果,以 N 行列印,且具有相同數量的欄,其中間隙以破折號表示,此方法將計算定義對齊結果的序列座標。座標會以整數的 NumPy 陣列形式傳回,可用於建立 Alignment 物件。
這是三個序列 TAGGCATACGTG、AACGTACGT 和 ACGCATACTTG 的對齊結果範例,其中第二個和第三個序列中有間隙。
>>> from Bio.Align import Alignment >>> lines = ["TAGGCATACGTG", ... "AACG--TACGT-", ... "-ACGCATACTTG", ... ] >>> sequences = [line.replace("-", "") for line in lines] >>> sequences ['TAGGCATACGTG', 'AACGTACGT', 'ACGCATACTTG'] >>> coordinates = Alignment.infer_coordinates(lines) >>> print(coordinates) [[ 0 1 4 6 11 12] [ 0 1 4 4 9 9] [ 0 0 3 5 10 11]] >>> alignment = Alignment(sequences, coordinates)
- classmethod parse_printed_alignment(lines)
從列印的對齊結果推斷序列和座標。
此方法主要用於 Biopython 的對齊結果剖析器,但也可能適用於其他用途。
對於由 N 個序列組成的對齊結果,以 N 行列印,且具有相同數量的欄,其中間隙以破折號表示,此方法將計算定義對齊結果的序列座標。它會傳回一個元組 (sequences, coordinates),其中 sequences 是移除間隙後的 N 個序列的列表,而 coordinates 是一個二維 NumPy 整數陣列。序列和座標可以一起用於建立 Alignment 物件。
這是三個序列 TAGGCATACGTG、AACGTACGT 和 ACGCATACTTG 的對齊結果範例,其中第二個和第三個序列中有間隙。請注意,輸入序列是位元組物件。
>>> from Bio.Align import Alignment >>> from Bio.Seq import Seq >>> lines = [b"TAGGCATACGTG", ... b"AACG--TACGT-", ... b"-ACGCATACTTG", ... ] >>> sequences, coordinates = Alignment.parse_printed_alignment(lines) >>> sequences [b'TAGGCATACGTG', b'AACGTACGT', b'ACGCATACTTG'] >>> print(coordinates) [[ 0 1 4 6 11 12] [ 0 1 4 4 9 9] [ 0 0 3 5 10 11]] >>> sequences = [Seq(sequence) for sequence in sequences] >>> sequences [Seq('TAGGCATACGTG'), Seq('AACGTACGT'), Seq('ACGCATACTTG')] >>> alignment = Alignment(sequences, coordinates) >>> print(alignment) 0 TAGGCATACGTG 12 0 AACG--TACGT- 9 0 -ACGCATACTTG 11
- __init__(sequences, coordinates=None)
初始化新的 Alignment 物件。
- 參數
- sequences - 已對齊的序列(Seq、MutableSeq、SeqRecord、
或字串物件)的列表。
- coordinates - 定義對齊結果的序列座標。
如果為 None(預設值),則假設序列彼此對齊,且沒有任何間隙。
- __array__(dtype=None)
- __add__(other)
將兩個比對結果以逐列方式合併。
例如:
>>> import numpy as np >>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> from Bio.Align import Alignment >>> a1 = SeqRecord(Seq("AAAAC"), id="Alpha") >>> b1 = SeqRecord(Seq("AAAC"), id="Beta") >>> c1 = SeqRecord(Seq("AAAAG"), id="Gamma") >>> a2 = SeqRecord(Seq("GTT"), id="Alpha") >>> b2 = SeqRecord(Seq("TT"), id="Beta") >>> c2 = SeqRecord(Seq("GT"), id="Gamma") >>> left = Alignment([a1, b1, c1], ... coordinates=np.array([[0, 3, 4, 5], ... [0, 3, 3, 4], ... [0, 3, 4, 5]])) >>> left.annotations = {"tool": "demo", "name": "start"} >>> left.column_annotations = {"stats": "CCCXC"} >>> right = Alignment([a2, b2, c2], ... coordinates=np.array([[0, 1, 2, 3], ... [0, 0, 1, 2], ... [0, 1, 1, 2]])) >>> right.annotations = {"tool": "demo", "name": "end"} >>> right.column_annotations = {"stats": "CXC"}
現在,讓我們看看這兩個對齊結果。
>>> print(left) Alpha 0 AAAAC 5 Beta 0 AAA-C 4 Gamma 0 AAAAG 5 >>> print(right) Alpha 0 GTT 3 Beta 0 -TT 2 Gamma 0 G-T 2
然後將它們相加。
>>> combined = left + right >>> print(combined) Alpha 0 AAAACGTT 8 Beta 0 AAA-C-TT 6 Gamma 0 AAAAGG-T 7
為了使此操作生效,兩個比對結果必須具有相同的序列數量(在此範例中,它們都具有 3 列)。
>>> len(left) 3 >>> len(right) 3 >>> len(combined) 3
這些序列是 SeqRecord 物件,並且可以相加。有關註解處理方式的詳細資訊,請參閱 SeqRecord 文件。這個範例的特殊之處在於,兩個原始比對結果共享相同的名稱,這表示當列相加時,它們也會獲得相同的名稱。
任何共同的註解都會保留,但不同的註解會遺失。這與 SeqRecord 註解中使用的行為相同,旨在防止不適當的值意外傳播。
>>> combined.annotations {'tool': 'demo'}
類似地,任何常見的每欄註釋都會合併。
>>> combined.column_annotations {'stats': 'CCCXCCXC'}
- property frequencies
傳回比對結果中每個欄位中每個字母的頻率。
間隙以破折號(“-”)字元表示。例如:
>>> from Bio import Align >>> aligner = Align.PairwiseAligner() >>> aligner.mode = "global" >>> alignments = aligner.align("GACCTG", "CGATCG") >>> alignment = alignments[0] >>> print(alignment) target 0 -GACCT-G 6 0 -||--|-| 8 query 0 CGA--TCG 6 >>> alignment.frequencies {'-': array([1., 0., 0., 1., 1., 0., 1., 0.]), 'G': array([0., 2., 0., 0., 0., 0., 0., 2.]), 'A': array([0., 0., 2., 0., 0., 0., 0., 0.]), 'C': array([1., 0., 0., 1., 1., 0., 1., 0.]), 'T': array([0., 0., 0., 0., 0., 2., 0., 0.])} >>> aligner.mode = "local" >>> alignments = aligner.align("GACCTG", "CGATCG") >>> alignment = alignments[0] >>> print(alignment) target 0 GACCT-G 6 0 ||--|-| 7 query 1 GA--TCG 6 >>> alignment.frequencies {'G': array([2., 0., 0., 0., 0., 0., 2.]), 'A': array([0., 2., 0., 0., 0., 0., 0.]), 'C': array([0., 0., 1., 1., 0., 1., 0.]), 'T': array([0., 0., 0., 0., 2., 0., 0.]), '-': array([0., 0., 1., 1., 0., 1., 0.])}
- property target
針對成對比對,傳回 self.sequences[0]。
- property query
針對成對比對,傳回 self.sequences[1]。
- __eq__(other)
檢查兩個 Alignment 物件是否指定相同的比對結果。
- __ne__(other)
檢查兩個 Alignment 物件是否具有不同的比對結果。
- __lt__(other)
檢查 self 是否應位於 other 之前。
- __le__(other)
檢查 self 是否應位於 other 之前或與 other 相等。
- __gt__(other)
檢查 self 是否應位於 other 之後。
- __ge__(other)
檢查 self 是否應位於 other 之後或與 other 相等。
- __getitem__(key)
傳回 self[key]。
索引形式如下
self[:, :]
傳回 Alignment 物件的副本;
self[:, i:] self[:, :j] self[:, i:j] self[:, iterable] (其中 iterable 傳回整數)
傳回一個新的 Alignment 物件,該物件跨越選取的欄位;
self[k, i] self[k, i:] self[k, :j] self[k, i:j] self[k, iterable] (其中 iterable 傳回整數) self[k](相當於 self[k, :])
傳回字串,其中包含選定欄位的對齊序列(包含間隙),其中 k = 0 代表目標序列,而 k = 1 代表查詢序列;以及
self[:, i]
傳回字串,其中包含比對結果中選取的欄位。
>>> from Bio.Align import PairwiseAligner >>> aligner = PairwiseAligner() >>> alignments = aligner.align("ACCGGTTT", "ACGGGTT") >>> alignment = alignments[0] >>> print(alignment) target 0 ACCGG-TTT 8 0 ||-||-||- 9 query 0 AC-GGGTT- 7 >>> alignment[0, :] 'ACCGG-TTT' >>> alignment[1, :] 'AC-GGGTT-' >>> alignment[0] 'ACCGG-TTT' >>> alignment[1] 'AC-GGGTT-' >>> alignment[0, 1:-2] 'CCGG-T' >>> alignment[1, 1:-2] 'C-GGGT' >>> alignment[0, (1, 5, 2)] 'C-C' >>> alignment[1, ::2] 'A-GT-' >>> alignment[1, range(0, 9, 2)] 'A-GT-' >>> alignment[:, 0] 'AA' >>> alignment[:, 5] '-G' >>> alignment[:, 1:] <Alignment object (2 rows x 8 columns) at 0x...> >>> print(alignment[:, 1:]) target 1 CCGG-TTT 8 0 |-||-||- 8 query 1 C-GGGTT- 7 >>> print(alignment[:, 2:]) target 2 CGG-TTT 8 0 -||-||- 7 query 2 -GGGTT- 7 >>> print(alignment[:, 3:]) target 3 GG-TTT 8 0 ||-||- 6 query 2 GGGTT- 7 >>> print(alignment[:, 3:-1]) target 3 GG-TT 7 0 ||-|| 5 query 2 GGGTT 7 >>> print(alignment[:, ::2]) target 0 ACGTT 5 0 |-||- 5 query 0 A-GT- 3 >>> print(alignment[:, range(1, 9, 2)]) target 0 CG-T 3 0 ||-| 4 query 0 CGGT 4 >>> print(alignment[:, (2, 7, 3)]) target 0 CTG 3 0 -|| 3 query 0 -TG 2
- __format__(format_spec)
以指定檔案格式傳回比對作為字串。
self.format() 的封裝函式。
- format(fmt='', *args, **kwargs)
以指定檔案格式傳回比對作為字串。
- 參數
- fmt - 檔案格式。可接受的值為空字串,
以建立比對結果的人工可讀表示方式,或 Bio.Align 支援的任何比對檔案格式(某些格式尚未實作)。
- 所有其他引數都會傳遞至格式特定的寫入器函式。
- mask - 僅限 PSL 格式。指定是否遮罩目標中的重複區域
序列,並應在 PSL 檔案的 repMatches 欄位中回報,而不是在 matches 欄位中回報。可接受的值為 None:不遮罩(預設值);「lower」:以小寫字元遮罩;「upper」:以大寫字元遮罩。
- wildcard - 僅限 PSL 格式。在目標或查詢序列中,將與萬用字元的比對結果
回報在 PSL 檔案的 nCount 欄位中,而不是在 matches、misMatches 或 repMatches 欄位中。預設值為 'N'。
- md - 僅限 SAM 格式。若為 True,則從
比對結果計算 MD 標記,並將其包含在輸出中。若為 False(預設值),則不會在輸出中包含 MD 標記。
- __str__()
傳回比對結果的人工可讀字串表示方式。
針對序列比對,每一行最多有 80 個欄位。前 10 個欄位會顯示(可能會截斷的)序列名稱,這可能是 SeqRecord 的 id 屬性,否則成對比對的名稱為「target」或「query」。接下來的 10 個欄位會顯示序列座標,在 Python 中照常使用從零開始的計數。其餘 60 個欄位會顯示序列,並使用破折號表示間隙。在比對結果結尾,結束座標會顯示在序列的右側,同樣以從零開始的座標顯示。
成對比對在兩個序列之間有一行額外的行,顯示序列是否符合('|')或不符合('。'),或者是否存在間隙('-')。此行顯示的座標是欄位索引,這在擷取子比對結果時會很有用。
例如:
>>> from Bio.Align import PairwiseAligner >>> aligner = PairwiseAligner()
>>> seqA = "TTAACCCCATTTG" >>> seqB = "AAGCCCCTTT" >>> seqC = "AAAGGGGCTT"
>>> alignments = aligner.align(seqA, seqB) >>> len(alignments) 1 >>> alignment = alignments[0] >>> print(alignment) target 0 TTAA-CCCCATTTG 13 0 --||-||||-|||- 14 query 0 --AAGCCCC-TTT- 10
請注意,seqC 是 seqB 的反向互補。將其與反向鏈比對會得出相同的比對結果,但查詢座標會切換
>>> alignments = aligner.align(seqA, seqC, strand="-") >>> len(alignments) 1 >>> alignment = alignments[0] >>> print(alignment) target 0 TTAA-CCCCATTTG 13 0 --||-||||-|||- 14 query 10 --AAGCCCC-TTT- 0
- __repr__()
傳回比對結果的表示方式,包含其形狀。
表示形式不能與 eval() 一起使用來重新建立物件,而這通常對於簡單的 Python 物件是可行的。例如:
<Alignment object (2 rows x 14 columns) at 0x10403d850>
十六進位字串是物件的記憶體位址,可用於區分不同的 Alignment 物件。如需詳細資訊,請參閱 help(id)。
>>> import numpy as np >>> from Bio.Align import Alignment >>> alignment = Alignment(("ACCGT", "ACGT"), ... coordinates = np.array([[0, 2, 3, 5], ... [0, 2, 2, 4], ... ])) >>> print(alignment) target 0 ACCGT 5 0 ||-|| 5 query 0 AC-GT 4 >>> alignment <Alignment object (2 rows x 5 columns) at 0x...>
- __len__()
傳回比對中的序列數量。
- property length
傳回比對結果長度,也就是列印時的欄位數。
比對結果長度是在列印時,比對結果中的欄位數,且等於符合數量、不符合數量以及目標和查詢中間隙總長度的總和。比對區段以外的序列區段不包含在欄位數中。
例如:
>>> from Bio import Align >>> aligner = Align.PairwiseAligner() >>> aligner.mode = "global" >>> alignments = aligner.align("GACCTG", "CGATCG") >>> alignment = alignments[0] >>> print(alignment) target 0 -GACCT-G 6 0 -||--|-| 8 query 0 CGA--TCG 6 >>> alignment.length 8 >>> aligner.mode = "local" >>> alignments = aligner.align("GACCTG", "CGATCG") >>> alignment = alignments[0] >>> print(alignment) target 0 GACCT-G 6 0 ||--|-| 7 query 1 GA--TCG 6 >>> len(alignment) 2 >>> alignment.length 7
- property shape
以兩個整數值的元組形式傳回比對結果的形狀。
第一個整數值是比對結果中序列的數量,由 len(alignment) 傳回,對於成對比對,此值永遠為 2。
第二個整數值是在列印時,比對結果中的欄位數,且等於符合數量、不符合數量以及目標和查詢中間隙總長度的總和。比對區段以外的序列區段不包含在欄位數中。
例如:
>>> from Bio import Align >>> aligner = Align.PairwiseAligner() >>> aligner.mode = "global" >>> alignments = aligner.align("GACCTG", "CGATCG") >>> alignment = alignments[0] >>> print(alignment) target 0 -GACCT-G 6 0 -||--|-| 8 query 0 CGA--TCG 6 >>> len(alignment) 2 >>> alignment.shape (2, 8) >>> aligner.mode = "local" >>> alignments = aligner.align("GACCTG", "CGATCG") >>> alignment = alignments[0] >>> print(alignment) target 0 GACCT-G 6 0 ||--|-| 7 query 1 GA--TCG 6 >>> len(alignment) 2 >>> alignment.shape (2, 7)
- property aligned
傳回彼此對齊的子序列索引。
此屬性會傳回目標和查詢序列中,彼此對齊的子序列開始和結束索引。如果目標 (t) 和查詢 (q) 之間的比對由 N 個區塊組成,您會得到兩個長度為 N 的元組
- (((t_start1, t_end1), (t_start2, t_end2), …, (t_startN, t_endN)),
((q_start1, q_end1), (q_start2, q_end2), …, (q_startN, q_endN)))
例如:
>>> from Bio import Align >>> aligner = Align.PairwiseAligner() >>> alignments = aligner.align("GAACT", "GAT") >>> alignment = alignments[0] >>> print(alignment) target 0 GAACT 5 0 ||--| 5 query 0 GA--T 3 >>> alignment.aligned array([[[0, 2], [4, 5]], [[0, 2], [2, 3]]]) >>> alignment = alignments[1] >>> print(alignment) target 0 GAACT 5 0 |-|-| 5 query 0 G-A-T 3 >>> alignment.aligned array([[[0, 1], [2, 3], [4, 5]], [[0, 1], [1, 2], [2, 3]]])
請注意,不同的比對結果可能會讓相同的子序列彼此對齊。特別是,如果比對結果僅在間隙放置方面彼此不同,則可能會發生這種情況。
>>> aligner.mismatch_score = -10 >>> alignments = aligner.align("AAACAAA", "AAAGAAA") >>> len(alignments) 2 >>> print(alignments[0]) target 0 AAAC-AAA 7 0 |||--||| 8 query 0 AAA-GAAA 7 >>> alignments[0].aligned array([[[0, 3], [4, 7]], [[0, 3], [4, 7]]]) >>> print(alignments[1]) target 0 AAA-CAAA 7 0 |||--||| 8 query 0 AAAG-AAA 7 >>> alignments[1].aligned array([[[0, 3], [4, 7]], [[0, 3], [4, 7]]])
此屬性可用於識別在對齊序列方面彼此相同的比對結果。
- property indices
傳回比對結果中每個字母的序列索引。
此屬性會傳回 2D NumPy 陣列,其中包含比對結果中每個字母的序列索引。間隙以 -1 表示。此陣列具有與比對結果相同的列數和欄數,如 self.shape 所指定。
例如:
>>> from Bio import Align >>> aligner = Align.PairwiseAligner() >>> aligner.mode = "local"
>>> alignments = aligner.align("GAACTGG", "AATG") >>> alignment = alignments[0] >>> print(alignment) target 1 AACTG 6 0 ||-|| 5 query 0 AA-TG 4 >>> alignment.indices array([[ 1, 2, 3, 4, 5], [ 0, 1, -1, 2, 3]]) >>> alignment = alignments[1] >>> print(alignment) target 1 AACTGG 7 0 ||-|-| 6 query 0 AA-T-G 4 >>> alignment.indices array([[ 1, 2, 3, 4, 5, 6], [ 0, 1, -1, 2, -1, 3]])
>>> alignments = aligner.align("GAACTGG", "CATT", strand="-") >>> alignment = alignments[0] >>> print(alignment) target 1 AACTG 6 0 ||-|| 5 query 4 AA-TG 0 >>> alignment.indices array([[ 1, 2, 3, 4, 5], [ 3, 2, -1, 1, 0]]) >>> alignment = alignments[1] >>> print(alignment) target 1 AACTGG 7 0 ||-|-| 6 query 4 AA-T-G 0 >>> alignment.indices array([[ 1, 2, 3, 4, 5, 6], [ 3, 2, -1, 1, -1, 0]])
- property inverse_indices
傳回每個序列中每個字母的比對欄位索引。
此屬性會回傳一個 1D NumPy 陣列的列表;陣列的數量等於對齊序列的數量,而每個陣列的長度等於對應序列的長度。對於每個序列中的每個字母,陣列包含對齊中的對應列索引。未包含在對齊中的字母會以 -1 表示。
例如:
>>> from Bio import Align >>> aligner = Align.PairwiseAligner() >>> aligner.mode = "local"
>>> alignments = aligner.align("GAACTGG", "AATG") >>> alignment = alignments[0] >>> print(alignment) target 1 AACTG 6 0 ||-|| 5 query 0 AA-TG 4 >>> alignment.inverse_indices [array([-1, 0, 1, 2, 3, 4, -1]), array([0, 1, 3, 4])] >>> alignment = alignments[1] >>> print(alignment) target 1 AACTGG 7 0 ||-|-| 6 query 0 AA-T-G 4 >>> alignment.inverse_indices [array([-1, 0, 1, 2, 3, 4, 5]), array([0, 1, 3, 5])] >>> alignments = aligner.align("GAACTGG", "CATT", strand="-") >>> alignment = alignments[0] >>> print(alignment) target 1 AACTG 6 0 ||-|| 5 query 4 AA-TG 0 >>> alignment.inverse_indices [array([-1, 0, 1, 2, 3, 4, -1]), array([4, 3, 1, 0])] >>> alignment = alignments[1] >>> print(alignment) target 1 AACTGG 7 0 ||-|-| 6 query 4 AA-T-G 0 >>> alignment.inverse_indices [array([-1, 0, 1, 2, 3, 4, 5]), array([5, 3, 1, 0])]
- sort(key=None, reverse=False)
就地排序對齊的序列。
預設情況下,如果可用,則使用其 id 屬性,否則使用其序列內容,按字母順序排序序列。例如,
>>> from Bio.Align import PairwiseAligner >>> aligner = PairwiseAligner() >>> aligner.gap_score = -1 >>> alignments = aligner.align("AATAA", "AAGAA") >>> len(alignments) 1 >>> alignment = alignments[0] >>> print(alignment) target 0 AATAA 5 0 ||.|| 5 query 0 AAGAA 5 >>> alignment.sort() >>> print(alignment) target 0 AAGAA 5 0 ||.|| 5 query 0 AATAA 5
或者,可以提供一個鍵函數,將每個序列映射到一個排序值。例如,您可以根據每個序列的 GC 含量進行排序。
>>> from Bio.SeqUtils import gc_fraction >>> alignment.sort(key=gc_fraction) >>> print(alignment) target 0 AATAA 5 0 ||.|| 5 query 0 AAGAA 5
您可以透過傳遞 reverse=True 來反轉排序順序
>>> alignment.sort(key=gc_fraction, reverse=True) >>> print(alignment) target 0 AAGAA 5 0 ||.|| 5 query 0 AATAA 5
現在序列會依遞減的 GC 含量值排序。
- map(alignment)
將對齊映射到 self.target 並傳回產生的對齊。
在這裡,self.query 和 alignment.target 是相同的序列。
一個典型的例子是,self 是染色體和轉錄本之間的成對比對,參數是轉錄本和序列(例如,透過 RNA-seq 取得)之間的成對比對,而我們想要找到序列與染色體的比對
>>> from Bio import Align >>> aligner = Align.PairwiseAligner() >>> aligner.mode = 'local' >>> aligner.open_gap_score = -1 >>> aligner.extend_gap_score = 0 >>> chromosome = "AAAAAAAACCCCCCCAAAAAAAAAAAGGGGGGAAAAAAAA" >>> transcript = "CCCCCCCGGGGGG" >>> alignments1 = aligner.align(chromosome, transcript) >>> len(alignments1) 1 >>> alignment1 = alignments1[0] >>> print(alignment1) target 8 CCCCCCCAAAAAAAAAAAGGGGGG 32 0 |||||||-----------|||||| 24 query 0 CCCCCCC-----------GGGGGG 13 >>> sequence = "CCCCGGGG" >>> alignments2 = aligner.align(transcript, sequence) >>> len(alignments2) 1 >>> alignment2 = alignments2[0] >>> print(alignment2) target 3 CCCCGGGG 11 0 |||||||| 8 query 0 CCCCGGGG 8 >>> alignment = alignment1.map(alignment2) >>> print(alignment) target 11 CCCCAAAAAAAAAAAGGGG 30 0 ||||-----------|||| 19 query 0 CCCC-----------GGGG 8 >>> format(alignment, "psl") '8\t0\t0\t0\t0\t0\t1\t11\t+\tquery\t8\t0\t8\ttarget\t40\t11\t30\t2\t4,4,\t0,4,\t11,26,\n'
映射對齊不取決於序列內容。如果我們刪除序列內容,則會在 PSL 格式中找到相同的對齊(儘管我們顯然會失去列印序列對齊的能力)
>>> alignment1.target = Seq(None, len(alignment1.target)) >>> alignment1.query = Seq(None, len(alignment1.query)) >>> alignment2.target = Seq(None, len(alignment2.target)) >>> alignment2.query = Seq(None, len(alignment2.query)) >>> alignment = alignment1.map(alignment2) >>> format(alignment, "psl") '8\t0\t0\t0\t0\t0\t1\t11\t+\tquery\t8\t0\t8\ttarget\t40\t11\t30\t2\t4,4,\t0,4,\t11,26,\n'
map 方法也可以用於提升不同基因組組裝之間的對齊。在這種情況下,self 是兩個基因組組裝之間的 DNA 對齊,而參數是轉錄本針對其中一個基因組組裝的比對
>>> np.set_printoptions(threshold=5) # print 5 array elements per row >>> chain = Align.read("Blat/panTro5ToPanTro6.over.chain", "chain") >>> chain.sequences[0].id 'chr1' >>> len(chain.sequences[0].seq) 228573443 >>> chain.sequences[1].id 'chr1' >>> len(chain.sequences[1].seq) 224244399 >>> print(chain.coordinates) [[122250000 122250400 122250400 ... 122909818 122909819 122909835] [111776384 111776784 111776785 ... 112019962 112019962 112019978]]
顯示黑猩猩基因組組裝 panTro5 上 chr1 的範圍 122250000:122909835 與黑猩猩基因組組裝 panTro6 上 chr1 的範圍 111776384:112019978 對齊。
>>> alignment = Align.read("Blat/est.panTro5.psl", "psl") >>> alignment.sequences[0].id 'chr1' >>> len(alignment.sequences[0].seq) 228573443 >>> alignment.sequences[1].id 'DC525629' >>> len(alignment.sequences[1].seq) 407 >>> print(alignment.coordinates) [[122835789 122835847 122840993 122841145 122907212 122907314] [ 32 90 90 242 242 344]]
這顯示表達序列標籤 DC525629 的核苷酸範圍 32:344 與黑猩猩基因組組裝 panTro5 上 chr1 的範圍 122835789:122907314 對齊。
請注意,目標序列鏈 chain.sequences[0].seq 和目標序列 alignment.sequences[0] 的長度相同
>>> len(chain.sequences[0].seq) == len(alignment.sequences[0].seq) True
我們交換鏈的目標和查詢,使得鏈的查詢對應於比對的目標
>>> chain = chain[::-1] >>> chain.sequences[0].id 'chr1' >>> len(chain.sequences[0].seq) 224244399 >>> chain.sequences[1].id 'chr1' >>> len(chain.sequences[1].seq) 228573443 >>> print(chain.coordinates) [[111776384 111776784 111776785 ... 112019962 112019962 112019978] [122250000 122250400 122250400 ... 122909818 122909819 122909835]]
現在,我們可以透過在鏈上呼叫 map,並將 alignment 作為引數,來取得 DC525629 針對黑猩猩基因組組裝 panTro6 的座標
>>> lifted_alignment = chain.map(alignment) >>> lifted_alignment.sequences[0].id 'chr1' >>> len(lifted_alignment.sequences[0].seq) 224244399 >>> lifted_alignment.sequences[1].id 'DC525629' >>> len(lifted_alignment.sequences[1].seq) 407 >>> print(lifted_alignment.coordinates) [[111982717 111982775 111987921 111988073 112009200 112009302] [ 32 90 90 242 242 344]]
這顯示表達序列標籤 DC525629 的核苷酸範圍 32:344 與黑猩猩基因組組裝 panTro6 上 chr1 的範圍 111982717:112009302 對齊。請注意,DC525629 在黑猩猩基因組組裝 panTro5 上的基因組跨度為 122907314 - 122835789 = 71525 bp,而在 panTro6 上,基因組跨度為 112009302 - 111982717 = 26585 bp。
- mapall(alignments)
將每個對齊映射到 self,並傳回映射的對齊。
- property substitutions
回傳一個陣列,其中包含對齊結果中字母替換的次數。
作為一個範例,考慮兩個 RNA 序列的序列對齊
>>> from Bio.Align import PairwiseAligner >>> target = "ATACTTACCTGGCAGGGGAGATACCATGATCACGAAGGTGGTTTTCCCAGGGCGAGGCTTATCCATTGCACTCCGGATGTGCTGACCCCTGCGATTTCCCCAAATGTGGGAAACTCGACTGCATAATTTGTGGTAGTGGGGGACTGCGTTCGCGCTTTCCCCTG" # human spliceosomal small nuclear RNA U1 >>> query = "ATACTTACCTGACAGGGGAGGCACCATGATCACACAGGTGGTCCTCCCAGGGCGAGGCTCTTCCATTGCACTGCGGGAGGGTTGACCCCTGCGATTTCCCCAAATGTGGGAAACTCGACTGTATAATTTGTGGTAGTGGGGGACTGCGTTCGCGCTATCCCCCG" # sea lamprey spliceosomal small RNA U1 >>> aligner = PairwiseAligner() >>> aligner.gap_score = -10 >>> alignments = aligner.align(target, query) >>> len(alignments) 1 >>> alignment = alignments[0] >>> print(alignment) target 0 ATACTTACCTGGCAGGGGAGATACCATGATCACGAAGGTGGTTTTCCCAGGGCGAGGCTT 0 |||||||||||.||||||||..|||||||||||..|||||||..|||||||||||||||. query 0 ATACTTACCTGACAGGGGAGGCACCATGATCACACAGGTGGTCCTCCCAGGGCGAGGCTC target 60 ATCCATTGCACTCCGGATGTGCTGACCCCTGCGATTTCCCCAAATGTGGGAAACTCGACT 60 .|||||||||||.|||..|.|.|||||||||||||||||||||||||||||||||||||| query 60 TTCCATTGCACTGCGGGAGGGTTGACCCCTGCGATTTCCCCAAATGTGGGAAACTCGACT target 120 GCATAATTTGTGGTAGTGGGGGACTGCGTTCGCGCTTTCCCCTG 164 120 |.||||||||||||||||||||||||||||||||||.|||||.| 164 query 120 GTATAATTTGTGGTAGTGGGGGACTGCGTTCGCGCTATCCCCCG 164 >>> m = alignment.substitutions >>> print(m) A C G T A 28.0 1.0 2.0 1.0 C 0.0 39.0 1.0 2.0 G 2.0 0.0 45.0 0.0 T 2.0 5.0 1.0 35.0
請注意,矩陣不是對稱的:行對應於目標序列,列對應於查詢序列。例如,目標序列中與查詢序列中的 C 對齊的 T 的數量為
>>> m['T', 'C'] 5.0
而查詢序列中與查詢序列中的 T 對齊的 C 的數量為
>>> m['C', 'T'] 2.0
對於某些應用(例如,從替換矩陣定義評分矩陣),可能偏好對稱矩陣,這可以計算如下
>>> m += m.transpose() >>> m /= 2.0 >>> print(m) A C G T A 28.0 0.5 2.0 1.5 C 0.5 39.0 0.5 3.5 G 2.0 0.5 45.0 0.5 T 1.5 3.5 0.5 35.0
現在矩陣是對稱的,計數在對角線的兩側平均分配
>>> m['C', 'T'] 3.5 >>> m['T', 'C'] 3.5
對齊中 T 和 C 之間的替換總數為 3.5 + 3.5 = 7。
- counts()
傳回成對比對的識別、不匹配和間隙數。
>>> aligner = PairwiseAligner(mode='global', match_score=2, mismatch_score=-1) >>> for alignment in aligner.align("TACCG", "ACG"): ... print("Score = %.1f:" % alignment.score) ... c = alignment.counts() # namedtuple ... print(f"{c.gaps} gaps, {c.identities} identities, {c.mismatches} mismatches") ... print(alignment) ... Score = 6.0: 2 gaps, 3 identities, 0 mismatches target 0 TACCG 5 0 -||-| 5 query 0 -AC-G 3 Score = 6.0: 2 gaps, 3 identities, 0 mismatches target 0 TACCG 5 0 -|-|| 5 query 0 -A-CG 3
這會將成對比對中的每對字母分類為間隙、完全匹配或不匹配。它被定義為一個方法(而非屬性),以便將來可以採用可選的引數,以允許自訂行為。這三個值會以具名元組的形式傳回。這是針對對齊中的所有序列對計算的。
- reverse_complement()
反向互補對齊並傳回它。
>>> sequences = ["ATCG", "AAG", "ATC"] >>> coordinates = np.array([[0, 2, 3, 4], [0, 2, 2, 3], [0, 2, 3, 3]]) >>> alignment = Alignment(sequences, coordinates) >>> print(alignment) 0 ATCG 4 0 AA-G 3 0 ATC- 3 >>> rc_alignment = alignment.reverse_complement() >>> print(rc_alignment) 0 CGAT 4 0 C-TT 3 0 -GAT 3
如果存在屬性 column_annotations,則會將其與反向互補的對齊相關聯,其值會反向排列。
>>> alignment.column_annotations = {"score": [3, 2, 2, 2]} >>> rc_alignment = alignment.reverse_complement() >>> print(rc_alignment.column_annotations) {'score': [2, 2, 2, 3]}
- __hash__ = None
- class Bio.Align.AlignmentsAbstractBaseClass
基礎:
ABC
序列對齊的抽象基礎類別。
大多數使用者不需要使用此類別。它在內部用作類別列表的 Alignments 類別以及 Bio.Align.interfaces 中的 AlignmentIterator 類別的基底類別,後者本身是 Bio/Align/ 中對齊剖析器的抽象基底類別。
- __iter__()
以 Alignment 物件的形式疊代對齊。
任何子類別都「不應該」覆寫此方法。
- abstract __next__()
傳回下一個對齊。
- abstract rewind()
倒轉疊代器,使其從頭開始循環遍歷對齊。
- abstract __len__()
傳回對齊的數量。
- __abstractmethods__ = frozenset({'__len__', '__next__', 'rewind'})
- class Bio.Align.Alignments(alignments=())
基礎:
AlignmentsAbstractBaseClass
、list
- __init__(alignments=())
- __next__()
傳回下一個對齊。
- rewind()
倒轉疊代器,使其從頭開始循環遍歷對齊。
- __len__()
傳回對齊的數量。
- __abstractmethods__ = frozenset({})
- class Bio.Align.PairwiseAlignments(seqA, seqB, score, paths)
基礎:
AlignmentsAbstractBaseClass
實作成對比對器傳回的成對比對的疊代器。
此類別也支援索引,這對於增加的索引來說很快,但對於大量對齊的隨機存取來說可能很慢。
請注意,即使對於相對較短的序列,如果它們彼此對齊不良,成對比對器也可以傳回天文數字的對齊。因此,我們建議先檢查對齊的數量,該數量可以透過 len(alignments) 存取,即使對齊的數量非常大,也可以快速計算出來。
- __init__(seqA, seqB, score, paths)
初始化新的 PairwiseAlignments 物件。
- 參數
seqA - 第一個序列,以純字串形式表示,沒有間隙。
seqB - 第二個序列,以純字串形式表示,沒有間隙。
score - 對齊分數。
- paths - 對回溯矩陣中路徑的疊代器;
每條路徑定義一個對齊。
您通常會透過呼叫 aligner.align(seqA, seqB) 來取得 PairwiseAlignments 物件,其中 aligner 是 PairwiseAligner 物件或 CodonAligner 物件。
- __len__()
傳回對齊的數量。
- __getitem__(index)
- __next__()
傳回下一個對齊。
- rewind()
倒轉疊代器,使其從頭開始循環遍歷對齊。
- __abstractmethods__ = frozenset({})
- class Bio.Align.PairwiseAligner(scoring=None, **kwargs)
基礎類別:
PairwiseAligner
使用動態規劃執行成對序列比對。
這提供了在兩個序列之間取得全域和局部比對的功能。全域比對找出兩個序列中所有字元的最佳一致性。局部比對僅找出最佳比對的子序列。
要執行成對序列比對,首先要建立一個 PairwiseAligner 物件。此物件會儲存比對和不比對的分數,以及間隙分數。通常,比對分數是正數,而不比對分數和間隙分數是負數或零。預設情況下,比對分數為 1,而不比對分數和間隙分數為零。根據間隙分數的值,PairwiseAligner 物件會自動選擇適當的比對演算法(Needleman-Wunsch、Smith-Waterman、Gotoh 或 Waterman-Smith-Beyer 全域或局部比對演算法)。
使用兩個序列作為引數呼叫比對器的 “score” 方法將計算兩個序列之間的比對分數。使用兩個序列作為引數呼叫比對器的 “align” 方法將會傳回一個產生器,產生兩個序列之間的比對結果。
一些範例
>>> from Bio import Align >>> aligner = Align.PairwiseAligner() >>> alignments = aligner.align("TACCG", "ACG") >>> for alignment in sorted(alignments): ... print("Score = %.1f:" % alignment.score) ... print(alignment) ... Score = 3.0: target 0 TACCG 5 0 -|-|| 5 query 0 -A-CG 3 Score = 3.0: target 0 TACCG 5 0 -||-| 5 query 0 -AC-G 3
將比對器模式指定為局部以產生局部比對
>>> aligner.mode = 'local' >>> alignments = aligner.align("TACCG", "ACG") >>> for alignment in sorted(alignments): ... print("Score = %.1f:" % alignment.score) ... print(alignment) ... Score = 3.0: target 1 ACCG 5 0 |-|| 4 query 0 A-CG 3 Score = 3.0: target 1 ACCG 5 0 ||-| 4 query 0 AC-G 3
執行全域比對。相同字元給予 2 分,每個不相同字元扣 1 分。
>>> aligner.mode = 'global' >>> aligner.match_score = 2 >>> aligner.mismatch_score = -1 >>> for alignment in aligner.align("TACCG", "ACG"): ... print("Score = %.1f:" % alignment.score) ... print(alignment) ... Score = 6.0: target 0 TACCG 5 0 -||-| 5 query 0 -AC-G 3 Score = 6.0: target 0 TACCG 5 0 -|-|| 5 query 0 -A-CG 3
與上述相同,但現在開啟間隙時扣 0.5 分,延伸間隙時扣 0.1 分。
>>> aligner.open_gap_score = -0.5 >>> aligner.extend_gap_score = -0.1 >>> aligner.target_end_gap_score = 0.0 >>> aligner.query_end_gap_score = 0.0 >>> for alignment in aligner.align("TACCG", "ACG"): ... print("Score = %.1f:" % alignment.score) ... print(alignment) ... Score = 5.5: target 0 TACCG 5 0 -|-|| 5 query 0 -A-CG 3 Score = 5.5: target 0 TACCG 5 0 -||-| 5 query 0 -AC-G 3
比對函式也可以使用 Biopython 中已包含的已知矩陣
>>> from Bio.Align import substitution_matrices >>> aligner = Align.PairwiseAligner() >>> aligner.substitution_matrix = substitution_matrices.load("BLOSUM62") >>> alignments = aligner.align("KEVLA", "EVL") >>> alignments = list(alignments) >>> print("Number of alignments: %d" % len(alignments)) Number of alignments: 1 >>> alignment = alignments[0] >>> print("Score = %.1f" % alignment.score) Score = 13.0 >>> print(alignment) target 0 KEVLA 5 0 -|||- 5 query 0 -EVL- 3
您也可以在建構 PairwiseAligner 物件時,透過將屬性作為關鍵字引數提供,來直接設定屬性的值
>>> aligner = Align.PairwiseAligner(mode='global', match_score=2, mismatch_score=-1) >>> for alignment in aligner.align("TACCG", "ACG"): ... print("Score = %.1f:" % alignment.score) ... print(alignment) ... Score = 6.0: target 0 TACCG 5 0 -||-| 5 query 0 -AC-G 3 Score = 6.0: target 0 TACCG 5 0 -|-|| 5 query 0 -A-CG 3
- __init__(scoring=None, **kwargs)
依照關鍵字引數指定的內容初始化 PairwiseAligner。
如果 scoring 為 None,則使用預設評分方案,比對 = 1.0,不比對 = 0.0,間隙分數 = 0.0。如果 scoring 為 “blastn”、“megablast” 或 “blastp”,則分別使用 BLASTN、MEGABLAST 或 BLASTP 的預設取代矩陣和間隙分數。
迴圈處理剩餘的關鍵字引數,並將它們設定為物件的屬性。
- __setattr__(key, value)
實作 setattr(self, name, value)。
- align(seqA, seqB, strand='+')
使用 PairwiseAligner 傳回兩個序列的比對結果。
- score(seqA, seqB, strand='+')
使用 PairwiseAligner 傳回兩個序列的比對分數。
- __getstate__()
- __setstate__(state)
- class Bio.Align.CodonAligner(codon_table=None, anchor_len=10)
基礎類別:
CodonAligner
將核苷酸序列比對到胺基酸序列。
此類別實作動態規劃演算法,將核苷酸序列比對到胺基酸序列。
- __init__(codon_table=None, anchor_len=10)
為特定的遺傳密碼初始化 CodonAligner。
- 參數
codon_table - 代表遺傳密碼的 CodonTable 物件。如果 codon_table 為 None,則使用標準遺傳密碼。
- score(seqA, seqB)
傳回蛋白質序列和核苷酸序列的比對分數。
- 參數
seqA - 胺基酸的蛋白質序列(純字串、Seq、MutableSeq 或 SeqRecord)。
seqB - 核苷酸序列(純字串、Seq、MutableSeq 或 SeqRecord);接受 DNA 和 RNA 序列。
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> aligner = CodonAligner() >>> dna = SeqRecord(Seq('ATGTCTCGT'), id='dna') >>> pro = SeqRecord(Seq('MSR'), id='pro') >>> score = aligner.score(pro, dna) >>> print(score) 3.0 >>> rna = SeqRecord(Seq('AUGUCUCGU'), id='rna') >>> score = aligner.score(pro, rna) >>> print(score) 3.0
這是一個 DNA 序列中發生讀碼框架移位的範例
>>> dna = "ATGCTGGGCTCGAACGAGTCCGTGTATGCCCTAAGCTGAGCCCGTCG" >>> pro = "MLGSNESRVCPKLSPS" >>> len(pro) 16 >>> aligner.frameshift_score = -3.0 >>> score = aligner.score(pro, dna) >>> print(score) 13.0
在以下範例中,讀碼框架移位的位置不明確
>>> dna = 'TTTAAAAAAAAAAATTT' >>> pro = 'FKKKKF' >>> len(pro) 6 >>> aligner.frameshift_score = -1.0 >>> alignments = aligner.align(pro, dna) >>> print(alignments.score) 5.0 >>> len(alignments) 3 >>> print(next(alignments)) target 0 F K K K 4 query 0 TTTAAAAAAAAA 12 target 4 K F 6 query 11 AAATTT 17 >>> print(next(alignments)) target 0 F K K 3 query 0 TTTAAAAAA 9 target 3 K K F 6 query 8 AAAAAATTT 17 >>> print(next(alignments)) target 0 F K 2 query 0 TTTAAA 6 target 2 K K K F 6 query 5 AAAAAAAAATTT 17 >>> print(next(alignments)) Traceback (most recent call last): ... StopIteration
- align(seqA, seqB)
將核苷酸序列比對到其對應的蛋白質序列。
- 參數
seqA - 胺基酸的蛋白質序列(純字串、Seq、MutableSeq 或 SeqRecord)。
seqB - 核苷酸序列(純字串、Seq、MutableSeq 或 SeqRecord);接受 DNA 和 RNA 序列。
傳回 Alignment 物件的迭代器。
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> aligner = CodonAligner() >>> dna = SeqRecord(Seq('ATGTCTCGT'), id='dna') >>> pro = SeqRecord(Seq('MSR'), id='pro') >>> alignments = aligner.align(pro, dna) >>> alignment = alignments[0] >>> print(alignment) pro 0 M S R 3 dna 0 ATGTCTCGT 9 >>> rna = SeqRecord(Seq('AUGUCUCGU'), id='rna') >>> alignments = aligner.align(pro, rna) >>> alignment = alignments[0] >>> print(alignment) pro 0 M S R 3 rna 0 AUGUCUCGU 9
這是一個 DNA 序列中發生讀碼框架移位的範例
>>> dna = "ATGCTGGGCTCGAACGAGTCCGTGTATGCCCTAAGCTGAGCCCGTCG" >>> pro = "MLGSNESRVCPKLSPS" >>> alignments = aligner.align(pro, dna) >>> alignment = alignments[0] >>> print(alignment) target 0 M L G S N E S 7 query 0 ATGCTGGGCTCGAACGAGTCC 21 target 7 R V C P K L S P S 16 query 20 CGTGTATGCCCTAAGCTGAGCCCGTCG 47
- Bio.Align.write(alignments, target, fmt, *args, **kwargs)
將比對結果寫入檔案。
- 參數
alignments - Alignments 物件、Alignment 物件的迭代器或單一 Alignment。
target - 要寫入的檔案或類檔案物件,或是檔案名稱字串。
fmt - 描述檔案格式的字串(不區分大小寫)。
請注意,如果提供檔案或類檔案物件,您的程式碼應在呼叫此函式後關閉 target,或呼叫 .flush(),以確保資料寫入磁碟。
傳回寫入的比對結果數(以整數表示)。
- Bio.Align.parse(source, fmt)
剖析比對檔案並傳回比對結果的迭代器。
- 參數
source - 要從中讀取的檔案或類檔案物件,或是檔案名稱字串。
fmt - 描述檔案格式的字串(不區分大小寫)。
典型用法,開啟檔案以讀取,並迴圈處理比對結果
>>> from Bio import Align >>> filename = "Exonerate/exn_22_m_ner_cigar.exn" >>> for alignment in Align.parse(filename, "exonerate"): ... print("Number of sequences in alignment", len(alignment)) ... print("Alignment score:", alignment.score) Number of sequences in alignment 2 Alignment score: 6150.0 Number of sequences in alignment 2 Alignment score: 502.0 Number of sequences in alignment 2 Alignment score: 440.0
對於諸如 bigMaf 之類的延遲載入檔案格式,僅在需要時才讀取檔案內容,請確保在擷取比對資料時檔案保持開啟狀態。
當檔案只包含一個比對結果時,可以使用 Bio.Align.read(…) 函式。
- Bio.Align.read(handle, fmt)
剖析包含一個比對結果的檔案,並傳回該比對結果。
- 參數
source - 要從中讀取的檔案或類檔案物件,或是檔案名稱字串。
fmt - 描述檔案格式的字串(不區分大小寫)。
此函式用於剖析僅包含一個比對結果的比對檔案。例如,讀取 Clustal 檔案
>>> from Bio import Align >>> alignment = Align.read("Clustalw/opuntia.aln", "clustal") >>> print("Alignment shape:", alignment.shape) Alignment shape: (7, 156) >>> for sequence in alignment.sequences: ... print(sequence.id, len(sequence)) gi|6273285|gb|AF191659.1|AF191 146 gi|6273284|gb|AF191658.1|AF191 148 gi|6273287|gb|AF191661.1|AF191 146 gi|6273286|gb|AF191660.1|AF191 146 gi|6273290|gb|AF191664.1|AF191 150 gi|6273289|gb|AF191663.1|AF191 150 gi|6273291|gb|AF191665.1|AF191 156
如果檔案包含零個記錄或多個記錄,則會引發例外狀況。例如
>>> from Bio import Align >>> filename = "Exonerate/exn_22_m_ner_cigar.exn" >>> alignment = Align.read(filename, "exonerate") Traceback (most recent call last): ... ValueError: More than one alignment found in file
如果要讀取包含多個比對結果的檔案,請使用 Bio.Align.parse 函式。