【问题标题】:Convert a hmmer --tblout output to a pandas dataframe将 hmmer --tblout 输出转换为 pandas 数据框
【发布时间】:2020-05-26 00:03:44
【问题描述】:
  1. 有没有办法将 hmmer 输出转换为 pandas 数据帧?
  2. 我也不确定如何通过以下方式将 hmmer tblout 表加载到 python 中 Bio 模块。

我相信您可以使用 SeqIO.parse 或 SeqIO.search 调用 hmmer 格式。表格的格式以制表符分隔,但它似乎是随机空格的集合,这意味着如果我删除标题并 # 只留下表格信息没有简单的方法来使用制表符分隔表。

hmmer --tblout 文件的一个小例子如下:

#                                                                                       --- full sequence ---- --- best 1 domain ---- --- domain number estimation ----
# target name        accession  query name                                   accession    E-value  score  bias   E-value  score  bias   exp reg clu  ov env dom rep inc description of target
#------------------- ----------                         -------------------- ---------- --------- ------ ----- --------- ------ -----   --- --- --- --- --- --- --- --- ---------------------
3300000568@Draft_10015026@Draft_1001502652 -          Bacteria_NODE_1_length_628658_cov_8.291329_24 -            7.1e-07   29.3   0.0   1.9e-05   24.6   0.0   2.0   1   1   1   2   2   2   2 -
7000000546@SRS019910_WUGC_scaffold_3948@SRS019910_WUGC_scaffold_3948_gene_2890 -          Bacteria_NODE_1_length_628658_cov_8.291329_53 -            1.6e-07   31.7   0.0   0.00051   20.3   0.0   2.2   2   0   0   2   2   2   2 -
#
# Program:         hmmscan
# Version:         3.1b2 (February 2015)
# Pipeline mode:   SCAN
# Query file:      ../Exponential_High_Complexity_Simulation.faa
# Target file:     final_list.hmm
# Option settings: hmmscan --tblout Exponential_Earth.txt -E 1e-5 --cpu 8 final_list.hmm ../Exponential_High_Complexity_Simulation.faa 
# Current dir:     /Strong/home/glickmanc/Programs/EarthVirome
# Date:            Mon Feb 24 10:47:51 2020
# [ok]

【问题讨论】:

    标签: python pandas dataframe bioinformatics biopython


    【解决方案1】:

    我会根据您感兴趣的属性构建一个字典,并从该字典中创建一个 DataFrame。说你对attributes of the hits感兴趣:

    from collections import defaultdict
    import pandas as pd
    from Bio import SearchIO
    
    filename = 'test.hmmer'
    
    attribs = ['accession', 'bias', 'bitscore', 'description', 'cluster_num', 'domain_exp_num',  'domain_included_num', 'domain_obs_num', 'domain_reported_num', 'env_num', 'evalue', 'id', 'overlap_num', 'region_num']
    
    hits = defaultdict(list)
    
    with open(filename) as handle:
        for queryresult in SearchIO.parse(handle, 'hmmer3-tab'):
          #print(queryresult.id)
          #print(queryresult.accession)
          #print(queryresult.description)
          for hit in queryresult.hits:
            for attrib in attribs:
              hits[attrib].append(getattr(hit, attrib))
    
    pd.DataFrame.from_dict(hits)
    

    【讨论】:

    • 在我的情况下,这很好用,但无法正确填充查询访问(提供帮助,但在 queryresult.accession 处注释掉)。我得到的是-,而不是实际的加入。我的解决方案是简单地将其保存在外部循环中,然后将其传递到查询的每个命中的命中字典中,而不是将其包含在 attribs 中。
    猜你喜欢
    • 2018-04-18
    • 2019-05-14
    • 2014-08-19
    • 2019-07-01
    • 2021-12-13
    • 2018-05-29
    • 2020-07-28
    • 2018-03-25
    • 1970-01-01
    相关资源
    最近更新 更多