見出し画像

【W8】タンパク質データの取得_07_Step2_04_Process_JSONメタノード

【W8の目的】

(i) PDBデータベースからEGFRの全てのPDB IDを取得し、
(ii) X線結晶構造解析による構造で、最も質の良い4つのタンパク質ーリガンド複合体構造を取得して保存します。

Python版はより発展的です。

【JSON形式の検索結果】

デモデータを使ってW8のStep2を学んでいます。上記の(ii)を実行中。

Step2ではPDB IDをキーにPDBから必要なデータを取得するため、GET Requestノードにおいて、GraphQL形式のクエリでPDBのAPIを検索してJSON形式の出力を得ました。
JSONって何だっけという方はこちらをどうぞ。

https://wa3.i-3-i.info/word13798.html

階層データなどを文字列で表現するお作法の一つですが深追いは避けます。
実物を見た方がわかりやすいと思うので、具体的にデモデータから出力例(下図のbodyカラム)を抜き出してみます。

Row0のentry_idが2EB3の場合はリガンドが1つなので、比較的単純です。

PDB_resolutionが2.84
comp_idはANP
formula_weightは0.506(を1000倍して506)

と何となく読み取れると思います。JSONではPDBデータベースのどこにそれぞれのデータがあったかも表現できています。ルールに沿って文字列処理すれば、欲しいデータをKNIMEが得意なデータテーブル形式に変えることができます。

ただ、1つのPDBデータにリガンドは一種とは限らないですよね。

次にRow1のentry_idが2EB3の場合をみるとリガンドが2つ。

ここをそれぞれのリガンドごとにデータを分けていく必要が生じます。


【Process JSONメタノード】

メタノードの中身を見てみましょう。

7つのノードで、上記のJSONデータから欲しい情報を抽出して整形します。
メタノードの出力は確かにテーブル形式になっています。

では段階的にどんな処理をしているか見ていきましょう。

【JSON Path】一つ目で2つのデータ(群)を抽出

JSON Pathノードは、その名の通りJSON Pathを指定してデータを抽出するノードです。

日本語化されたディスクリプションを見てみます。

JSONPathは、XMLのXPathに似た、JSONのためのクエリ言語です。
単純なクエリ(確定JSONPathとも呼ばれる)の結果は、単一の値です。
コレクション クエリ(不定形JSONPathとも呼ばれる)の結果は、複数の値のリストです。

今回のデモデータではまさに上記の2通りを実践してくれているのです。

PDB_resolutionは一つのentry_idに対して一つの値のみですので、単純なクエリ(確定JSONPath)
$['data']['entry']['pdbx_vrpt_summary']['PDB_resolution']
で単一の値が得られます。

一方で、リガンドは一つのentry_idに複数ありうるから、
コレクション クエリ(不定形JSONPath)を使って複数の値のリストでデータを得ます。
$['data']['entry']['nonpolymer_entities'][*]

[*]の部分にワイルドカード(*)が入力されているから、nonpolymer_entitiesにあるすべてのデータを取ってくる設定となっています。

でも、私はこのクエリをサクッと自分で書くことはできません。このノードはノーコードで、上記のJSON Pathを発生させてくれるのがありがたいです。

操作法は下記の記事で紹介したことがあるので詳しくは割愛します。

ただ、下記のように欲しいデータをクリックして色を変えておいて、ボタンをぽちっと押してJSONPathが出来てくる体験は一度してみて欲しいです。「おお、僕にもできた」って感動しました。

単純なクエリ(確定JSONPath)の発生例:

コレクション クエリ(不定形JSONPath)の発生例:

結果: nonpolymer_entitiesは各entry_idにあるだけのリガンド群データをリスト形式で横並びに表記してあるのも見て取れると思います。

リガンド情報はまださらにリガンドごとにデータを分けていって、欲しい部分だけを抜き出す必要があります。今回はここまでとして、続きは次回に。


おまけ:

或る化みす途のブログへの敬意】

Twitterではおじさんと名乗っておられ、とあるケミストもしくはアルケミストいや或る化みす途のブログを書かれているKeetaneさん。

最近次々と素敵な記事をものされています。

https://keetaneblog.hatenablog.com/entry/2022/08/14/013200

私の記事も読んでいただけたのは嬉しかったですし、何よりTeachOpenCADDのW8に

「STEP 5:リガンドとAbstractを取ってくる」

https://keetaneblog.hatenablog.com/entry/2022/08/14/013200

を加えてくださったことに敬意を表します。
workflowをKNIMEHubなどに公開される予定はないのでしょうか?

記事に丁寧に設定など記録して下さってますから、各自作ってみるのが一番勉強になるよと言うことかなと思いました。

今回紹介しているGraphQL形式はあえて避けてREST APIでの処理をして下さっているので、もう一つ新たな知識を得ることができるところもありがたいですね。

また、昨年までにもPDBデータ活用に関してとても多くの素晴らしい記事を投稿してくださっている事は前に紹介しました。

これからも楽しみでなりません。
私がW8 Step5の体験記を書いてもいいですかね??

記事を読んでいただきありがとうございます。 先人の智慧をお借りしつつ、みなさんに役立つ情報が届けられたらと願っています。 もしサポートいただけるなら、そのお金はKNIMEの無料勉強会の開催資金に充てようと思います。