将 hmmer --tblout 输出转换为 pandas 数据帧

Cod*_*man 4 python bioinformatics biopython dataframe pandas

  1. 有没有办法将 hmmer 输出转换为 pandas 数据帧?
  2. 我也不确定如何通过 Bio 模块将 hmmer tblout 表加载到 python 中。

我相信您可以使用 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]
Run Code Online (Sandbox Code Playgroud)

Bio*_*eek 5

我会根据您感兴趣的属性构建一个字典,并根据该字典创建一个 DataFrame。假设您对点击的属性感兴趣:

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)
Run Code Online (Sandbox Code Playgroud)