表格热图中的0-1-2矩阵

时间:2013-03-12 14:27:26

标签: mysql bash matrix

我的目标是从mysql表中提供的信息中获取0-1-2-Matrix。

示例:

表'Dom'

Origin|Species      |  Domain  

KMT1 |  blabla_1234 |  Kringel

KMT1 |  blabla_1234 |  Helix  

KMT1 |  wobble_4556 |  Kringel 

KMT2 |  blabla_1234  | Helix  

KMT2 | piffi_876    |  Kringel 

现在我想拥有以下矩阵:在x轴上将是所有物种 - 像这样:

blabla_1234 | wobble_4556 | piffi_876

在y轴上将是表'Dom'的所有域名,但是他们必须按照他们的国民党('Origin')进行分组。 例如,y轴看起来像这样:

KMT1 Helix

KMT1 Kringel

KMT2 Helix

KMT2 Kringel

结果应为: Wanted heatmap

橙色意味着在给定物种中存在结构域和原始蛋白质。黄色表示只在物种中发现蛋白质,而不是在结构域中发现。 我几乎没学会如何使用MySQL而且我从未编写脚本。你能给我一个关于我可以做这个任务的程序 /脚本的提示吗?

非常感谢提前!!

1 个答案:

答案 0 :(得分:0)

鉴于您的Dom表只包含正数而不包含负数,您需要生成负数,以便输出表可以映射它们。

此查询将为您提供原始,域和物种的所有可能组合:

SELECT ds.domain, os.origin, ss.species FROM
(SELECT DISTINCT domain FROM Dom) ds
CROSS JOIN
(SELECT DISTINCT origin FROM Dom) os
CROSS JOIN
(SELECT DISTINCT species FROM Dom) ss

因此,要获得每个组合的“表达式值”,包括否定值,请执行以下操作:

SELECT completelist.domain, completelist.origin, completelist.species, 
       COALESCE(Dom.species, FALSE) AS found
FROM
    (SELECT ds.domain, os.origin, ss.species
     FROM 
          (SELECT DISTINCT domain FROM Dom) ds
          CROSS JOIN
          (SELECT DISTINCT origin FROM Dom) os
          CROSS JOIN
          (SELECT DISTINCT species FROM Dom) ss
    ) AS completelist
LEFT JOIN Dom ON (completelist.domain = Dom.domain &&
                  completelist.origin = Dom.origin &&
                  completelist.species = Dom.species)

从数据库中获得条记录后,您可以输出表。您可以根据expressionvalue的值设置样式(使用<td>元素。所以你的输出看起来像这样:

<table>
 <thead>
   <tr>
     <th>Origin</th>
     <th>Domain</th> 
     <th>Blahbla_1234</th>
     <th>wobble_4556</th>
     <th>piffi_876</th>
   </tr>
 </thead>
 <tbody>
   <tr>
     <th>KMT1</th>
     <th>Kringel</th> 
     <td class='bothexist'>&nbsp;</td>
     <td class='bothexist'>&nbsp;</td>
     <td class='onlyprotein'>&nbsp;</td>
   </tr> 
   <tr>
     <th>KMT1</th>
     <th>Helix</th> 
     <td class='bothexist'>&nbsp;</td>
     <td class='onlyprotein'>&nbsp;</td>
     <td>&nbsp;</td>
   </tr> 
   <!-- etc. -->
 </tbody>
 <tfoot></tfoot>
<table>

繁琐的部分是将来自查询的数据重新组织到一个易于输出表格的结构中。

无论如何,虽然您可以使用shell脚本来完成所有这些操作,但您可能更容易使用更高级别的语言。 传统上一直用于生物信息学,有很多很好的库,包括最重要的BioPerl也很受欢迎。 是一种非常流行且通用的语言,特别适用于网站,并且被认为非常容易学习(但许多程序员反对其各种松弛)。

我希望这能指出你有用的方向。