見出し画像

【JKI】040_Just_KNIME_It!_Season_Finale

【JKI_040】課題を確認

Just KNIME It! (JKI)

今回の挑戦はこちら

問題文のところだけをDeepL翻訳し少し加筆して以下に

課題40: Just KNIME It! シーズン最終回
レベル:
説明:
#JustKNIMEIt の最初のシーズンの終了を記念して、このチャレンジは完全に無制限のチャレンジになります!
適切と思われるニッチな操作を処理する再利用可能なコンポーネントを作成することをお勧めします!
発想の参考に、コミュニティ コンポーネント コレクションを参照してください: ベスト プラクティス2021 年冬2022 年春2022 年夏
このチャレンジにさらにインスピレーションが必要ですか?
正規表現のコンポーネントは楽しいかもしれませんが、正直なところ制限はありません。

さらに

注:今回はオープンエンドの課題であるため、通常のように我々からの解答を提供することはありません。

好きなもん作ってみ!ってことですね。粋な計らいです。
あまり悩まないで決めました。JKI以外の私のもう一つの挑戦であったTeachOpenCADD-KNIME(TOC)体験記も先月最終回を迎えたところでした。

TOCでは扱ってなかったニッチな技術をコンポーネントにしてみようと思います。
そしてそれを部品としてKNIMEでのデータベース利用体験workflow (WF)を作ってみました。

【ChEMBLデータの入手】

TOCのW1からまるっといただきます。

上記の全てのノードやメタノードについては上記の記事やその前後の記事で紹介しているので、今回説明はしないです。大まかにいうと、ChEMBL IDで興味のあるターゲットタンパクを指定すれば、ChEMBLに収載された関連化合物群のアッセイ結果などの一覧が入手できます。

【Transform】

ETLのE、データ抽出(Extract)の次はTのデータ整形(Transform)です。

ChEMBL形式のデータを自分のPC内にデータベースとして格納するにあたり、私なりのリレーショナルデータベース設計をしたので、それに合わせたデータ整形が必要になりました。

偉そうに設計なんて言いましたけど、実のところもともとのChEMBLの設計に合わせた簡易版を作っただけです。

御本尊はかように壮大な作りです。
まるっと自分の環境下に複製するのはかっこいいんですけど、私には手が出ないです。お好きな方はこちらをお勧めします。

私はLocal DBを作ることにします。ほんのちっちゃな雛形です。
T_COMPOUND: 化合物情報
T_ASSAYS: 評価試験情報
T_ACTIVITIES: 測定値情報
と3つのデータ種に分けてTableを作りたくて、3つに分岐してデータ整形しています。

化合物情報として折角なんで少しだけ記述子も登録したくて、TOCのW2から一部拝借しています。脱塩処理も入れて、フリー体のSMILESもDB登録する仕様にしています。この辺作りこみだすときりがないですし、説明も割愛します。関連記事をお読みいただけたらと思います。

今回の解答WFにはオリジナルへの深い敬意とともにW1,W2もコピーしておいてあります。

実はここまではノードかメタノードなので、まだJKI第40回の解答にはなっていません。データの前処理だけで1000字以上書いてしまいました。

【ローカルDBのデータ更新コンポーネント】

ETLのL、データのLoadつまり出力先はSQLiteで作ったローカルDBです。

今回作ったのが、SQLiteでWF内に格納したローカルDBへChEMBLデータを書き込むコンポーネントです。ChEMBLのロゴも拝借してデザインしたんですが、怒られたら差し替えます。
コンポーネントって、自分で画像ファイルを用意して、見た目を変えられるのですごく楽しいです。こんな風に操作しました。

  1. コンポーネントを開いて、ディスクリプションを開きます。

2) 右上端の鉛筆のようなアイコン(上図では黄緑色でマークしています)をクリック

3) 下図の通り、アイコンのデザインだけでなく、コンポーネント自体の説明、各ポートの名前や説明などかなりの自由度でいじれます。

4) 編集し終わったらフロッピーディスクのようなアイコンをクリックして保存して完了。

フロッピーディスクって何かわかる人はどれくらい残っているんかなと思いますが、操作自体は簡単ですよね。皆さんも楽しんでみてください。

出力ポートの種類や数、コンポーネントな名前などを変えたいときはコンポーネントを右クリックして下図のようにSetup…メニューを開いて下さい。

例えば「Add」ボタンを押すと、どんな種類の入出力ポートが欲しいかを設定できて、必要なら並び順も変えたりできます。より詳しくは下記記事がオススメです。

さて、今回の課題がコンポーネントを自由に作ることなのでこれである意味完了なのですが、一応中身も紹介します。ただ、ニッチ過ぎて一体だれが使うかなぁ…

私が作ったローカル DBは3つのテーブルで構成されています。

それぞれのテーブルへデータを書き込むんですが、念のためトランザクション管理もしています。説明ははしょりますが参考にしたのはInfocom社提供の下記WFです。マニアックなWFを日本語化して公開して下さり本当にありがとうございます。

データ更新の仕組みは簡単に言えばすでに登録してあるものは上書き更新、ないものは新規登録します。

残念ながら3万行登録で数分待つのがどうやったら高速化できるかわからないんですが、改良できたらいつかどこかで記事にしようと思います。KNIMEでSQLiteのTableにIndexとか張れるのかな?

概要説明だけで2000字を超えました。実はおまけもあります。

だってDB作っただけでは役に立たないですからね。データを検索や集計するとか、DB自体の編集をするとか体験できるようにしています。

今回のWFを何人もダウンロードしてくれた場合は、後日解説記事やさらなる体験記など書こうと思います。今回の解答としてはこの辺で。

KNIME Hubに解答は上げています。SQLiteのファイルなど内蔵させたので数十MBになってしまっていますがよろしければダウンロードして使ってみてください。


おまけ:

【JKI_039 感想戦】

先週のJust KNIME It! (JKI) 第39回はGoogle Sheetsで公開されている “educational gag orders”データの解析でした。

 公式解答はこちら

どの州で最も多くの法案が提出されたか

どのようなテーマが最も多く議論されているか

タグクラウドを作成で完了というのは手軽でした。なんといってもKNIMEにはKeyword Searchコンポーネントがあります。

JKIの第31回で体験しました。

今回のWFは一見とてもシンプルに作られています。

データを読み込めたら3つのノードもしくはコンポーネントを繋いでタグクラウドが作れちゃいます。コンポーネントの中は私ではちょっと解説できない技術レベルですけど、その機能をコピー&ペーストで使えるのがKNIMEの素敵なところです。

私もタグクラウドは解析用には作ったんですが、ちょっと考えすぎて他にいろいろ作りこんでしまいました。いろんな解析方法があってもいいとは思います。

【運営への感謝】

JKI シーズン最終回、何よりもこの楽しくも勉強になる企画を40回も実現して下さった運営の皆さまに感謝です。
途中で何回か、今回は解答は無理かもと諦めかけたのですが、ネット検索するとKNIMEコミュニティが本当に多くの情報を公開してくれていることを知りました。
おかげさまで昨年の自分では全く手も足も出なかった問題が出ても、今ならいくつか工夫できます。解けるとは約束しないですけど。


KNIME利用者が増え、コミュニティが活性化されてますます素人でもノーコードやローコードでのプログラム利用体験ができることで、KNIMEがより多くの方にとって福音になると思います。

KNIME Hubで自作のWFを人の目にさらさなくてはならないのが最も勇気が要る難しいハードルだったと思うのですが、JKIのおかげで抵抗感がかなり減り、JKI以外のWFもいくつかは公開してみたりしています。私もKNIMEコミュニティの一員として今後も何かできることがないか、探っていきたいと思います。
 
素敵な企画をありがとうございました!

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