用Biopython解析BLAST结果

这次使用的是 biopython 中解析 blast 结果的功能,随着 blast 版本的不断更新, blast的输出结果的格式也在不断改变,所以这对于 biopython 解析 blast 的结果造成了很大影响,所以 biopython 中一般倾向于处理 xml 格式的 blast 输出结果,因为这种结果的格式一般不随 blast 版本的改变而改变。在进行 blast 的时候需要选择参数 -outfmt 5 即 xml 格式。在使用 biopython 时,加载包的代码是:

from Bio.Blast import NCBIXML

NCBIXML 就是 biopython 中针对解析 xml 格式 blast 结果的子包,要解析结果,同平时的读取文件一样,也需要一个 blast 结果文件的句柄,假设我们的结果文件叫’blast_result.xml’, 那么读取就是:

result_handle = open(‘blast_result.xml’, ’r’)

有了这个句柄,我们就可以通过 biopython 对其进行各种处理了,首先, blasts 的结果是一条一条存在这个句柄文件里的,这时就要分情况讨论,在做 blast 的时候我们是用的一条序列去 blast 还是用的多条序列去 blast,如果是一条,那么在读取这个句柄的时候就可以用:

blast_record = NCBIXML.read(result_handle)

如果是多条:

blast_records = NCBIXML.parse(result_handle)

唯一的区别就是 read 和 parse 的区别,他们的原理都是一样的,即从句柄中提取结果。result_records 对象是一个迭代器,可以允许用户一个接一个的获得 blast 的结果(因为有多条序列)。一般采用 for 循环来挨个读取比对结果:

for blast_record in blast_records:

#do sth. with blast_record

现在,所有有关与 blast 结果的信息都被储存在一条条的 blast_record 中,那么如何提取这些信息?

blast_record 的结果可以分为三大类,调用不同的类可以得到相应的信息:descriptions、 alignments、 multiple_alignment。其中 descriptions 和 alignments 都是以 list 的形式来存储数据的。

·descriptions 下面有四个信息: title、 score、 e、 num_alignments,分别对应数据库中匹配上的序列的标题、匹配的得分、匹配的 e-value、以及多序列比对的数目。

·aligments 下面有三个信息: title、 length、 hsps,分别对应数据库中匹配上的序列的标题、匹配的长度、其中 hsps 是 list 格式的对象,里面储存了 query 和数据库中序列匹配的具体信息,包括匹配得分、 gap 等信息,详细的内容在后面的图片里。

·multiple_alignment 是多序列比对的结果,里面只储存了 alignment 的信息。有了这些具体的方法,在处理 blast 的结果时就不需要写额外的脚本了,只需要提取相关的记录然后进行具体操作就可以了。

同样, biopython 的另一个子包 SearchIO 也可以完成一些类似的工作,而且对于比较简单的需求, SearchIO 的代码相对更加简洁。调用代码:

from Bio import SearchIO

和 NCBIXML 不同的是, SearchIO 在获取 blast 结果文件的时候使用的代码是:

blast_results = SearchIO.parse(‘blast_result.xml’,’blast-xml’)

这个方法不需要先用 open 获得句柄,然后再对句柄进行处理, SearchIO 得到的对象直接就是可以进行各种操作的可迭代对象,这里, read 和 parse 的使用和 NCBIXML 中类似。有了这个对象,就可以提取对象中的各个信息,比如想知道具体是那一条序列和 blast 数据库中的序列比对上了,就可以使用 blast_result.id, id 就指的是具体序列的名字。如果我们想知道 blast 结果中那些序列比对上了,并且把比对上的序列名称存进一个列表进行后续操作,那么代码就是:

#加载 SearchIO

from Bio import SearchIO

#建立用于存储比对上的序列的标题的列表

seq_name=[]

#使用 SearchIO 读取 blast 文件

blast_qresults = SearchIO.parse('blastx_result','blast-xml')

#假设我们使用的是很多序列来进行 blast,这里就使用 for 循环逐个读取每一条序列的比对结果

for blast_qresult in blast_qresults:

#blast_qresult 以列表形式存储比对的结果,如果没有比对上,那么列表长度即为 0,如果比对上了,比对上了多少条那么这里列表的长度就是多少。

if len(blast_qresult)  != 0:

#比对上的序列名称存进建好的列表

    seq_name.append(blast_qresult.id)


更多内容: http://biopython-cn.readthedocs.io/zh_CN/latest/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 面试必背 会舍弃、总结概括——根据我这些年面试和看面试题搜集过来的知识点汇总而来 建议根据我的写的面试应对思路中的...
    luoyangzk阅读 6,747评论 6 173
  • 李红丽 焦点网络初七 坚持分享第32天 我看到画面上有一块遗弃的面包,一群硕大的蚂蚁在上面分而食之,地上是嫩绿的青...
    丽日晴空阅读 489评论 0 0
  • GB2312 for mac 方正小标宋GBK for mac
    淡然z阅读 34,727评论 8 13
  • 《童趣——过家家》 几根松针当荞面, 两朵野花扮新娘。 和上稀泥盖土屋, 插块挡板做围墙。 跪爬坐卧围一圈, 进出...
    普度苍生Neil阅读 186评论 0 1