共计 2514 个字符,预计需要花费 7 分钟才能阅读完成。
Blast 比对算法原理与实现形式
做生物的同学必定据说过 blast 比对这个办法,个别在 NCBI 等网站上能够在线进行比对,也能够在本地服务器进行比对,那么 blast 算法到底是怎么实现对不同序列的比对呢?
本文分享经典 blast 算法的根底原理,以及通过 R 语言和 Python 实现这个算法,不依赖网站本人进行序列比对。
什么是 BLAST 比对?
BLAST(Basic Local Alignment Search Tool)是一种罕用的生物信息学算法,用于比对两个或多个序列。BLAST 通过寻找两个序列之间的最大匹配来确定它们之间的相似性。
算法原理
BLAST 算法的原理:
将查问序列与数据库中的序列进行比对,找到最佳匹配。
BLAST 算法的逻辑:首先将查问序列进行分段,而后将这些分段与数据库中的序列进行比对。
K-mer 小片段
在比对过程中,BLAST 算法应用一种称为 K -mer 的技术,将查问序列和数据库序列分成长度为 K 的小片段,而后将这些小片段进行比对。
如果两个小片段具备类似的序列,BLAST 算法就会将它们合并成更长的序列,以便进行更精确的比对。
特点与利用
BLAST 算法的长处是速度快、准确度高,能够在大型数据库中疾速查找类似序列。BLAST 算法在生物信息学畛域中被广泛应用,用于基因正文、蛋白质构造预测、序列比对等方面。
不同序列 blast 比拟算法
- 将查问序列和数据库序列别离转换为碱基对应的数字编码,例如 A 示意为 1,C 示意为 2,G 示意为 3,T 示意为 4。
- 将查问序列划分成长度为 k 的小片段,称为 k -mer。
- 将数据库序列划分成长度为 k 的小片段,称为 k -mer。
- 对于每个查问序列的 k -mer,查找数据库序列中所有与之匹配的 k -mer。
- 对于每个匹配的 k -mer,计算查问序列和数据库序列之间的类似度得分。
- 对于每个查问序列的 k -mer,抉择类似度得分最高的匹配序列,并将其作为最佳匹配。
- 对于每个最佳匹配,计算匹配序列的长度、类似度得分、E 值等参数。
- 依据 E 值和类似度得分,对匹配后果进行排序,输入最终的比对后果。
BLAST 算法的具体实现可能会有所不同,上述算法仅作为一个示例,理论利用中须要依据具体情况进行调整。
此外,BLAST 算法的计算复杂度较高,如果对于理论生物数据处理,须要应用高性能计算机或云计算平台进行计算。
R 语言中实现 blast 算法
以下是一个基于 R 语言的 BLAST 比对算法示例,用于比对两个 DNA 序列:
# 导入 Biostrings 包
library(Biostrings)
# 定义查问序列和数据库序列
query_seq <- DNAString("ATCGATCGATCGATCG")
db_seq <- DNAString("CGATCGATCGATCGATC")
# 定义 k -mer 的长度
k <- 3
# 将查问序列和数据库序列别离转换为数字编码
query_seq_num <- as.numeric(query_seq)
db_seq_num <- as.numeric(db_seq)
# 将查问序列和数据库序列别离划分成 k -mer
query_kmer <- kmer(query_seq_num, k)
db_kmer <- kmer(db_seq_num, k)
# 对于每个查问序列的 k -mer,查找数据库序列中所有与之匹配的 k -mer
matches <- matchPattern(query_kmer, db_kmer)
# 对于每个匹配的 k -mer,计算查问序列和数据库序列之间的类似度得分
scores <- pmatch(query_kmer, db_kmer, fixed=FALSE)
# 对于每个查问序列的 k -mer,抉择类似度得分最高的匹配序列,并将其作为最佳匹配
best_matches <- maxMatches(matches)
# 对于每个最佳匹配,计算匹配序列的长度、类似度得分、E 值等参数
match_length <- width(best_matches)
match_score <- scores[best_matches]
e_value <- length(db_kmer) * (1 - exp(-match_score))
# 依据 E 值和类似度得分,对匹配后果进行排序,输入最终的比对后果
result <- data.frame(query_seq, db_seq, match_length, match_score, e_value)
result <- result[order(result$e_value),]
Python 实现 blast 算法
首先,须要装置 Biopython 库来实现 BLAST 比对算法。您能够应用以下命令在终端中装置 Biopython:
pip install biopython
接下来,能够应用以下代码来实现 BLAST 比对算法:
from Bio.Blast import NCBIWWW
from Bio.Blast import NCBIXML
# 进行 BLAST 比对
result_handle = NCBIWWW.qblast("blastn", "nt", "ACGTGAGGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGC")
# 读取 BLAST 比对后果
blast_record = NCBIXML.read(result_handle)
# 输入比对后果
for alignment in blast_record.alignments:
for hsp in alignment.hsps:
print('****Alignment****')
print('sequence:', alignment.title)
print('length:', alignment.length)
print('e value:', hsp.expect)
print(hsp.query[0:75] + '...')
print(hsp.match[0:75] + '...')
print(hsp.sbjct[0:75] + '...')
这段代码会将序列 ”ACGTGAGGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGC” 与 NCBI 的 nt 数据库进行比对。
本文由 mdnice 多平台公布