t_kahi’s blog

KNIMEやCellProfiler、創薬に関する記事と,日々のメモです

【KNIME】化合物情報を基にChEMBLから作用メカニズム情報を取得する

こんばんは,@PKです.

以前,細胞染色の画像データとメタデータ(処理した化合物名,Well番号,プレート番号)を, CellProfilerの「Metadata」モジュールで紐付ける操作の紹介をしました.

t-kahi.hatenablog.com

このメタデータには,薬理活性化合物の名前やSMILESなどの情報がありますが,「化合物の作用メカニズム」に関する情報はありません.
そこで,メタデータの化合物情報から,作用メカニズムの情報をKNIMEを使って抽出したいと思います.

化合物の名前やSMILESで探しても良いのですが,メタデータに含まれていた「image_metadata_BROD_ID」情報がPubChemのSynonymsに登録されています.

f:id:t_kahi:20190207204542p:plain

バイオ系の方だとPubChemという名前になじみが無い方もいると思うので是非,統合TVのPubChem使い方紹介動画を参考にしてください.

PubChemを利用して化学物質やアッセイの結果を調べる 2017 統合TV(togotv)|生命科学系DB・ツール使い倒し系チャンネル

ただし,化合物の作用メカニズム,と言っても化合物によっては選択的に標的を阻害するものもあれば,非選択的に様々な分子に作用するものもあります.
また,漢方の成分のようにそもそも細胞内のメカニズムがよくわからない…という化合物も薬理活性化合物ライブラリーには含まれています.

そこで.今回はChEMBLで作用メカニズムが示されている化合物のみに着目をして,作用メカニズムの情報を抽出しました.

※ChEMBLには「Max Phase」という数字で化合物の臨床ステージが示されており,作用メカニズムがあるのはPhase3やPhase4の化合物だけでした.
ontology - Does ChEMBL have a specific definition for what they mean with "Max phase for indication"? - Biology Stack Exchange

それでは,作用メカニズム情報取得の流れを簡単に紹介していきます.

KNIMEワークフローについて

紹介するKNIMEのワークフローは以下の通りです.
ノードの数は少し多いですがやっていることは単純作業の繰り返しです.
この後に,画像解析のワークフローと組み合わせたいので,「Metanode」というノードにこの処理全体を入れてあります.
全体の処理がすっきりするのでおススメです.

f:id:t_kahi:20190207213419p:plain

実は,ほぼ同じ処理の記事を以前にも紹介しています.
t-kahi.hatenablog.com この時は,化合物の構造情報からターゲット分子を抽出しています.

今回も流れは同じですので細かいノードの説明は省略して,ポイントだけ紹介していきます.
上図で示しているように,主に4つの処理を行っています.
(不勉強のせいで遠回りしていたらすみません…)

  1. 化合物のBROD IDを基にPubChem IDを取得する
  2. PubChem IDからInChIKeyを取得する
  3. InChIKeyからChEMBL IDを取得する
  4. ChEMBL IDから化合物のメカニズムを取得する

基本的には「String Manipulation」ノードでURLを作成し,「GET Request」ノードでデータベースにアクセスし,「XPath」でほしい情報を抽出する, という流れです.

それぞれのフローについて以下で紹介していきます.

化合物のBROD IDを基にPubChem IDを取得する

PubChemのAPIは以下で確認することができます.
https://pubchemdocs.ncbi.nlm.nih.gov/pug-rest

冒頭で1秒間で5回より多くリクエストを出してはいけない!と書いてあるのに注意してください.

「String Manipulation」ノードで,以下のように化合物の名前で検索するURLを作ります.出力はXML形式にしています.

join("https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/",$First(Image_Metadata_BROAD_ID)$,"/XML")

続いて,「GET request」ノードでデータベースにアクセスします.
ここでは,冒頭の注意書きを守って,「Delay(ms)」という部分でリクエストの時間を制限します.

最後にXpathで化合物のPubChem IDの部分を選択します.

/dns:PC-Compounds/dns:PC-Compound/dns:PC-Compound_id/dns:PC-CompoundType/dns:PC-CompoundType_id/dns:PC-CompoundType_id_cid

その結果,以下のようにPubChem IDを取得することができました.
f:id:t_kahi:20190207212743p:plain

PubChem IDからInChIKeyを取得する

こちらも,先ほどと同様にPubChemにアクセスをして化合物のInChIKeyを取得しました.
「String Manipulation」ノードでInChIKeyを取得するURLを作成します.

join("https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/",$PC-CompoundType_id_cid$,"/Property/InChIKey/XML")

同様に「GET request」⇒「XPath」でInChIKeyを取得します.

/dns:PropertyTable/dns:Properties/dns:InChIKey

きちんとInChIKeyが取得できています. f:id:t_kahi:20190207214028p:plain

InChIKeyからChEMBL IDを取得する

続いては,ChEMBL APIを使ってChEMBL IDを取得します.

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

InChIKeyによる検索は類似度を指定することができます.
今回は完全一致するものが欲しかったので,similarity = 100,完全一致するものを選んでいます.

join("https://www.ebi.ac.uk/chembl/api/data/similarity/",$compound_InChIKey$,"/100")

同様に「GET request」⇒「XPath」でChEMBL IDを取得します.

/response/molecules/molecule/molecule_hierarchy/molecule_chembl_id

確認すると,InChIKeyの中にはChEMBL IDがないものも含まれていました.
今回は取得できる限りの化合物のデータで充分だったので,row filterで取り除いておきます.
f:id:t_kahi:20190207214701p:plain

ChEMBL IDから化合物のメカニズムを取得する

いよいよ化合物の作用メカニズム情報を取得します!
…とはいえやることは同じで,「String Manipulation」ノードでメカニズムを取得するURLを作成します.

join("https://www.ebi.ac.uk/chembl/api/data/mechanism?molecule_chembl_id=",$molecule_chembl_id$)

「GET request」⇒「XPath」で作用メカニズムを取得します.

/response/mechanisms/mechanism/mechanism_of_action

得られた結果を確認すると,やはりメカニズムが取得できたのはそれほど多くないようです…
f:id:t_kahi:20190207220954p:plain

最後に

今回は薬理活性化合物の作用メカニズムの情報をChEMBLから取得しました.
最初の時点では1597化合物あったのですが,最終的にメカニズム情報を取得できたのは173化合物だけでした…
ちょっと少ないのでもう少し増やすことができればよいと思っています.

他の方法をこれから考えていきますが,PubChemにはMeSH termの情報も活用してみたいと思っています.
(最終的には化合物の情報をじっくり見ながら研究者が作用メカニズムを当てはめていく人力作業になる気もしますが…)