perlとかpythonで使える綺麗な描画ライブラリを探してみた

Radial clustergramsっていうクラスタリングの結果を円の形にして視覚的に分かりやすくするっていう論文があって、Anti-Grain Geometryというツールキットを使って実装されてるそうで、かなり綺麗に描けるみたい。

おーこれいいナァと思ってたら意外なところで似たような視覚化を見つけた。

du_scanner - miau's blog?

HDD が一杯になってどのファイルが容量を食ってるか確認したくなった時、私は Scanner というソフトを使います。

ハードディスクの使用状況を視覚的に確認できる「Scanner」v2.1

マインドマップ的な理屈(下の階層ほど外周部に表示される)で、情報が効率よく収まっているので気に入っているわけですが。

Perlのスクリプトも公開されているので、これを使えば、Radial clustergramsと似たようなことはできそうな気がする。

というわけで、GDでも使ってやってみるかなと思ったんだが、GDあんま綺麗じゃないし。AGGみたいな綺麗な描画ライブラリはないものかと脱線して描画ライブラリ探しに夢中になってた。

  • Anti-Grain Geometry
  • さすがに綺麗、でもc++用、swig使ってperlバインディングとか用意できるのだろうか?わからん。
  • Cairo
  • なかなかヨサゲ。Vector Graphics Libraryなのでかなり綺麗。
  • Matplotlib
  • pythonだったらこれかな。対話的にいじれるので調子いい。

それにしても、Matplotlib便利そうだ。あとでExamples 眺めてみよう。

Special Volume on Spectroscopy and Chemometrics in R

Journal of Statistical Softwareでかなり面白い特集が。しかも読めるし。

chemoinformaticsの読み物としても結構楽しめる。plsとか丁寧に説明してある。特にChemical Informatics Functionality in Rなどがお奨め。RCDKで記述子結構発生させられるのね。ちょっと心惹かれるかも。

あとはModel-based Methods of Classification: Using the mclust Software in Chemometricsがいまいち理解できなかったのであとでちゃんと考えてみる。うまくあてはまるモデルを選択するだけなんだろうか?

アレイの論文でも探して読めばイメージしやすいような気がしてるけど。

とりあえず検索してみた

TMACCという記述子

新しい記述子発生ソフトをGPLで使えることを知った。TMACCというそうだ。むーjavaか~とか言わないで、週末にでも実際に動かしてみる。そしてそのうちperlから呼べるように変える。実際、CDKが一番盛り上がってる感じだから、追っかけないとあかんなぁ。と同時に、オープンな記述子発生ソフトは貴重というか、増えてくると色々できて面白い。

Topological MAximum Cross-Correlation

論文によると解釈可能なcorrelation descriptorだそう。

  • positive,negativeのチャージのプロパティを正負二つの特性として分けて考えるよ
  • autocorrelationだけじゃなくてcross-correlationも考慮するよ。pos-posだけじゃなくて、pos-negative logSみたいな
  • sum()は評価しないで、GRINDのように、最大値max()をとるよ

三番目の理由により、記述子とその位置が対応するので、どのアトムのどういうプロパティが重要かっていう解釈が可能。つまりMACCだとそういうことができて、CoMFAなノリ(はGRIND)でなくてトポロジカルな勢いで記述子作ってみたよってのがTMACC

という流れなので、モデル構築は普通にPLS

比較対照はHQSAR。これはなんかdayrightのハッシュっぽいやり方。GRIND,HQSARは下のURLを参照 http://chem.clubsse.com/Tripos/Tech/QSAR/Almond/Product.html http://chem.clubsse.com/Tripos/Tech/QSAR/HQSAR/product.html

HQSARみたいに部分構造から記述子つくるんだったらベイズみたいなほうが精度が上がるような気がするんだけど。という風に考えれば、TMACCを使ってベイズでモデル構築してもいいかもしんない。

TMACC-PLSで重要そうな原子をピックアップしてから、ファーマコフォアモデルを作成するっていう流れでもいいかもな感じだけどこれはトレーニングセット次第の気がする。

ちなみに、僕は解釈できる記述子信奉派です。よくわからない謎記述子は、仮に重要なファクターだって示唆されても、じゃぁどこをどういじればよさげな方向にいくのさ?て悩んで終わるだけだし。

planetにfaviconを表示させてみる

外部リンクにFaviconを表示するjavascript | caramel*vanillaを参考にPlanet Chemoinformaticsで購読しているフィードのfaviconを表示するようにしてみた。

favicon

実験ノート電子化ってみんな考えるのね

オープンソースで、blogカスタマイズしてラボノートっぽくするのはおもろいかもーと思う。

僕も、暗黙知を共有するというあたりに興味があって、イントラブログとかの流れで僕もあれやこれやと試したことがある。実験的というかお遊びというか、ほとんどぽしゃってるけど。

断片はここら辺に。

s2k's eye 2nd Ed.

以前に誰かが同じ実験をしていたとしても、それを紙ベースの記録から探し出すのは大変な作業です。そうこうしているうちに、実は同じ失敗実験を何人もの人が繰り返している…なんてことも実際にはあるようです。

こういうノウハウ共有化っぽいものは、pukiwikiなんかを使ってマニュアルにノウハウを加えていって充実させたりするくらいでも結構効果がある。pukiwikiを4年くらい使っているが、それのおかげで生産性はかなりあがった(というかヒトの転職に対してロバストになってる)のは実感している。ノウハウがヒト依存から組織依存になったっていうか。

s2k's eye 2nd Ed.: 実験ノート電子化考

ブログシステムの重要な利点に、トラックバックシステムがあります。ある実験が別の実験を参考にしていたり、また多くの実験はそれ単独ではなく連続したステップの一つになっています。それらを有機的に相互リンクで結びつけるのに、トラックバックは最適です。

トラックバックは、トラックバックする相手を探さないといけないのでユーザーに処理させると結構面倒くさがる。WikiNameとかはてなキーワードみたいに単語に反応して勝手にリンクが張られるか、規約の中に押し込んで、実験者が意識しなくてもつながるような仕組みにしたほうが良い気がしてる。知らないヒトにトラックバックの意義とかをきちんと説明するのは意外に難しい。

その当時学んだことは、

  • ラボのレポーティングの単位がもっとマイクロコンテンツにならないと駄目っぽい
  • リテラシーの一番低いところにあわせてUIを考えないといけないので結構厳しそう(費用対効果が見合わんしwebブラウザの表現力が、、、、)
  • プリントアウトしたがるから、そういった部分のケアが必須だし、既存の出力のサポートは必須
  • エトセトラエトセトラ

まずはリテラシをあげるのが先かなとか思ってるが、ここら辺はツールが先でもヒトの意識が先でもどっちでもいいんでしょうね。種だけまいとけば。

バイオプログラミング―バイオインフォマティクス演習

bioinformatics,chemoinfomaticsのあれこれをc++で解説してある本。でも、解説は少なめ、ソースコードまんまのせすぎめ。写経にはちょうどいいので、今は夜な夜な写経してる。

分かりやすく言うとソースコード集。もっと分かりやすく言うとビッグワンガム

  • ソースコード:プラモ
  • 本文+注釈:申し訳程度のガム

と考えればよいかと。

どっちかというとクックブック的な構成なのだけど、Makefileが全章分まとめて作ってあるのはいただけない。項目ごとに個別のコードを動かしたいときにはMakefileを書き直す必要があるし、章ごとに完結していないので使いづらい。さらに、ソースコードはオーム社のページからダウンロードできますと書いてあるのに関わらず、本の記載にはない変更箇所がちょこちょことが見受けられたりして紛らわしい。(あとはアーカイブにスワップファイルが含まれてたりとか)

読む本としてみた場合に、全体的にちぐはぐ感があるのは、まずコードありきで、執筆の為に本文適当にでっち上げたからなんでしょうなぁ、などと邪推してみたり。擬似コードなどでアルゴリズムの概要を示したりとか、解説しているコードの場所をきちんと明示するようにして欲しかった。

だから、対象読者も初学者とか、情報系でバイオインフォに興味があるというヒトではなくて、本に載ってるようなツールを既に使っていて中身がどうなってんのか知りたいとか、LLで遅い部分を速くするためにcとかc++で書き直したいナァと考えているヒトが対象でないかと。(かなりニッチな気が)
まぁ、本書の「はじめに」にソースコードをじっくり読んで欲しいって書いてあるし。

読む本としては、読みづらいところが多いが、C++でバイオインフォ、ケモインフォのコードを解説している本はあまり見かけないので貴重だし、僕はSWIG使ってPerlから使えるようにしたかったのでjavaでなくC++の本を探していたために★x4.5ぐらいの満足度。使いたいヒトというよりは作りたいヒト向けの書籍だ。

で、正月休みを利用して、C++入門と適当な入門書を本屋で購入して一通り読んでから、写経を始めてるが、結構楽しい。

smi2pngの幅と高さを指定できるようにした

高さとか幅とか指定して画像に出力するように、コマンドを書いた。というわけで、これよりは使いやすくなった。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/perl

use strict;
use warnings;
use CDK::Smi2Png;
use Getopt::Long;

my $width = 300;
my $height = 300;
my $output = "output.png";

my $result = GetOptions(
                        "width=i" => \$width,
                        "height=i" => \$height,
                        "output=s" => \$output,
);

sub usage
{
  print <<EOF;
usage:

smi2png [-w <width>] [-h <height>] [-o <output>] <SMILES>

  -w, --width             width of output
  -h, --height            height of output
  -o, --output            output PNG file name

EOF
print "\n";
exit;
}

my $smi = shift || usage();

$smi = (split(/\t/, $smi))[0];

my $smic = CDK::Smi2Png->new();
$smic->writePNG($smi,$width,$height,$output);

使い方は、

smi2png -w 200 -h 200 -o thiophene.png "C1=CSC=C1"

とか。

あとは、ベンゼン環をチオフェンに変換するようなモジュールをChemichoに追加した。

benzene

これで、6員環が生物学的等価体の5員環に置換されるようになった。

thiophene

chemicho2png

chemichoの出力をpngにしたのでPioglitazone で試してみた。

設定はこんな感じで。

Generation: 10
Cycle: 1
Prefix: Piogli

Plugins:
  - module: AddCarbon
    weight: 1
  - module: Aromatize
    weight: 0.8
  - module: Bulky
    weight: 1
  - module: DeAromatize
    weight: 0.2
  - module: DecreaseBondOrder
    weight: 1
  - module: GenerateRing
    weight: 0.5
  - module: Halogenize
    weight: 1
  - module: Hydroxylation
    weight: 2
  - module: HeteroCyclization
    weight: 2
  - module: IncreaseBondOrder
    weight: 2
  - module: IntroduceAcid
    weight: 1

6番目の出力から10番目の出力はこんな感じ。

piogli5 piogli6

piogli7 piogli8

piogli9 piogli10

あんまバルキーな変異はよくないな。もうちょいヘテロを導入したりとか、ヘテロ原子増やさずに自由度を減らすような変異をいれたほうがいいかも。芳香環を壊しちゃうのも気になるナァ。

ポスター出します

またもや、個人的ネタで恐縮ですが、今週末のスポッポファイアーのユーザー会でポスター出します(多分)。

しかも名前だけで発表はしないでうろうろします。単なる質問要員としてノミネート。

発表自体は、ITインフラ系構築ネタになる予定。明日から2人で作り始めます。Ajaxとかバリバリ取り入れてるので、そこらへんの話になるかなぁ。か、いわゆる(インフォマティクス的に)テックレイヤーの人達に如何にデータトラッキングの重要性とか、一元管理を浸透させたかとかそういう苦労話メインになるかなぁ。明日、オーバービュー書きながらどっちに転ぶか決めまする。

ホントは、スポッポファイア meets Ajaxとかいうネタがやれればよかったんだけど、手動かす暇なくて。僕の頭の中で腐りかけてル。

gSpan

テキストいじったり、化合物検索したりとグラフ構造いじることが多いのでgSpan をちゃんと覚えようと。

gspan-del.icio.us

DFS-CODEとか枝刈りのあたりとか断片的には理解できるけど、全体としてイメージできてないな。

ちゃんと理解するために、あとでperlで書いてみよう。で、 Chemruby使ってこんなこともやれるみたいなので、同じことをPerlMol使ってできないかなとか思った。gSpanPPで。