28 01 2013 chemoinformatics Python Tweet
ちょっと欲しくなったので探してみたらpychemblを見つけた。
しかしメンテされてないようなのでフォークして更新しようかなと思い、ソースを眺めたら面倒くさそうな感じだったので、昨日一日使って新しいのを作ってみた。
declarativeでautoloadしているのでスキーマが変わってもメンテしやすいかなと思う。コーディングのほとんどの時間をテスト書くのに使ったので結構疲れた。それから、メタプログラミングはどうかなと思ったのでdbのuriは環境変数CHEMBL_URIで設定するようにしておいた(デフォルトはchemblのmysqlのインストールそのまま)。
chembl = ChEMBLDB(uri)とかやりたい場合にはFlask-SQLAlchemyのソースが参考になると思う。
ターゲットから活性値とInChiKeyをフェッチする
ターゲット名に含まれるアッセイ系から活性と対応する化合物の構造をとってくる。
from pychembldb import * for target in chembldb.query(Target).filter_by(pref_name="Tyrosine-protein kinase ABL"): for assay in target.assays: for activity in assay.activities: print activity.published_value, activity.molecule.structure.standard_inchi_key
ジャーナルから活性値とInChiKeyをフェッチする
ジャーナル(doi)に含まれるアッセイ系から活性と対応する化合物の構造をとってくる。
from pychembldb import * for journal in chembldb.query(Doc).filter_by(doi="10.1016/S0960-894X(01)80693-4"): for assay in journal.assays: for activity in assay.activities: print activity.published_value, activity.molecule.structure.standard_inchi_key
その他
ChEMBLのスキーマみれば大体わかるだろうし、その通りに動くでしょう。このスライドも参考になると思う。
余談ですが、Rubyだとbio-chemblがあるそうです。
今後やる予定のこと
- とりあえずテーブル名をそのままクラス名にしたせいでlookupとかDictionaryとかついててダサいのでそこら辺の名前は変える(なのでクラス名とかメソッド名はまだ変わります)
- relationが不完全なので追加していく
- one-to-oneみたいなのもone-to-manyとしてrelation張っているせいでリストになっている部分は修正する(上だとmolecule.structures[0]とかださい)
- pypiに登録する(pipでインストール出来ないと面倒くさい)
130128 追記
- one-to-oneにしたのでmolecules[0]がmolecule
- Dictionaryを除いたのでTarget,Moleculeになった