pychembldbでつくるChEMBLウェブサービス

Flaskpychembldbを使えばChEMBLウェブサービスみたいなのは簡単に作れるよと、朝の30分くらいを使ってちょっとやってみた。

pychembldbはSQLAlchemyのラッパーなので、Flaskのほうではルーティングを設定して、ハンドラ関数用意すればいいだけ。特にFlaskはJSON化する関数が用意されているのでJSONで返すのはラク。

@app.route("/chemblws/compounds/<chembl_id>")
def compound_by_ChEMBLID(chembl_id):
    compound = chembldb.query(Molecule).filter_by(chembl_id=chembl_id).one()
    result = {...}
    return jsonify(result)

という感じでDictionaryを用意してxmlかjsonに変換して返せばいいので、とりあえずChEMBLIDを与えると対応する化合物情報を返すAPIを実装してExamplesに用意してみた。

自前でサービスを用意することのメリットは

  • 外部に情報が流れない
  • レスポンスが速い
  • 沢山投げても怒られない

ということの他に

  • 自分たちの用途に合わせて 拡張できる
  • データベースのスキーマをきちんと理解できる

という部分もあるかなと思います。例えばChEMBLウェブサービスにはジャーナルのdoiから構造リストを返すというAPIは存在しないけど、project毎にジャーナルをまとめていたりするときにはそういうAPIが用意されていると便利かもしれませんよね?

最初、ウェブサービスが返す情報は固定なのかなと思い、決め打ちで用意したのだけど、CHEMBL1CHEMBL2で返ってくるjsonのキーが違うので、valueが存在するのものをすべて返しているのかな。

もう少しちゃんと出来たらきちんとテストを書こう。

CHEMBL1

{
    "compound": {
        "acdLogd": 7.67, 
        "acdLogp": 7.67, 
        "alogp": 3.63, 
        "chemblId": "CHEMBL1", 
        "knownDrug": "No", 
        "medChemFriendly": "Yes", 
        "molecularFormula": "C32H32O8", 
        "molecularWeight": 544.59, 
        "numRo5Violations": 1, 
        "passesRuleOfThree": "No", 
        "rotatableBonds": 2, 
        "smiles": "COc1ccc2[C@@H]3[C@H](COc2c1)C(C)(C)OC4=C3C(=O)C(=O)C5=C4OC(C)(C)[C@@H]6COc7cc(OC)ccc7[C@H]56", 
        "stdInChiKey": "GHBOEFUAGSHXPO-XZOTUCIWSA-N"
    }
}

CHEMBL2

{
    "compound": {
        "acdBasicPka": 6.52, 
        "acdLogd": 2.09, 
        "acdLogp": 2.14, 
        "alogp": 2.11, 
        "chemblId": "CHEMBL2", 
        "knownDrug": "Yes", 
        "medChemFriendly": "Yes", 
        "molecularFormula": "C19H21N5O4", 
        "molecularWeight": 383.4, 
        "numRo5Violations": 0, 
        "passesRuleOfThree": "No", 
        "preferredCompoundName": "PRAZOSIN", 
        "rotatableBonds": 4, 
        "smiles": "COc1cc2nc(nc(N)c2cc1OC)N3CCN(CC3)C(=O)c4occc4", 
        "species": "NEUTRAL", 
        "stdInChiKey": "IENZQIKPVFGBNW-UHFFFAOYSA-N", 
        "synonyms": "CP-12299,Minipress,Minizide,PRAZOSIN,Prazosin"
    }
}

今週末は第3回入門機械学習読書会です

優先トレイと回帰分析の章をやります。

懇親会はどこにするかは決めていないですが、それほど人が多くなければPhotoに寄って、ソビって帰るというプランが(自分のなかで)固まりつつある。

ProductName 入門 機械学習
Drew Conway
オライリージャパン / 3360円 ( 2012-12-22 )


ちなみに、scikit-learnでも回帰分析してみました。

pychembldbでchembl_16をサポートしたのでchembl-apiクローンでもつくろうかなと

スキーマがほとんど変わっていないのでテストをちょいちょいいじったくらいですが。

で、この前のユーザー会で「化合物情報を外に出すのは怖いのでchembl-apiをイントラでサポート出来ないか?」っていう質問がでてて、「pychembldb使えば楽勝ですぞ」と。それを実証するためにexample書こうかなと。

あとは、ウェブサービスの作り方わからんわーっていう話もちょくちょくでるので、Flask使えば楽勝ですぞというかそんな感じのハンズオンをしつつ、danchuで高評価を得ている沼津の地ビールをグビグビいこうかとか三島のうなぎでもいっとこかとかそんな感じの集まりをやりたいなという感じの機運が高まっているので、興味があればtwitterでもfacebookでも口頭でもいいのでレスポンスを貰えればと。

数が集まりそうなら調整します。ネタ的には

  • Flaskとpychmebldbでつくるイントラchembl-api
  • pythonのクローラーでWIPOの化合物特許を自動で集めてデータベース管理

あたりが初心者向けかつ半日でできそうなので良いかもしれません。ハンズオンはおまけみたいなものでメインはビールです。

最近飲んだ日本酒とか(130615)

臥龍梅は安定の美味さ。

1371247621

明鏡止水。夏用の酒というものはすっきり感とかキレを重視するのかな?

1371247623

ついでに今年の梅酒用の焼酎。黒糖x2,泡盛x1

1371247624

紀土も夏酒が出ていたので買ってみたが、スッキリしてる。その分含みがなくなるので赤いラベルのほうが個人的には好きかも。

1371247626

あまりスッキリしていると燗つけたくなるね。

吉原祇園祭

先週の吉原祇園祭。ビール飲んで帰ってきただけともいう、出て行く時間が早すぎた。

あとビールしか置いてないのはどういうことなのか?日本の祭りなんだから日本酒があったほうがいいんじゃないか?(なくて困った)

1371247075

相変わらずのお絵かきせんべい。娘はチマチマお金を使うのが好き。

1371247076

一方で息子はいきなり小遣いの大半をお面に全力投球してしまい、買えるものがなくなって娘のかき氷を恵んでもらっていた。

1371247078

お金をどこにまわすか

404 not foundの書評が面白かったので買ったのだが、内容がなかなかアタマに入ってこなくて、ダラダラ読んでた。やっと読み終えた。

お金をどこにまわすかはあきらかなんだけど、それやっちゃうと票集め的にはいかがなものかということになっちゃうのでなかなか難しいのよねーという結論でOKか。

ProductName 日本の景気は賃金が決める (講談社現代新書)
吉本 佳生
講談社 / 840円 ( 2013-04-18 )


  • 制度的に「最低賃金の引き上げ」や「非正規雇用の正規化」を企業に押し付けると、雇用悪化等の弊害がある
  • もともとは各個人の問題である失業を、国全体の経済問題としてとらえることは、簡単ではない。気の毒な失業者と自業自得を区別することは難しいから
  • 不況の長期化は貯蓄のパラドクスによって起きる
  • 日本では、勤続年数が15-19年になると最初の4年よりも44.5%高い賃金がもらえる

最後の話は、本当に理不尽なシステムだなぁと思う。このようなシステムがいつまで耐えられるのか興味はあるが。

今思うと「属人的な手当を廃止して成果主義に以降」ってのは子育ての終わって逃げ切るような世代の給料を下げずに若い世代からやんわり給料をカットするいい口実だったのかなぁと思わないでもない。

高年齢者の雇用を増やすということは低年齢者の雇用の機会を減らすということだと思うんだけど

高年齢者の雇用を確保するなら、低年齢者にはBIっぽい制度でも導入しないといけないんじゃないかなぁなんて思うんだけど、どうなんだろうね。それから先日話題にあがった定年引き上げはほぼ確実だろうからなぁ。今の政策は終年雇用的なサラリーマンを救済している感しかないので、自分たちの時にはどうなるのだろうか?と普通に気になる。

ProductName 65歳全員雇用に対応する人事・賃金・考課の知識と実務
小柳 勝二郎
労働調査会 / 2100円 ( 2013-05-13 )


日本の男性高齢者の就業率は非常に高い

日本企業の仕事の仕方がラクなのか、日本は働かないと食べていかれないのか、社会保障に問題があるのか、趣味がないのか、地域との関連が薄いのか

NPOとかで働けばいいのに。

人事制度というものは正解がないよねーと思いながら、人事制度の試行錯誤の歴史物語を読んでいた。

まぁ今のとこ僕の考えている正解は「正解の存在しないような評価制度の枠組みをうまくかわす」ということかなぁ。

DMTAがいいのかそれともTADMがいいのか?

PDCAに対応するものとして創薬の文脈の中ではDMTA(Design-Make-Test-Analysis)が語られるわけだが、昨日ケミストの方にTADMでサイクルを回すのはどう思うか?と聞かれ、直感的に「それは逃げなんじゃないかなぁ、結局ランダムスクリーニングを肯定することになるじゃん」と否定的に答えてしまったのだけど、後から考えてみると根拠があまりないわなと、もう少し深く考えてみた。

DMTA(PDCA)は仮説駆動サイクルですね、これはまぁ自明。じゃぁ、CAPD(TADM)っていうのはなんなんだ?って考えてみるにこれはテスト駆動サイクルかなと思っていたのだけど、CAPDサイクルでググッてみるに、どちらかと言うと探索駆動サイクルの意味合いが強そうだ。昨日はすっかり忘れていたが、これはちょっと前に考えたことがあった

創薬系においては、そもそもテストにあたるもの(アッセイ系)を構築するのに非常にコストがかかる。同様にDoに対応するMakeにも人件費が大いにかかるため、ランダムな合成というのはリスキーだ。さらに探索という側面がある。そのため、仮説なしに合成する(これをケミストは情報取りのための合成としばしば呼ぶわけだが)、ランダムな合成をして有意義な情報が取れたことが経験上ほとんどない。

という事情もあって、昨日の質問に(半ば短絡的に)否定的な返答をしたのだと思う。

でも実際にはlead optimizationはまず間違いなくDMTAをまわすべきだけど、lead generation (finding)にはTADMサイクルをまわすべきなのだと思う。そのためには探索手法(なにを探索したいのかそのためにはどういう測定系が必要か?さらにはどういう化合物セットを揃える必要があるか?)に精通した人間(またはチーム)が必要なんだろうなぁと。残念なことに僕はそういう探索特化型のメディシナルケミストと一緒に仕事をしたことがないという背景が否定的な結論を導いたのかなと思っている。

そういうヒトと一緒に仕事を出来ればハッピーだろうなぁと思いますね。

というわけで色々考えていたら、DMTAサイクルをまわす能力よりもTADMをまわす能力のほうがずっとレアかなと。昨日の主張はちょっと短絡的だったなと反省した。

長距離索敵陣形

ProductName 進撃の巨人(5) (講談社コミックス)
諫山 創
講談社 / 450円 ( 2011-08-09 )


MMPで発表してみたら結構レスポンスが多くて楽しかった

先週はgWT絡みで、今週はMMP絡みの発表をしてきた。それぞれ独立している仕事ではあるのだけど、プロジェクトの大いなる流れというかストリームというかそんなやつをきちんとコントロールしたいというのがそもそもの動機だったりするのでそういう意味ではつながっていると思います。

あと、いくつか質問をうけたので答えられるものはここに記しておきます。

sdfからgspのコンバートってどうすんの?

openbabelのPythonラッパーを入れていればここに書いてるスクリプトで動くと思います。結合情報をアトム情報を吐き出せばいいだけなので他のツールでも同様にやればいいはずです。速度が気になる場合はsdfパーサーを書かなければいけないので面倒かも。

個人的にはpygwtというsdf2gsp gsp2sdfを後ろで面倒見てくれるモジュールを作りかけなので、出来たらgithubにあげておくかもしれません。

pychembldb

chembldbのpythonラッパーです。pypiにもあげてあるのでeasy_installとかpipでインストール出来ます。16には対応していませんが、そのうち対応します。

イントラでrestfulなウェブサービスを作る場合(といってもGETに対応させるだけでしょうが)にはFlaskを使うのがお手軽かなと思います。chemblのAPIに対応させるのはそんなに難しくないですね。

そういえば、創薬系の中でPythonでウェブサービスつくるハンズオンでもやりつつ沼津のタップルームで地ビールがぶ飲みしたいなとかそういう話をしていたことを思いだした。

Shizuoka.py #2をやります

7/6@静岡です。

snake

前半はフロントエンドな話、後半はサーバーサイド(サーバー管理的な)の話になっています。

前半は、みんな大好きパターン認識から、Pythonで書いてjavascriptにコンパイルするっていう話と、Pythonでスマホアプリを作っていくという夢が広がる系の話ですね。

後半はサーバーの管理を楽にする構成管理ツールの使い方という実務的な内容になる(のかな?)個人的にansible,fabric(+cuisine), envassertの使い分けをいまいち理解していないので楽しみなトコロ。

タイムテーブルに若干余裕があるので、入門的な話を入れたいのだけど、もし聞きたい話があればATNDのコメント欄にでも書いておいて貰えれば。もちろん「発表したい」も歓迎です。