4

我的目标是从 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”中的所有域,但它们必须按其相应的 KMT(“Origin”)分组。例如,y 轴看起来像这样:

KMT1 Helix

KMT1 Kringel

KMT2 Helix

KMT2 Kringel

结果应该是这样的: 想要的热图

橙色意味着域和原始蛋白质都存在于给定的物种中。黄色表示在物种中仅发现蛋白质,但在结构域中未发现。我才刚刚学会如何使用 MySQL,而且我从来没有写过脚本。你能告诉我我可以用什么程序/脚本来完成这项任务吗?

提前谢谢了!!

4

1 回答 1

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​​ 也很受欢迎。是一种非常流行和通用的语言,特别适用于网站并且被认为非常容易学习(但许多程序员反对它的各种松懈)。

我希望这能为您指明一个有用的方向。

于 2013-03-13T14:34:34.960 回答