序列比对(alignment):运用特定的算法找出两个或多个序列之间产生最大相似度得分的空格(空位)插入或序列排列方案。
## 比较COVID19与SARS、MERS序列的相似性
from Bio import SeqIO
## 数据来源:GenBank
## https://www.ncbi.nlm.nih.gov/nuccore/NC_045512
covid = SeqIO.read("covid19.fasta", "fasta")
covid
SeqRecord(seq=Seq(‘ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGT…AAA’), id=‘NC_045512.2’, name=‘NC_045512.2’, description=‘NC_045512.2 Severe acute respiratory syndrome coronavirus 2 isolate Wuhan-Hu-1, complete genome’, dbxrefs=[])
sars = SeqIO.read("sars.fasta", "fasta")
mers = SeqIO.read("mers.fasta", "fasta")
from Bio import Align
## 算法:
# 比较两序列对应碱基是否相同
# 相同得1,不同得0
# 通过插入空位,使得分最高,获得全局比对
aligner = Align.PairwiseAligner()
## 用一个简单例子做试验
alignments = aligner.align('ATCT', 'ATCG')
## 打印得分最高的所有结果
for alignment in alignments:
print(alignment)
ATCT-
|||–
ATC-G
ATC-T
|||–
ATCG-
ATCT
|||.
ATCG
## 这里只用到得分
mers_score = aligner.score(covid.seq, mers.seq)
sars_score = aligner.score(covid.seq, sars.seq)
## 在这种算法的基础上,满分即序列长度
mers_similarity = mers_score / len(covid)
sars_similarity = sars_score / len(covid)
print('名称\t相似度')
print('MERS\t%.2f' % mers_similarity)
print('SARS\t%.2f' % sars_similarity)
名称 相似度
MERS 0.70
SARS 0.83