CBI2019に参加しました

参加された皆様お疲れさまでした。去年よりも参加者が100人以上増えたそうで、ポスターも展示できるほぼギリギリだったようです。そのせいで去年あった電源付きテーブルが撤去されてバッテリー難民がちらほら出たようですがw

私はツイッターでしかやり取りしたことのない人の何人かにお会いできて満足しました。あとは色々とディスカッションしていただいて大変刺激をうけましたので、酒ばっかり飲んでないでもっと色々頑張らなあかんなと思いました。

特にバイオインフォ頑張らねば。来年はバイオインフォのチームからもポスターくらい出せるようにしたいですね(煽っとく)。

個人的には強烈なアハ体験があったので非常に有意義でした。あとポケモン図鑑も一つ埋まって大変よかった。

アブダクション

会場ついて早々に、「このまえ薦めてた本めっちゃ良かったでー」って言われたので薦めてよかったです。名著なのでサイエンティストの皆さんは購入して読みましょう。

py4chemoinformatics

これもマテリアルとしては良いと褒められて嬉しかったです。もともと医学系の出版社に持ち込んでみたけど、販売網の違いで採用されなかったものの、まぁ書いとくかって感じで書きあげたものなので皆さんのお役に経ってよかったです。 あと、この界隈では著名な@yamasaKit_の丁寧な修正が入っているのでクオリティも担保されていると思います。

そろそろ章の追加をしようかなと思っているので、みなさんもケモインフォに対する熱い思いをぶつけてみたいなら新しく章を作ってPRお願いします。

Psikit

Psikitはなかなかイケてると思うし、面白そうという意見を頂いたのだけど、これといった成果が出ていなくてもうちょっとちゃんとやらないといけないなーと思っています。自分では何をやれば成果が出るかはわかっているんだけど、量子化学に寄りすぎていて、具体的な事例を見せないとイメージできないだろうなと。

12月の構造活性シンポジウムでこのあたりの話をしようと思っています。

Kinme

創薬のひろばでKnimeを広めたいって書いたと思うんだけど、実際にシェアして再利用する仕組みをインハウスに作っています。でこの前のMishima.sykでそのあたりの話をしたら、そういうの欲しいって言われたので再実装したものを公開しました。

ちなみにkinmeはknimeのアナグラムで@bonohu考案で、金目鯛は@t_kahiに釣ってもらいました。

悶える?モダリティ

ちょっと前までは低分子の分子設計ばっかりやっていて、その当時は出口戦略重要だよねそのための差別化はやっぱDMPKだよなってことで、PBPKとかPK-PDとかが重要になるんやろねと思っていた。

最近は創薬モダリティの流れで色々な分子設計やり始めていて、よい設計のためには分子生物学理解してないと駄目だよなぁと思うようになってきてる。

モダリティの四面体によると、創薬においては

ProductName 料理の四面体 (中公文庫)
玉村豊男
中央公論新社 / ?円 ( 2017-06-30 )


  • 干渉剤の大きさ(いわゆるモダリティ)
  • 干渉対象 (MoA)
  • 測定系

の組み合わせが重要で、我々が分子設計するためにはモダリティは基本的になんでも扱えるけど、MoAを意識したデザインをするためには分子生物学を理解していないと、よいデザインはできないように思う。特にプロテアソーム系とかエピジェネまわりに触ったりするやつとかそれなりに確度高く設計できると嬉しいよなーとか。

というわけで細胞の分子生物学でも読み直すかという気分になっている。

ProductName 細胞の分子生物学 第6版
ALBERTS
ニュートンプレス / 24530円 ( 2017-09-15 )


新しいモダリティいじるの楽しいけど、それぞれ考え方変えていかないといけないのが手探りですよね

Does Hype Hurt Science Community or Pharma?

最初は長文のエントリを書いてみたのだけど生々しくなりすぎたので全部消し、結局2時間ぐらいを無駄した。

  • 会社: 東京皇国
  • hype: 焔ビト
  • データサイエンティスト: 消防隊
  • hypeの訂正: 鎮魂
  • 転職: ラートム

ちなみにこういう実装できそうにない抽象的なポンチ絵を書き始めると人々は焔ビト化するという設定になってる。

1570350993

炎ハ魂の息吹……黒煙ハ魂ノ解放……灰ハ灰トシテ……其ノ魂ヨ……炎炎ノ炎ニ帰セ ラートム

Mishima.syk #14やりました

参加者のみなさまお疲れさまでした。

一次会はリパブリューでクラフトビール飲みまくり。ついでに創薬ちゃんもいた。

1569135040 1569135043

二次会はうさぎの木でワインと肉

1569135048 1569135046

私の発表はKNIMEの学習環境を構築するっていう話とPyConMYに行ってきたという話でした。PyConは楽しいのでみなさんも参加されるといいと思います。

それから阪医python会の人達にCWLのステッカー配ってきました。IIBMP2019でもう少しもらっておけばよかったかなーと。

今回はKNIMEやCWL、airflowといったワークフロー関連の話が多かったので、KNIMEユーザーの方々の参加が多かったかなと思います。

私のKNIME社内コミュニティーをどう醸成していくかっっていう演題の質疑で、「社外コミュニティーどうするつもりなの?」っていう質問がきて、「うちでイニシアチブとれたらいいんじゃないかな?」って返しといたけど、懇親会で改めてKNIME日本ユーザーのコミュニティも欲しいよねーという話題が出ていたのでそのうちできるんじゃないのかなと思います。GitHubとGitHub Pages使えばサイトなんて簡単に作れるしね。

KNIMEはオープンソースだからそういうコミュニティがまずあって、そこにインフォコムとかのKNIME使って商売している会社がなんらかのサポートするっていうスタイルのほうが健全だし、ユーザーももっと増える気がします。

Greatな岡山の学会に行ってGreatな焼き鳥を味わった

great岡山の学会に参加してきた。

夜は大井町の鳥たかというお店に通った。うますぎ天国。

1568212594 1568212601

晩杯屋はうるさくなければいいけど、酔っぱらい学生とか来たら出る感じ。

1568212599

お昼はラーメン。

1568212597

CWLに入信したの図

1568212604

たまごかけ大学行くのはYAPC以来やなぁとか言っていたけどそのあとIBISで参加していたことを後に思い出した。

ま、どうでもいい。

ワークフロー型プログラミングツールで能力ブーストは良いのか悪いのか?

プログラミングまたは機械学習の高速道路は学習の高速道路に関しての話ですが、ライブラリとかツールキットでブースト問題ってのもあります。

大体どの言語でもライブラリが充実していて、エコシステムを形成していて生産性が上がるんですが行き過ぎたプログラミング環境はどうなんかなーと思っていました。

つまりノンプログラマーのためのプログラミング環境(Pipeline Pilot/KNIME)とかRobot Process Automation(RPA)ってやつです。

ある程度の処理がコンポーネントという単位にまとめられていて、ユーザーはブロックを組み合わせる感覚でプログラミングができて、しかも処理が視覚的にわかりやすいというメリットがあります。さらに学習の初期コストが低いのでプログラミングの素養がなくてもすぐにある程度のことはできるようになります。

が、ちょっと複雑なことをしようとするととたんに複雑怪奇なワークフローになるのと、やりたいことをするためのコンポーネントがないと詰みます。

  • 前者は 結局コード書いてないだけでプログラミングはしているので、解決パターンを知らないと回り道することになる。デザインパターンを知らないプログラマーが陥るのと似た感じ
  • 後者はTensorflowのチュートリアル楽勝だけど実際自分の問題解こうとするとまったくわからんってことになるのと一緒

というわけで、ワークフローツールはどうなんかなーって思っていたのだけど、逆にノンプログラマーが利用して効率的に仕事をするのにはとてもよい選択肢だなと改めて思いました。

じゃぁなんワークフローツールをあんなに嫌っていたんだ?

よくよく考えてたら、ツールに技術がロックされることに嫌悪感を抱いていたのでした。Pipeline Pilot年間使用料がそれなりに大きいのと、すごく使いやすくてこれでしか仕事ができないケモインフォマティストが増えてしまったという製薬業界の語られない闇があります。維持費だけでも馬鹿にならないし、転職先がPP使ってないとキャリアが生きないというねw それってキャリアブルスキルなのか?っていう。一方でPPができたから良いとこに転職できたという事例もないことはないので、それがいいことなのか悪いかは一概にいえないけどね。

で、RPAツールはまさにこのサービスロックを狙っている気がします。そもそもクラス3ちらみせしてRPAのクラス1のツールに年間何百万も払わせるなんてあれなんじゃないのかな。

話がそれたけど、ノンプラグラマーなのにバイオインフォにアサインされた人間のみで構成されているうちのチームはとりあえずKNIMEブーストかけておけばいいだろうっってことでそのための学習道路の整備を急遽していますが、これはこれで色々楽しいですね。既存のKNIMEノード組み合わせてもできない処理は僕がNode作ってやればいいだけだからね。

尚、昨日始めてKNIMEデビューしました。どんだけワークフローツール嫌っていたんだ?って話w

Finding activity cliffs in ChEMBL

Activity cliffs are pairs of structurally similar compounds with large differences in activity, like inhibitory potency. I searched them in ChEMBL database with pychembldb.

I haven't maintained it for a long time but It works well even in Python3.7 :-)

My strategy for finding them is filtering assay data by whether it has confidence_score 9 (Direct single protein target assigned) and has enough data points(>=10 and <100) and then generating SMILES and Activity file from each of assay data for processing Matched Molecular Pairs Analysis (MMPs) by mmpdb

from pychembldb import *

for assay in chembldb.query(Assay).filter(Assay.confidence_score > 8).all():
    smiles_file = "{}.smi".format(assay.chembl_id)
    act_file = "{}.tsv".format(assay.chembl_id)
    act_list = [a for a in assay.activities if a.standard_value is not None and  and a.standard_units == "nM"]
    if len(act_list) > 9 and len(act_list) < 100::
        with open(smiles_file, "w") as sf:
            with open(act_file, "w") as af:
                af.write("ID\tVal\n")
                for activity in assay.activities:
                    if activity.standard_value is not None and \
                    activity.compound.molecule.structure is not None:
                        sf.write("{} {}\n".format(
                            activity.compound.molecule.structure.canonical_smiles,
                            activity.compound.molecule.chembl_id))
                        af.write("{}\t{}\n".format(
                            activity.compound.molecule.chembl_id,
                            activity.standard_value
                        ))

It took a few hours, but finally, I got around 55000 assay data.

I used mmpdb for generating MMP, and prepared a script for batch processing.

from glob import glob
import subprocess

def make_mmpdb(chembl_id):
    smiles_file = "{}.smi".format(chembl_id)
    act_file = "{}.tsv".format(chembl_id)
    fragments_file = "{}.fragments".format(chembl_id)
    sqlite_file = "{}.mmpdb".format(chembl_id)

    subprocess.run([
        "mmpdb",
        "fragment",
        smiles_file,
        "-o",
        fragments_file])

    subprocess.run([
        "mmpdb",
        "index",
        fragments_file,
        "-o",
        sqlite_file,
        "--properties",
        act_file])

if __name__ == "__main__":
    for fn in glob("*.smi"):
        chembl_id = fn.split(".")[0]
        make_mmpdb(chembl_id)

Finally, I extracted the pairs whose activity difference is more than 2 by pIC50.

import os
from sqlalchemy import *
from sqlalchemy.orm import create_session, relationship
from sqlalchemy.ext.declarative import declarative_base
from math import log10
from glob import glob

def search_ac(mmpdb_name):
    uri = 'sqlite:///{}'.format(mmpdb_name)

    Base = declarative_base()
    engine = create_engine(uri)
    metadata = MetaData(bind=engine)

    class Dataset(Base):
        __table__ = Table('dataset', metadata, autoload=True)

    class Compound(Base):
        __table__ = Table('compound', metadata, autoload=True)

    class PropertyName(Base):
        __table__ = Table('property_name', metadata, autoload=True)

    class CompoundProperty(Base):
        __table__ = Table('compound_property', metadata, autoload=True)
        compound = relationship('Compound', backref='compound_properties')
        property_name = relationship('PropertyName', backref='compound_properties')

    class RuleEnvironment(Base):
        __table__ = Table('rule_environment', metadata, autoload=True)

    class EnvironmentFingerprint(Base):
        __table__ = Table('environment_fingerprint', metadata, autoload=True)

    class ConstantSmiles(Base):
        __table__ = Table('constant_smiles', metadata, autoload=True)

    class Pair(Base):
        __table__ = Table('pair', metadata, autoload=True)
        constant_smiles = relationship('ConstantSmiles', backref='pair')
        rule_environment = relationship('RuleEnvironment', backref='pair')

    class RuleEnvironmentStatics(Base):
        __table__ = Table('rule_environment_statistics', metadata, autoload=True)

    sa = create_session(bind=engine)
    pIC50_dict = {}
    public_id = {}

    for cp in sa.query(CompoundProperty).filter_by(property_name_id=0).all():
        #print(cp.value)
        pIC50_dict[cp.compound_id] = 9.0 - log10(cp.value)
        public_id[cp.compound_id] = cp.compound.public_id

    pairs = []
    for pair in sa.query(Pair).all():
        if (pair.compound1_id, pair.compound2_id) not in pairs:
            pairs.append((pair.compound1_id, pair.compound2_id))
            diff = abs(pIC50_dict[pair.compound1_id] - pIC50_dict[pair.compound2_id])
            if diff >= 2.0:
                print("{}: ({}, {}) {}".format(
                    mmpdb_name.split(".")[0],
                    public_id[pair.compound1_id],
                    public_id[pair.compound2_id],
                    diff))

if __name__ == "__main__":
    for fn in glob("*.mmpdb"):
        search_ac(fn)

After this calculation I realized that I needed to eliminate cell based assays that caused AC noises.

QSP

医薬品研究開発における Modeling and Simulation(M & S)手法の紹介という大変に面白い総説を教えてもらって読んでいる。

これは、事前にTrkAがpainのターゲットであることを知っているからこういう結論に出来たのか、そういう事前知識なしに自然に導かれたのか興味あるところではある。モデルからターゲット候補が出てくるなんて素敵。

QSP モデルによって,今までのモデル解析ではできなかった予測を行った事例を以下に 2 例紹介する.1 つ目は,MID3 白書に取り上げられている神経成長因子(NGF)パスウェイに対する QSP 解析 により,疼痛治療の新規の創薬ターゲットを検討した事例(Example 3)である.この事例では,すで に報告されていた NGF パスウェイを ODE で記述される数理モデル(Model 1)に変換し,さらにその パスウェイモデルを関連因子の神経細胞内外での挙動を反映させたモデルに連結して生理学的に拡張し たモデル(Model 2)を作成して NGF パスウェイの下流での創薬ターゲット候補の探索を行っている. 効果測定の指標として NGF 刺激の結果として観察され,疼痛発現につながると考えられる Diphosphorylated extracellular signal-regulated kinase(dppERK)の蓄積量を用い,モデルの妥当性検討は すでに報告されている NGF 阻害抗体で得られている結果と比較することにより行った.こうして構築 されたモデル内に含まれる因子を,in silico で仮想的に様々な阻害強度で阻害する感度分析により, Tropomyosin receptor kinase A(TrkA)が薬物治療のターゲット候補となる可能性が予測された.

尚、MoAと書くと現状はBabymetalがおすすめされるようです。

ProductName 「LEGEND - S - BAPTISM XX - 」 (LIVE AT HIROSHIMA GREEN ARENA) [Blu-ray]

トイズファクトリー / 6471円 ( 2018-08-01 )


PK-SimってOSSになったの?

Mentality rather than modality

最近、バイオインフォマティクスのチームに兼務になりました。このバイオインフォマティクスチームに求められてることが、いわゆる普通のターゲットファインディング的なバイオインフォだけじゃなくてPKPD(今だとQSPって言うの?)でのインフォマティクス側からの貢献を求められたりするので10連休は色々勉強するよいチャンスだったりします。しかし、PKモデリングは基本的なところはわかるけど、PDは全然だから着いていくのつらいっす。

それから、組織内でモダリティのブームが起きているみたいなので、そっちのほうも色々キャッチアップしなきゃいけない。

で、自分の解釈でいうところのモダリティというのは、「従来のkey&lock型の低分子創薬を超えて、MOAをうまく利用して生体に干渉するような創薬をやりましょう」ってことだと思うんですよね。つまりライフハック。

そういう意味ではこれからの分子設計は低分子だけじゃなく、中分子や核酸やdegradationでも貢献する必要があるだろうし、創薬ターゲットのMOAに応じて柔軟に対応出来るような組織になっているべきでしょうね。と考えるとMOAを理解できることが必須になるんじゃないですかね。

というわけで、分子生物学も少し復習しないとなぁという気分になったのでそれっぽい本を読んでいました。遺伝子ドライブ面白いですね。

ProductName ゲノム編集の基本原理と応用: ZFN,TALEN,CRISPR-Cas9
山本 卓
裳華房 / 2808円 ( 2018-06-06 )


コラムにCRISPRdirectが紹介されていて、「あー作者の人知っとるわ」ってなった。

創薬プロジェクトのITSが欲しい

創薬プロジェクト用のIssue Tracking System(ITS)を探しているのだけど良いものがみつからない。

で、ないのなら作ってしまえということでとりあえずE-R図でも書こうかとnode.jsインストールしてwwwsqldesignerでやってみた

ITS

テーブルスキーマ出来たんであとはFlaskでサクサクつくればよろしい。