化合物の類似性でネットワークを構築してCytoscapeで見てみる

chemoinformaticsでもネットワークアナリシスは重要だと思う。今はマイナーだけど今後精力的に研究されんじゃないかなぁと。

cytoscape

pybel使うとシミラリティベースのネットワークは簡単に作れる。

import pybel

mols = list(pybel.readfile("sdf", "pc_sample.sdf"))
fps = [x.calcfp() for x in mols] 

for i in range(len(fps)):
    ids = []
    for j in range(i,len(fps)): 
        if (fps[i] | fps[j]) > 0.5 and i != j: 
            ids.append(mols[j].title)
    print "%s %s %s" % (mols[i].title, "sim", " ".join(ids))

SIF(simple interaction format)形式なので、拡張子sifでcytoscapeに読み込まさせればOK。

あとでケモインフォクックブックにも載せておこう。

文献とか特許のマイニング

昨日のワークショップでは、面白い話が聞けてよかった。いくつかアイデアが浮かんだのでメモっておく。特に二次会の他愛のない話はブレスト的でよかった。

文献中の画像から分類

どういう解析をしたらいいかわからないとか、どういうグラフとかプロットが好まれるのかわからないという話があって、解析結果を含む(当該ソフトウェア名を含むとかで絞るのか?)論文を集めてきて、pdfから画像を抜き出し、プロット、チャートを画像類似検索とか組み合わせて、検索できるサイトがあれば便利なんじゃなかろうか?

R Graphical Manualの論文版みたいな感じ。

Patentと文献を自動的に解析

製薬企業が文献を出すのは、色々制約があって(故に制約企業)。たいていはプロジェクトがポシャったとき(またはゴールしたとき)と相場が決まっているので、patent中の実施例化合物名を会社名と紐付けて収集しておいてデータベース化しておいて、論文が出たらそっちのデータベースと照会するっていうのはどうかなと。パテントは結構そのプロジェクトのトーンがわかるでしょう(例えば実施例がやたらと多いパテントとかやっつけ仕事か?とか)。あと論文とかも学位対策か?とかもauthorと特許の出願者照らし合わせながらみればわかったりしませんかね。BMCLとか、「実験記録じゃねーのこれは?」というのが結構多くて、なんでこんなもん投稿すんのかなぁとか思ったりして背景が知りたかったりするのですよね。学位対策度87%とか出てくればdiscussionのとこだけ読んでたいしたことなければ読み飛ばして終了とかできるのでありがたかったりする。

というように、文献検索系のマイニングをビジネスというか組織ハックとか業界ハック的な側面から考えていくと色々面白そうなこともやれるよなぁと。

ProductName Rによるテキストマイニング入門
石田 基広
森北出版 / ¥ 2,940 ()
在庫あり。

bayonで大量の化合物クラスタリング

昨日bayonでどんだけいけるかって話になって、そういえばあんまり大きい数のクラスタリングしたことないなと思ったので早速やってみた(白macbook)。

データはPubchemから最新の25万件分(Compound_45925001_45950000からCompound_46150001_46175000まで)をダウンロードしてきた。bayon用のデータセットを作るためのpythonスクリプトは以前書いたものを使った。

for i in *.sdf.gz ; do babel -imol $i -ofpt ${i%.sdf.gz}.fpt  -xh -xfFP2; done
for i in *.fpt ; do ../python/f2bayon.py $i > ${i%.fpt}.tsv; done

とりあえず25000件くらい

$ wc Compound_45925001_45950000.tsv
   24770 6696478 20005168 Compound_45925001_45950000.tsv

$ time bayon -n 100 Compound_45925001_45950000.tsv > Compound_45925001_45950000.cls

real    0m37.312s
user    0m36.378s
sys     0m0.402s

1分かからず終了。続いて25万件くらい

$ wc all.tsv 
  248232 74728370 222905963 all.tsv

$ time bayon -n 10000 all.tsv > all.cls

real    9m49.447s
user    9m4.833s
sys     0m8.037s

これは10分かからずに終了。

今日の某ユーザー会の感想

「スライドは全て英語にしといたほうが無難だな」と思った。日本のユーザー会といっても、日本で行われるユーザー会であって、日本語のユーザー会とは異なるのですな。でも、そのほうがいいのかも。

  • chemoinformaticsにおいてaromacityはruleにすぎない! ってのは名言だと思った。
  • javaはサポートしているからjruby使えとか、groovy使えとかScala使えというのは商用ソフトウェアのサポート体制として利にかなっているなと。
  • 同様に.NETサポートするからIronRuby使えとかIronPython使えとかF#使えとか。でもF#はあなたの趣味でしょ?と思った。

あとはAmazon EC2でガバッと計算したときにbillionオーダーの化合物の計算が安価に速く出来ればとか。そういう事例はないかなと思ったり。中小製薬企業で中途半端な数のクラスタマシンをもつより、そういう方法で計算させる方向にシフトしていけば費用対効果もいいんじゃないかなと思うんだけど、どうなんでしょうね?

Quantum Chemical Reactivity Descriptors in Computational Drug Design

ちょっと気になる本

ProductName Quantum Chemical Reactivity Descriptors in Computational Drug Design
Nazmul Islam
Lap Lambert Acad. Publ. / ¥ 5,392 ()
近日発売 予約可

Computer Programming for Chemistry

久々にケモインフォクックブックを更新した。

先日同じことをするのにrxnフォーマットを扱えるライブラリ使ってちゃちゃっとやったけど、openbabelだとどう書くのがいいのかなと。


さて、SBDDとかLBDDとかそういう仕事に関わっているヒトはプログラミングくらい出来そうなイメージがあるけど、全然そんなことなくて、ちょっとしたシェルスクリプトも書けないヒトが多いです。基本アプリケーションの操作という作業がメインなので、プログラミング出来なくてもなんとかなるという。あとPipelinePilotみたいな便利ツールもあるしね。

という状況なので、仕事に関わりながらプログラミングを覚えていくというキャリアパスのようなもの存在しないと考えてよいです。それは単純に独学と自己啓発のエリアですな。

しかし、アプリケーションのみでは出来ない作業っていうのは存在するわけで、そうなるとやっぱプログラミングしなきゃいかんわけですよ。そこで、プログラミングが不得手なヒトは仕事の効率がガタ落ちするわ、最悪成果が出せないとか困ることになる。

僕なんかが「誰でもできるツールで誰でも出来る仕事をしてもしょうもないでしょ?」とかいうと「そういうツールを組み合わせて独創的な成果を」と反論されるんだけど、そんなこといってもしょうがないような。

だってそれは誰でもできるツールを使うヒトがごく自然にたどり着く結論というかみんなその制限の中で工夫しているからね。

そういった制限から抜け出すにはプログラミングは一つの解なのだろうなと思う。

ProductName Design and Use of Relational Databases in Chemistry
T. J. O'donnell
Crc Pr I Llc / ¥ 11,398 ()
通常2~5週間以内に発送

ま、とはいうもののプログラミングスキルは基本的に評価されないよね。

Optimizing the "Drug-Like" Properties of Leads in Drug Discovery

この本が欲しいが、ちょっと手が出せない

リードオプティマイゼーションってのは割と抽象的な言葉だなぁと思っていて、中期的にはターゲットタンパク質のオプティマイズ+physicochemical propertyの調整ではなくて、PharmacokineticsやPharmacodynamicsの最適化を指す言葉になるんだろうなぁと思う。

創薬ターゲットとしてのタンパク質は有限だって示されたわけなので、ある程度進んだあとの薬剤としての差別化ポイントは効き目の強さというよりは、効果の持続性とか投与経路が患者にとってより良いかとかのQOLでしょうしね。

そうすると臨床系のデータを探索の戦略に組み込めないとあかんよねとか。

jchemhubよさげ

javascriptで書かれたケモインフォ用のツールキット。

レンダラももちろんついてるが、firefoxだと表示されなかったのでSafariで。

jchemhub

Wikiみたいに適当な記法を用意してsmiles貼りつければ絵描いてくれるような仕組みにもできるので、これは色々と使い道がありそう。

stochastic proximity embedding

最近ダラけたというか、やる気が下がっていたところ、stochastic proximity embeddingとつぶやかれていたので、おー面白そうと調べたらpdfがあったので読んでみた。

多次元尺度法同様に、距離情報から座標を構成する手法らしい。ペーパーだと次元縮約の方法として紹介されているけど、一回距離情報を求めてそれを任意の次元に置き直すのでまぁ似たようなものかなと。

ただ、SPEのほうはデータセットが大きくなっても計算量が爆発しないので大きいデータに使えるそうだ。

  • マップする次元を決めたら初期値としてランダムに座標を与える
  • ランダムに二点を選ぶ(xi, xj)
  • 距離が一致するように遠ければお互いを近づけ、短ければお互いを離す

  • 何回か二点を選んで更新処理を行ったらラムダの値を小さくして、上を又繰り返す

ほーこれで上手くいくんかいなと思ったのだが、プラクティカルにはよさそうかも。でも、ベストな構造におちないのと、ラムダの刻み幅は小さくしないといけないっぽいな。 ちなみに、CRANにもspeというパッケージがあったので、今回これを動かしてみた。

library(spe)
data(phone)
embed <- spe(phone, edim=2, evalstress=TRUE)
plot(embed$x)

spe_phone

距離行列から計算できると便利だけどこのパッケージは座標をインプットにしなきゃいけないのとユークリッド距離固定な感じですね。実用で使う場合は自分で実装した方が思い通りに動かせるかな。あとアルゴリズムが単純なので並行処理もできるような気がするけど。そのうちScalaで書いてみたい感じ。

Paper Based Drug Design

ドッキングシミュレーション

1271763487

というシュールなネタを思いついた。

参考