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比较算法

  1. 将查询序列和数据库序列分别转换为碱基对应的数字编码,例如A表示为1,C表示为2,G表示为3,T表示为4。

  2. 将查询序列划分成长度为k的小片段,称为k-mer。

  3. 将数据库序列划分成长度为k的小片段,称为k-mer。

  4. 对于每个查询序列的k-mer,查找数据库序列中所有与之匹配的k-mer。

  5. 对于每个匹配的k-mer,计算查询序列和数据库序列之间的相似度得分。

  6. 对于每个查询序列的k-mer,选择相似度得分最高的匹配序列,并将其作为最佳匹配。

  7. 对于每个最佳匹配,计算匹配序列的长度、相似度得分、E值等参数。

  8. 根据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-merquery_kmer <- kmer(query_seq_num, k)db_kmer <- kmer(db_seq_num, k)

# 对于每个查询序列的k-mer,查找数据库序列中所有与之匹配的k-mermatches <- 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 NCBIWWWfrom 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 多平台发布

生物学经典blast比对算法,R语言和Python如何实现?相关推荐

  1. R语言和python语言的区别在什么地方,各自的应用场景是什么

    R语言和Python语言都是广泛使用的数据分析和科学计算语言,但它们有一些不同之处. R语言是一种专门用于数据分析和统计建模的编程语言.它提供了许多内置的数据结构和函数,可以方便地进行数据处理.可视化 ...

  2. R语言和Python连接hive

    连接原理:R语言和Python连接,R中读取的数据可以传递到python中进行处理,同理python中的结果可以传递到R语言中进行,二者满足双向传递.而Python连接hive的方法较多且简单,因此采 ...

  3. 数据挖掘r语言和python知乎_Hellobi Live |R语言爬虫实战案例分享:网易云课堂、知乎live、今日头条、B站视频...

    课程名称 R语言爬虫实战案例分享:网易云课堂.知乎live.今日头条.B站视频 网络数据抓取是数据科学中获取数据中的重要途径,但是一直以来受制于高门槛,都是专业程序员的专属技能.直到R语言和Pytho ...

  4. r语言和python的区别_c语言和python的区别

    c语言和python的区别 1.语言类型不同. Python是一种动态类型语言,又是强类型语言.它们确定一个变量的类型是在您第一次给它赋值的时候.C 是静态类型语言,一种在编译期间就确定数据类型的语言 ...

  5. R语言和 Python —— 一个错误的分裂

    全世界有3.14 % 的人已经关注了 数据与算法之美 最近有一些文章提出与年龄相关的问题:"崭露头角的年轻数据科学家们是学习R语言还是Python更好?" 答案似乎都是" ...

  6. r语言和python的区别-Python和R语言之分析对比

    在Python中调用R或在R中调用Python,为什么是"和"而不是"或"? 在互联网中,关于"R和Python"的文章,排名前十的搜索结果 ...

  7. MATLAB算法实战应用案例精讲-【数据分析】基于sklearn的异常检测(附matlab、R语言和python代码实现)

    目录 前言 几个高频面试题目 离群检测 与 新奇检测的区别 算法原理

  8. MATLAB算法实战应用案例精讲-【回归算法】偏最小二乘回归(PLS)(附MATLAB、R语言和Python代码)

    目录 前言 算法原理 建模方法 建模步骤 算法特点 算法步骤

  9. MATLAB算法实战应用案例精讲-【数据分析】时序异常检测(补充篇)(附Java、R语言和python代码实现)

    目录 前言 几个高频面试题目 1.如果时间序列存在异常值,对时间序列分析有什么影响 知识储备 <

最新文章

  1. linux桌面文件夹改图标,Linux 给桌面程序设置个性化图标
  2. python可以管理操作系统吗_python之路——操作系统的发展史
  3. java调用百度api完成人脸识别
  4. H264压缩码率与GOP
  5. 互联网网站的反爬虫策略浅析
  6. 【信仰充值中心】Pale Moon 29 正式版更新日志
  7. mySQL mainxml汉化包下载
  8. 【Python】Spy++使用
  9. 对draw.io第一次加载慢的探讨
  10. android 异常 android Removing unused resources requires unused code shrinking to be turned on.
  11. 物联网的核心技能是什么?
  12. jiffies和jiffies_64
  13. javaMail获取收件箱邮件之javax.mail.FolderNotFoundException
  14. 关于WPF(二)XAML
  15. Java图片Base64互转
  16. 早晚安打卡公众号互动积分商城系统开发
  17. 百度apollo novatel_parser.cc部分解算代码
  18. 网吧加油站_网吧加油站常见的三个问题解答
  19. 用 Python 制作一个艺术签名小工具,给自己设计一个优雅的签名
  20. 数据结构与算法之算法基础公式

热门文章

  1. 0.总也记不住的考场or竞赛必备stl各种用法及其他技巧
  2. 《火星人敏捷开发手册2012-08-15》版发布:用户故事分类及示例
  3. Unity开发备忘录000028:Bolt无代码做游戏——控制角色行走
  4. svm实现图片分类(python)
  5. REG理解与PCFICH/PHICH/PDCCH的资源映射
  6. 项目管理中,项目干系人的角色和责任
  7. 在浏览器上安装 Vue Devtools工具
  8. 人工智能-浅谈人工智能
  9. 拼多多怎么通过流量提高排名|成都盛天海
  10. STM32最小系统板介绍