【问题标题】:0-1-2 Matrix from a table heatmap0-1-2 表格热图中的矩阵
【发布时间】:2013-02-28 03:03:39
【问题描述】:

我的目标是从 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,而且我从未编写过脚本。你能告诉我我可以用什么程序/脚本来完成这项任务吗?

提前非常感谢!!

【问题讨论】:

    标签: mysql bash matrix


    【解决方案1】:

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

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

    【讨论】:

    • 您好!我不太明白表达式值表是什么意思。
    • @Wicked_sue:我编了一张表,因为你没有说你在哪里存储有关特定域/起源/物种组合是否在物种水平上对蛋白质呈阳性的信息,域水平或两者。如果您编辑您的问题以包含该信息,我可以给您一个更好的答案。
    • 该信息已包含在“Dom”表中。你有蛋白质、域和物种。一种蛋白质具有超过 1 个结构域。您熟悉生物信息学吗?
    • @Wicked_sue:所以你是说特定域/产地/物种组合的存在是表达式值?这是可行的,但更繁琐,因为当表中不存在特定组合时,您需要输出虚拟数据。否则,您将看不到任何负面影响。大约 10 年以来,我一直在编写处理生物信息数据的应用程序。
    • @Wicked_sue:我已经编辑了答案以适应我对您数据的新理解。
    猜你喜欢
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2021-10-08
    • 1970-01-01
    • 2023-03-03
    • 2019-08-09
    • 2021-08-27
    相关资源
    最近更新 更多