【W8】タンパク質データの取得_04_Step2_01_GraphQL
【W8の目的再確認とStep2】
(i) PDBデータベースからEGFRの全てのPDB IDを取得し、
(ii) X線結晶構造解析による構造で、最も質の良い4つのタンパク質ーリガンド複合体構造を取得して保存します。
Python版はより発展的です。
前回までデモデータを使ってW8のStep1を体験しました。
得られたのは
EGFRの全てのPDBデータ
からX線解析結果の解像度などで絞り込んだ156のPDB IDです。
Step2では
PDB IDをキーにPDBから必要なデータを取得し、JSON形式からテーブル形式にデータを整形したのちにフィルタリングを行います。
Step3でPDBファイルをダウンロードしてくる対象を選抜するのが目的です。
【GraphQLってなんだろう】
ケモインフォティクスあるいはプログラミングなど諸々初心者の私にとって、GraphQLって初耳でしたので調べてみました。
GraphQLだけでなく、クエリやRESTって何とか一つ一つ技術用語を説明しようとしてくれる親切な記事だったので紹介しておきます。正直に言うととても私が簡単に説明できる内容ではなかったので記事を読んでください。よく利用されてきたRESTと比較して必要なデータだけを効率よく検索できるDB処理高速化技術のようです。
GitHubが素敵な教材を提供して下さっています(個人の感想です)。
もし万一スターウォーズのR2-D2の友達がどのエピソードに出ているかを調べたくなったら、左の画面のnameの下の行に文字列を入力して下記のようにしてみてください。
以下は入力例です。
① nameで改行して半角スペースを4つ入れて、提案されたフィールド名からfriendsを選択。
② 以下の通り入力する。半角スペースや改行は一般的に見やすく階層ごとに揃えるお作法のようです。
クエリとして文法的に正しい入力をするとすぐに右のウィンドウに検索結果が出ますね。
インタラクティブだと面白いです。
③ 右の検索結果を見ると、R2-D2の友人たちが3部作のどれに登場したかまでデータが得られているのが分かります。
なるほどクエリで指定した項目だけが選択的にかつ即座に返されるとわかりました。
ケモインフォマティクスやバイオインフォマティクスでも活用されている技術のようです。知らなかった。
さてとめっちゃ寄り道しましたね。
ではKNIMEではどんなふうにGraphQLでの検索を実装するのかを見ていきましょう。
【Column Expressions】
万能ノードを使ってますが、要するに文字列生成です。
このノード、玄人さんが好きらしいです。
設定を見てみましょう。
文字列が長い!私のPCのディスプレイいっぱいに広げても入りきりませんでした。
実はこれ、上図で紫色にアクティベートされているPDB IDだけが変数となって右の文字列と左の文字列の間に入るだけです。
すなわち
"{ entry(entry_id: \""+column("ID")+"\") { pdbx_vrpt_summary { PDB_resolution } nonpolymer_entities { pdbx_entity_nonpoly { comp_id } rcsb_nonpolymer_entity { formula_weight } } } }";
のつくりは、
決まった文字列
{ entry(entry_id: "
と
PDB ID(各行で異なる)
と以降もまた決まった文字列
") { pdbx_vrpt_summary { PDB_resolution } nonpolymer_entities { pdbx_entity_nonpoly { comp_id } rcsb_nonpolymer_entity { formula_weight } } } }
を繋げるのです。
「”」を文字列の中に入れたいのでエスケープ文字を使っているのがより分かりにくくしていますね。
「”」を文字列に含めたいときはは「\”」って指定しないといけないプログラミング上のお作法となっております。
エスケープ文字:
https://wa3.i-3-i.info/word11732.html
あと、最後の「;」(セミコロン)はなくても無事動いたんだけど深追いは避けます。クエリの最後にはセミコロンをつけるのが一般的なんだと思います。
結果:
黄緑の線を引いたPDB IDの部分だけが各行異なります。
なのでたとえば第1行(RowID=Row0)を例にして、GraphQLの書き方のお作法に従うと
{
entry(entry_id: "2EB3") {
pdbx_vrpt_summary {
PDB_resolution
}
nonpolymer_entities {
pdbx_entity_nonpoly {
comp_id
}
rcsb_nonpolymer_entity {
formula_weight
}
}
}
}
entry_id: が”2EB3"のデータから
pdbx_vrpt_summaryにある{PDB_resolution}
nonpolymer_entitiesの下階層の、
pdbx_entity_nonpolyにある{comp_id}
rcsb_nonpolymer_entityにある{formula_weight}
を検索してくるクエリということかなと推測します。合っているのか著しく不安です。
これ、ノーコードには分類しがたい利用法ですよね…よくこの文字列を定義できるなぁと感心しつつ次へ。
おまけ:
【連載再開といえば】
「HUNTER×HUNTER」のキルアの言葉です。
待望の連載再開を歓ぶ声がtwitterにあふれてましたよね。
読者数は千万分の一以下かもしれないですが私のTeachOpenCADD体験記も2022年夏に連載を再開しました。TeachOpenCADD-KNIMEのW7の紹介を終えて、しばしお暇いただいてました。
W8が私にとって初見の技術であったので勉強に時間がかかったのは一つの要因です。
しかし実は、この充電期間中に自分にとっては初めての嬉しい出来事もありました。
尊敬するKNIMEエバンジェリスト日本代表のまっきーさんを真似して、ランサーズに昨年登録をしていました。
正直1年間ほど休眠アカウントでした。
ところが、このnoteを見かけた方からKNIME活用支援のお問い合わせを頂けたのです。嬉しかった。
単に好き放題noteを書き散らかしているだけではなく、実際に役立つKNIME workflowを提供したり、活用支援できたりするなら本当に嬉しいことです。
私が目指すKNIMEエバンジェリストへの道の一つかもと思っています。
昨夏より、ChemoInfo社の藤さんが運営するサロンに背中を押していただいて始めたこのnoteが繋いだ縁だと思います。
KNinjaに成れたことなど、始めた当初は考えもしていなかった発展をしています。
行動の大切さを学んだ1年間でした。まあ、藤さんの行動力は次元が違うので仰ぎ見るばかりですが、私も冒険してみてよかったなと思っています。
記事を読んでいただきありがとうございます。 先人の智慧をお借りしつつ、みなさんに役立つ情報が届けられたらと願っています。 もしサポートいただけるなら、そのお金はKNIMEの無料勉強会の開催資金に充てようと思います。