从blast结果中取出每个query搜到的evalue最小的结果

在做多基因blast时,通常每个基因找到的匹配序列很多。这时习惯根据evalue来进行筛选,evalue较小的其相似性更高。下面提供两种方法解决。

一 linux命令

blast的-outfmt 6格式默认最上面的比对到的evalue最小,因此可以利用awk根据第一列去重,默认会保留最上面的一条记录,即evalue最小值。

awk '!a[$1]++{print}' 1.blast > uniq.blast

二 pandas

最近在看pandas,所以拿来练手。思路也是先排序,后去重。

import pandas as pd
#将blast(-outfmt 6)输出结果保存到DataFrame
inp = pd.read_table('E:\python_test\1.blast')
inp
querysubjectidentityalign_lengthmismatchesgap_opensq_startq_ends_starts_endevaluebit_score
0gene1SQ1830943481001470011473782323272
1gene1SQ1831191921006600166821472122
2gene1SQ182140986100157001157882441291
3gene2SQ1830943481001470011473782323272
4gene2SQ1831191921006600166821472122
5gene2SQ182140986100157001157882441291
6gene3SQ1830943481001470011473782329272
7gene3SQ1831191921006600166821478122
8gene3SQ182140986100157001157882447291
#取出每个query对应的evalue最低的subject
inp.sort_values(by=['query','evalue']).drop_duplicates(subset='query')
querysubjectidentityalign_lengthmismatchesgap_opensq_startq_ends_starts_endevaluebit_score
2gene1SQ182140986100157001157882441291
5gene2SQ182140986100157001157882441291
8gene3SQ182140986100157001157882447291

有可能出现gene相同,evalue相同的情况,我觉得可以在加上bit_socre和align_length进行排序,这两列为降序排列。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值