非プログラマーのためのインフォマティクス入門。(仮)

非プログラマーがインフォマティクスについて勉強したことを記録します。主にKNIMEというソフトを使用しています。

KNIMEを使ってChEMBLから情報をとってくるンゴ

なんだか、最近巷ではなんJ民が溢れているそうですね!

headlines.yahoo.co.jp

おさぼりおじさんが、日中よく読んでいる*1というyahooニュースで取り上げられているくらいなので、間違い無いですね。驚きですね。

 

 

さて、毒吐きから始めてしまいましたが、今回はKNIMEを使ってChEMBLから情報を取ってくる例を紹介しようと思います。

 

最初にポイントを2点!

  1. ChEMBL db Connectorというお手軽簡単ノードがKNIMEにはあるよ⭐︎
  2. ChEMBLもREST APIに対応しているので、いろいろ工夫して情報が取れるよ!

という内容について紹介します。

 

例としてはNS5Bポリメラーゼ阻害剤について情報収集してみようと思います。

ソバルディのやつです。

f:id:sumtat:20170910155127p:plain

 

TargetのIDとしてCHEMBL5375(uniprot : Q8JXU8)が割り当てられいます。*2 *3

 今回は"CHEMBL5375(uniprot : Q8JXU8)"を出発時に入力情報とする、次のようなフローについて順に紹介します。過去記事とかぶる内容もあるので、該当箇所はリンク等を活用することにして、解説は軽めにします。

f:id:sumtat:20170910182454p:plain

 ChEMBL db Connector

 化合物・ターゲット・アッセイのCHEMBL_IDをキーとして、色々と情報を取り出してくれるノードです。

f:id:sumtat:20170910182541p:plain

 

ChEMBL_IDを使う場合は最上段に記入します。今回はuniprot_IDを使ってみたので、中段のProtein Accessionに記入しました。 記入したIDはtargetのIDなので、プルダウンからtargetを選択します。他にはcompound, assayを選べます。

Bioactivitiesにチェックを入れて実行してみます。

f:id:sumtat:20170910163745p:plain

f:id:sumtat:20170910163803p:plain

結構これだけでも使える情報がたくさんとれます。

  • 指定したターゲットと紐付く化合物のID
  • 活性値、その種類
  • アッセイのdescription
  • 報告されている文献名、その文献内での化合物の名前(番号)

などなど、ゲットできます。

 

ただ私は合成化学者の端くれなので、構造情報が欲しいです。そこで、ChEMBL db Connector Inputを使って情報の追加をしていきます。

 

ChEMBL db Connector Input

設定画面はChEMBL db Connectorと同じです。

f:id:sumtat:20170910182616p:plain

 

 先ほど取得した化合物のChEMBL_IDに相当する"parent_comp_chemblid"を指定し、またそのタイプをcompoundとします。先ほどBioactivitiesの情報は取得したので、チェックなしで大丈夫です。

ここに至るまでのGroupByでは"parent_comp_chemblid"に関して、重複するものを1つにまとめています。また、ここの設定では"parent_comp_chemblid"以外のカラムは残していません(manual aggregation設定なし)。出発のノードから2つに分岐しているので、必要な情報は上段に残っています。"parent_comp_chemblid"に対応する構造式が欲しいだけなので、このような設定で十分なのです。

また、時間短縮のためにParallel Chunk Start 、Endを使って並列処理を行なっています。

実行結果は次のようになります。

f:id:sumtat:20170910165714p:plain

ChEMBL_ID(化合物)に対応する構造がsmilesとして取得できました。他にもInChiだったり、分子量だったり、様々な情報が取得できています。

ここまで出来れば、活性値情報などを保持している上段のデータテーブルと連結させてやればいい感じになってきます。

f:id:sumtat:20170910170021p:plain

Joinerを使って連結させます。例ではInner joinとしましたが、left outer joinでも良いと思います。

joinerに続けてColumn Filterをつなげて、必要なカラムだけ残して実行した結果が次のキャプチャです。

f:id:sumtat:20170910170612p:plain

  • 文献名
  • 活性値の種別、単位、値
  • smiles

だけのTableが出来上がりました。

あとはおまけのようなものですが、まずはsmiles(よく見るとstringになってますね)を構造式に変換します。

 

Molecule Type Cast

このノードを通すと、stringになっている構造式データを"構造として扱える"形式に変換してくれます。

f:id:sumtat:20170910182700p:plain

 

文字列として構造が入っているカラム「smiles」をstructure columnに指定、そしてstructure typeを今回の場合はSmilesとして実行します。

f:id:sumtat:20170910171457p:plain

構造式になりましたね。でも私は

  • 構造式はテーブルの前の方が見やすい
  • aromatizeした表記が嫌いなので、直したい

ということで、Column Resorterでカラムの順番を変更したのちにdearomatizer (特に設定は要りません)を通してあげると、次のようなテーブルの完成です。

f:id:sumtat:20170910171912p:plain

 

REST API部分

ここでは各論文のアブストラクトを一気に取得してみます。

sumtat.hatenablog.com

とやっていることは同じなので、概要のみの紹介です。

 

f:id:sumtat:20170910182833p:plain

まずはString Manipulationノードを利用して

https://www.ebi.ac.uk/chembl/api/data/assay/ + assay__chemblid + "?format=json

という文字列を作ります。作成した文字列はDoc_URIとしました。

この記述をwebに投げれば、アッセイIDに紐づく情報が取れます。返ってくる情報の中に論文情報(document_ID)が入っているので、それを取得するのが狙いです。

ChEMBLのRESTについては

https://www.ebi.ac.uk/chembl//ws/home_old

を参考にすると良いと思います。

続くColumn filterで作成したDoc_URIのみを残し、GroupByで重複を無くしたのちに、Loopを使ってJSON readerにDoc_URIを1つずつ流していきます。

 

返ってきたJSONJSON to Tableを使って簡単に処理した後、Column filterでdocument_chembl_idだけを残します。

f:id:sumtat:20170910182941p:plain

 

続いてString Manipulationノードを利用して

https://www.ebi.ac.uk/chembl/api/data/document/ + document_chembl_id + ?format=json

という文字列を作成します(Doc_URI2)。

f:id:sumtat:20170910183044p:plain

 

作成したDoc_URI2の重複を除去して(groupby)、再度ChEMBLにDoc_URI2を投げました。

f:id:sumtat:20170910183313p:plain

document_IDに紐づく様々な情報を取得できますので、必要な部分を残して(Column filter)、続くNumber to StringでNumberにできるものは変換しました。

 

最終的にループを閉じるとこんな感じになります。

f:id:sumtat:20170910183652p:plain

f:id:sumtat:20170910183718p:plain

アブストの他にも、文献名や著者、ページ数などのをまとめたものの完成です。

必要に応じで、構造情報を持つ方のフローとアノテーションすることも可能ですし、さらにRESTを使って情報を取得しても良いかと思います。

 

 本当はChEMBLをまるっと落としてきて、ローカルでいじった方が早かったり・情報が漏れる心配などもなかったりでアドバンテージが大きいような気がしますが、wetのメドケム研究者であれば、このくらいできれば大丈夫なのかなーと思います。他の企業や研究機関でのメドケム研究者(wet)はどんな感じなんだろうなぁ。

 

 また、今回のフローのスタート部分にBLASTなどを追加して、類似のシーケンスを持つターゲットについて、ごっそりデータを取得するという方法も良いかもしれません。色々と工夫ができそうです。

ケモインフォに詳しい方がいれば、色々と教えてもらいたいです。

 

 さてさて、公共DBだけチェックすればいいのかといえば、そんなことはないと思います。でも多くの情報がまとめられていますし、上手に活用すればとても有用だと個人的に思います。調べる側のスキルも、公共DBのデータ量に臆さないレベルにまで上げていかないと取り残されちゃう時代になっているのだと感じています。

 

 今回は少し内容が偏ったものになってしまったので、一部読者の方にはあまり面白くなかったかもしれませんがご容赦ください。

 

コメント等もお待ちしています。

それでは、また次回!

 

*1:息抜きレベルを超えて、がっつりと芸能ニュースを読んでいるのをみると、正直ムカつきますね

*2:ソホスブビル:CHEMBL1259059のターゲットとしては、CHEMBL379(Hepatitis C virus)、CHEMBL395(HepG2)、CHEMBL382(CCRF-CEM)、CHEMBL612545(Unchecked)の4種が紐付いています。キャプチャでは【Approved Drugsとしてのソホスブビル】のメカニズムとしてCHEMBL5375が紐付いているため、今回のCHEMBL5375を基準とする検索ではソホスブビルはhitしてきません。自分の知りたい内容がちゃんと含まれるか否か、よく確認する必要があるので、お手軽簡単ほほいのほい!で済ませすぎるのはあまりお勧めはできません。

*3:chemblの作りに興味のある方がいるかもなので、chembl_23の構成図を載せておきますね。化合物情報を仲介役としてターゲット情報と上市薬情報は繋がっていますが、ターゲット情報と上市薬情報は直接繋がってはいないことがわかると思います。

f:id:sumtat:20170910160647p:plain