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

标签 mysql bash matrix

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

例子:

表'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(“来源”)进行分组。 例如,y 轴看起来像这样:

KMT1 Helix

KMT1 Kringel

KMT2 Helix

KMT2 Kringel

结果应该是这样的: Wanted heatmap

橙色表示给定物种中同时存在结构域和原始蛋白。黄色表示仅在物种中发现了蛋白质,但在域中却没有。 我刚刚学会了如何使用 MySQL,而且我从未编写过脚本。你能给我一个提示,我可以用什么程序/脚本来完成这个任务吗?

提前致谢!

最佳答案

鉴于您的 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)

一旦你有一个 数据库中的记录,然后可以将其输出为 table 。你会风格(使用 ) <td>元素根据expressionvalue的值。所以你的输出看起来像这样:

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

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

关于mysql - 表热图中的 0-1-2 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15363963/

相关文章:

MySQL 启动时尝试登录失败

c++ - VS2010 上的 MySQL Connector C 链接问题

bash - bash 脚本中 "jobs"命令的奇怪行为

linux - 执行命令而不将其保留在历史记录中

matlab - 如何将较大的值移动到相关矩阵中的矩阵对角线附近

mysql - 无法将 '' 更改为 mysql 存储过程中日期时间的 null

mysql - 将旧版本mysql数据库导入到新版本mysql中

matlab - 初始化 3D 矩阵并添加新数据

bash - 捕获一行代码的错误流,并在保持stdout不变的情况下用trap报告

arrays - channel 元素类型太大 Golang