・諸般の事情で、化合物のChEMBL IDのリストと活性情報が手に入ったが、構造情報が付与されていなかったとする。
・化合物数が10や20なら個別に構造を検索しても問題ないだろうが、それが数十、数百にもなるといよいよ面倒になってくる。
・そこで、ChEMBLのREST APIとKNIMEを使って情報を引っ張ってくることにした(下図)。
・今回使ったのは、IDからMoleculeを検索するもののうち、Listで一度にたくさん検索できるもの(下図の一番下)。StructureとかCompoundとかいろいろあるが、Moleculeでないと私は構造を釣ってこれなかった。
・中段のものが最もシンプルで、化合物のChEMBL IDを一つ入れれば一つ分の情報が返ってくる。下段のようにIDs_listにすれば、一度にたくさんの化合物の情報を釣ってこれると直感的に感じるが、表記方法が分からず苦労した。
・化合物のChEMBL IDを二つ並べて、表記方法を思いつくだけやってみたところ、セミコロンでID同士を繋げることで、別々のIDとして認識・処理された(半角スペースでもカンマでもPythonのList表記でも駄目だった)。
・例えば、以下のように化合物のChEMBL IDが与えられた場合にSMILES列を追加することを考える。
・以下のワークフローを組んでみた。
・工程は以下の通り。
①ChEMBL IDをセミコロン区切りでまとめたい。Column Combinerを使うために、とりあえずChEMBL IDを転置し、Column Combinerでくっつけてセミコロン区切りでまとめた(Column Combinerの出力は下図。右端の列に目的のものができている)。
②①で作成したcombined stringを使って、APIを作成し、Get Requestで情報を引っ張ってくる。APIを作成するためのString Manipulationの設定は以下。https://www.ebi.ac.uk/chembl/api/data/molecule/set/のあとにIDs_listをくっつける。GET RequestのDelayは十分に長くとり、サーバー負荷に配慮する。TimeOutも短すぎるとすぐにオーバーする。
③XPathノードを用いて、得られたXMLから必要な情報をTableとして抜き出す。今回はChEMBL IDとSMILESを抜き出す(以下、XPathノードの設定)。
④不要な列を削除する。出力ポートは以下の通り。
・ここまでで構造をとってくることはできる。せっかくなので、Molecular Type CastノードでSMILESの列を構造型に変換し、表示を弄るとそれっぽくなった(下図)。
終わり。