見出し画像

【JKI】019_Employee_Skills_02_よりみち!

【JKI_019】課題を再確認

従業員のアンケートのデータを集計して、プログラミングスキルのリストを作成しようという問題でしたね。
前の回ですでに解答を終えています。

つまり、今回は本編なしで全て寄り道です。
もうそっとこのページを閉じていただいても誰も困らないでしょう。

本日はLoop Endノードのお話です

よりみち①:

【意外に曲者!? Loop Endノード】

今回の問題、もう一つ注釈が付いています。

注:どのスキルも3以上に評価されていない(つまり、一次スキルがない)場合もあり得ます。

と問題文に書かれているのですが、今回のサンプルデータにはそんなデータは入っていませんでした。

そこで私の提出したWFには、ダミーデータを入れたTest_data.xlsxも収載しておきました。

全てのスキルを「1」と申告した従業員ダミーデータを仮に作りました。

そして、Loop Endノードをあえて初期設定のまま繋いで実行すると、ループが2回目で止まります。

私の提出したWFでは上記を体験いただけるようにしてあります。WFの編集は必要ですが。

設定:

Excel Reader (#1): Test_data.xlsxを選択。

Loop End (#16): あえてデフォルト設定

<比較用>エラーが出ない設定
他にも2つ設定が変わっていますが、説明は割愛します。

正直普段はここは注意して見てません。今回もそうですが、一回走らせてループが止まってしまって、「あれっ」とエラーメッセージを見て気づきます。

Input table's structure differs from reference (first iteration) table

first iterationでは私のWFの設計だと

Row Filter (#22)で全てフィルターされて空白テーブルになってしまうので、処理のアウトプットのColumn Resorter (#28)では

となってしまいます。私の設計が拙いため、2回目に生成する下図のデータテーブルと形が違ってしまいます。

【Loop Endノードのディスクリプション】

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

Allow changing table specifications
チェックされていると、イテレーション間でテーブルの仕様が異なることがあります。
イテレーションの間にカラムが追加または削除された場合、欠損値は結果テーブルに適宜挿入されます。
チェックされておらず、テーブルの仕様が異なる場合は、ノードは失敗します。

そんな場合でも先述の設定にしておけばテーブルの仕様が異なろうとも集計してくれます。Loop Endノードは懐の深い仕様ですね。
他にもいくつか設定時に気を付けるべき点があるそうなので引用しておきます。ディスクリプションってちゃんと読まないといけないですね。

Row ID policy
行IDをどのように扱うかを指定します。
新しい行IDを生成する - 行IDが新たに生成されます(Row0, Row1, ...)サフィックスを追加して行IDを一意にする - 入力されるテーブルの各行IDに反復番号が追加され、すべての反復で行IDが一意になります。
行IDを変更しない - 入力される行IDは変更されません。
この場合、異なるイテレーションで重複する行IDがないことを確認する必要があります。
そうしないと、エラーが発生します。
Add iteration column
イテレーション番号を含む列を出力テーブルに追加することができます。
Propagate modified loop variables
チェックすると、ループ内で値が変更される変数がこのノードによってエクスポートされます。
これらの変数は、ループの外で宣言されている必要があります。
つまり、サイドブランチからループに注入されるか、対応するループ開始ノードの上流で利用可能でなければなりません。
後者の場合、変数の変更は後続のイタレーション(移動和の計算など)で開始ノードに戻されます。
なお、ループ開始ノード自身が定義する変数は、通常、ループの制御を表すため、除外されます(例:"currentIteration")。
Ignore empty input tables
このオプションをチェックすると、空の入力テーブルとその構造は無視され、ノードが失敗する原因にはなりません。
Allow variable column types
チェックした場合、異なるテーブル反復の間でカラムタイプが変わっても、ループは失敗しません。


よりみち②:

【Loop Endノードの先方互換性】

話は変わって更に寄り道になるのですが、Loop Endノード、4.4系から4.5系にKNIME AP (Analytics Platform)がバージョンアップした際に互換性(先方互換)に問題が生じたようです。具体的にはKNIME AP ver.4.5.1で作ったWFをver.4.4.1で読み込むとこうなります。

でYesを押しても、その後

このNext>ボタンを押しても次へ進まないから仕方なく無理に開くと

これ、4.4系のLoop Endで代替したくても、4.5系で設定した内容が見えないんですよ。
まあ根本的な対策としてはKNIME APのバージョンを上げるんだろうな。

Just KNIME It!の解答者って当然最新版の4.5系を使う方がほとんどでして、未だに4.4系を愛用していた私にはつらい。一方で、もう4.6系の話も出ましたね。

Soon: new Python-based RDKit nodes (after KNIME v4.6 is released)

https://www.knime.com/sites/default/files/2022-06/community-spotlight-combined-slide-deck.pdf

Python-based RDKit nodesは早速注目を集めているようです。

いよいよバージョンを上げるか~と考えているところです。


以上
よりみち2回目!
でした。


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