pychembldbをChEMBL19に対応させた

Schema一緒なので旧バージョンでも普通に動くんだけど、テスト周りとドキュメントを変更しました。

使い方はコレを参照して下さい。

また、製薬業界的にというか実践的なchemoinformaticsという意味でインパクトの大きいのが 特許構造のsdfがオープンデータになったではないでしょうかね。

誰でも手軽に(スクリーニングデータではなく)構造最適化プロセスを経た化合物のリストを解析できるようになるっていうのは結構アツいものがありますね。ネットワーク解析とか楽しいだろうし。

次回のMishima.syk(10/25です)ではそのあたりの話かハンズオンをやりたいなーと思っているので、興味のある方は参加して下さい☆

Cytoscapeでchemoinformatics

Chemviz2を使い始めたのでメモ

インストール

  • Cytoscapeのサイトから3.xの最新バージョンをダウンロードしてインストール
  • Apps -> App ManagerからChemviz2を探してインストール

使ってみる

pychembldbを使ってノード用の属性ファイルとnetworkファイルを作った。ネットワークはとりあえずランダムにつないでみた。

Cytoscapeを起動して"network.sif"をインポート。続いてテーブルファイルとして"node.csv"をimport プライマリキーはsmilesにする。

構造描画の設定はApps -> Chemoinformatics Tools -> SettingsでSmiles Attributesをnode.shared.nameを選んでおく。 構造描画するときには右クリックしてオプションダイアログのApps -> Cheminformatics Toolsでpaint allかselectを選ぶ。

サイズをpIC50にして、オーガニックレイアウトで表示してみた。なかなかいい感じ

chemviz2

よく分からなかったところ

  • nameとshared nameの違いがよく分からなくてドキュメントあたってみたけど結局良くわからなかった
  • Chemviz2でsmilesをshared nameにしなきゃいけなくてsifファイルをsmilesで作ったのがダサかった
  • (sifのidはchembl_idとかにしたかったけど)

コード

from pychembldb import *
from copy import copy
from random import shuffle, random
from math import log10
#Inhibition of recombinant Syk
#Bioorg. Med. Chem. Lett. (2009) 19:1944-1949
assay = chembldb.query(Assay).filter_by(chembl_id="CHEMBL1022010").one()

with open("node.csv","w") as f:
    f.write('"ID","pIC50","ALOGP","MWT","SMILES"\n')

    for act in assay.activities:
        if act.standard_relation == "=":
            f.write('"{}",{},{},{},{}\n'.format(act.compound.molecule.chembl_id,
                                            9 - log10(act.standard_value),
                                            act.compound.molecule.property.alogp, 
                                            act.compound.molecule.property.mw_freebase,
                                            act.compound.molecule.structure.canonical_smiles))

with open("network.sif", "w") as f:
    smiles_list = [ act.compound.molecule.structure.canonical_smiles for act in assay.activities if act.standard_relation == "="]
    for i in range(len(smiles_list)):
        tl = copy(smiles_list)
        tl[i:i+1] = []
        shuffle(tl)
        f.write('{} randomnetwork {}\n'.format(smiles_list[i], " ".join(tl[:int(random() * 5)])))

やごみでmishima.sykの反省会をした

反省会と次回のテーマとか諸々決めるつもりが、日程しか決まらなかったw

次回は10/25(sat)です。予定を空けておいてください。

僕はGAMESS+pygamessの説明かCytoscapeでchemoinformaticsなハンズオンをやろうかなと思っています。

イワシとエンガワ

1407320222 1407320223

イワシとイカの天ぷら。イワシの天ぷら美味かった

1407320225 1407320227

磯辺揚げとマグロ

1407320228 1407320230

色々話せて楽しい飲み会だった。皆様お疲れ様でした☆

某WSお疲れ様でした

とても勉強になって参加して良かったなと。また今後のキャリアを色々と考えないとなーという話を沢山聞いた。ホント、そろそろどうするかちゃんとしないとなぁと思った。

それから、初めてChemRubyの作者の方とお話出来て良かったです(よく考えるとあたりまえだけどbonohuさんの知り合いだったw)

前回の勉強会のアンケートも揃ったし、次回を三島バルにぶつけるなら、お盆前に反省会と次回のテーマ決めを兼ねてやごみか鈴木屋に集まらないといけませんね☆

p.s.

bgは統合TVのスライドをslideshareにアップロードしておいて下さい

あらかじめクラスタ数を決めないでクラスタリングする方法(Affinity Propagation)

K-meansのように予めクラスタ数を指定すると、「そのクラスタ数は正しいの?」っていう疑問が浮かぶと思う。

「なんらかの統計値に基づいて適切なクラスタに分割して欲しい」そんな願いを叶えるのがAffinity Propagationというクラスタリングアルゴリズムである

exemplara(セントロイドとかクラスタ中心)になるべきパラメータ(responsibility)とクラスタメンバに属しやすさ(availability)を交互に更新していって収束させる手法なので、K-meansのような初期値依存性がないらしい。

クラスタ数は類似度行列の対角要素(自分との類似度)に依存する(デフォルトはmedian)のでここを変更するとクラスタ数も変わるんだけどね。

Scikit-learnではAffinity Propagationが実装されているのでsykのケミストリースペースを作ってクラスタリングしてみた。ちなみにスライドのPCAの説明は間違っていた(pca.fit(fps).transform(fps)としなければいけなかった)。

from rdkit import Chem
from rdkit.Chem import AllChem, DataStructs
from sklearn.decomposition import PCA
from sklearn.cluster import AffinityPropagation
from ggplot import *
import numpy as np
import pandas as pd

suppl = Chem.SDMolSupplier('syk.sdf')

fps = []
for mol in suppl:
    fp = AllChem.GetMorganFingerprintAsBitVect(mol, 2)
    arr = np.zeros((1,))
    DataStructs.ConvertToNumpyArray(fp, arr)
    fps.append(arr)

print len(fps)
pca = PCA(n_components=2)
x = pca.fit(fps).transform(fps)
af = AffinityPropagation().fit(x)

d = pd.DataFrame(x)
d.columns = ["PCA1", "PCA2"]
d["labels"] = pd.Series(af.labels_)
g = ggplot(aes(x="PCA1", y="PCA2", color="labels"), data=d) + geom_point() + xlab("PCA1") + ylab("PCA2")
ggsave("ap.png", g)

1404818907

Mishima.syk #3やりました

発表者の方、参加者の方お疲れ様でした。

RedmineのLTのは生々しいのでpandasの話だけslideshareにあげてあります。

今回新しく試したことはQuestantを使ったアンケートを用意したことかな。あと、一次会の予約が通ってなくて(あの店はあるあるなので気にしないw)ちょっと狭い部屋になったけど、懇親の密度があがって結果オーライですね(二次会の分くらいまで飲んでたしw)

次回もよろしくお願いします☆

三島バルあたりにぶつけられればと考えていますw

ProductName Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理
Wes McKinney
オライリージャパン / 3780円 ( 2013-12-26 )


RDKitでFatal Python error: PyThreadState_Get: no current thread

homebrewのRDKit入れたらこんなエラーに遭遇

$ python mkdesc.py 
Fatal Python error: PyThreadState_Get: no current thread
Abort trap: 6

調べたらboost関連らしい

brew rm boost
brew install --with-icu --build-from-source boost
brew uninstall rdkit
brew install rdkit

で動くようになったけど brew installで再度boostのインストールを始めたので2番目のboostのインストールは必要ないかもしれない

土曜日はpython-ggplotの話もします

ChEMBLからデータを取ってきて、活性が強いほど色が濃くなってドットのサイズも大きくなるようにしてみた。python-ggplotを使うと数行で描くことができるので調子いいですみたいな話をします。

あとはscikit-learnとrdkitで予測モデルを作ったりクラスタリングをしたりといった話もできればなーと考えているので、 興味があれば参加して下さい。

import pandas as pd
from ggplot import *
import numpy as np

d = pd.read_csv("syk.csv")
d["pIC50"] = 9 - np.log10(d["IC50"])
print d

p = ggplot(aes(x='MWT', y='ALOGP', color="pIC50", size="pIC50"), data=d) + geom_point()
#print p
ggsave("2dplot.png", p)

1404120520

今週末はMishima.sykです

ただいま、絶賛スライド作成中です。

なんというかscikit-learnのインストールではまっていたw。というより色々やっているうちにpipが壊れてわけがわからんようになったのでsofを見ながら治した。治療w

brew install python --build-from-source
sudo pip install numpy --upgrade
sudo pip install matplotlib --upgrade
sudo pip install scikit-learn --upgrade
sudo pip install ggplot --upgrade
sudo pip install psycopg2 --upgrade
sudo pip install pychembldb --upgrade

/usr/bin/pythonを使うならScipy Superpackでいいんだけどね。homebrewのpythonで使うならこっちを見ながら。

ちなみに

brew install gfortran

のところは

brew install gcc

でいいです(今はgfortranはgccに含まれているので)

RDKitのアップグレード

久々にRDKitをアップグレードしようかなと、

brew upgrade rdkit

したら

Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master

というエラーが出たのでここ見て対処。

尚、RDKit次回の勉強会で@iwatobipenに紹介してもらえるので、興味があれば参加すればいいと思います。(というより、こういう場でないとRDKitの話は聞けないのでは…)

僕はpythonでinformaticsとか機械学習するためのライブラリの話をします。そして@y_samaがpythonを楽しく学ぶためのサイトを紹介するので、みんなpythonistaまっしぐらですねw

静岡中部はGoにちょっと食われつつあるけど、東部のあたりをPythonで染めてバランスをとればいいですねw (最近Haskell書いてない…)

  • 13:00 - 13:30 準備と自己紹介など
  • 13:30 - 13:45 DBCLSの紹介 @bonohu
  • 13:45 - 14:00 統合TV統計とRedmine導入記 @h_ono
  • 14:00 - 14:05 統合TVのなかで創薬に役立つ番組の紹介 @bg7860
  • 14:05 - 14:10 RedMine (タスクかくにん!よかった♡(仮)) @No_6
  • 14:10 - 14:15 Redmineの話2 @kzfmix
  • 14:15 -14:30 休憩
  • 14:30 - 14:45 メドケム的な話 @hironagasue
  • 14:45-15:00 RDKitの話 @iwatobipen
  • 15:00 - 15:15 休憩
  • 15:15 - 15:45 pandas, ggplot, scikit-learnを熱く語る的な(仮) @kzfmix
  • 15:45 - 16:15 check.io ハンズオン @y_sama
  • 16:15 - 16:45 ハンズオン続き(または予備)
  • 16:45 - 17:00 後片付け->懇親会へ移動

最近静岡の勉強会に行けてないので、そろそろ参加したいところ…