我的目标是从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
结果应为:
橙色意味着在给定物种中存在结构域和原始蛋白质。黄色表示只在物种中发现蛋白质,而不是在结构域中发现。 我几乎没学会如何使用MySQL而且我从未编写脚本。你能给我一个关于我可以做这个任务的程序 /脚本的提示吗?
非常感谢提前!!
答案 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)
从数据库中获得array条记录后,您可以输出html表。您可以根据expressionvalue的值设置样式(使用css)<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'> </td>
<td class='bothexist'> </td>
<td class='onlyprotein'> </td>
</tr>
<tr>
<th>KMT1</th>
<th>Helix</th>
<td class='bothexist'> </td>
<td class='onlyprotein'> </td>
<td> </td>
</tr>
<!-- etc. -->
</tbody>
<tfoot></tfoot>
<table>
繁琐的部分是将来自查询的数据重新组织到一个易于输出表格的结构中。
无论如何,虽然您可以使用shell脚本来完成所有这些操作,但您可能更容易使用更高级别的语言。 perl传统上一直用于生物信息学,有很多很好的库,包括最重要的BioPerl。 python和ruby也很受欢迎。 php是一种非常流行且通用的语言,特别适用于网站,并且被认为非常容易学习(但许多程序员反对其各种松弛)。
我希望这能指出你有用的方向。