IBMソリューションブログのこちらの記事にある、Modeler詰将棋!が面白かったので、気晴らしついでにやってみました。
例題1:「欠損の直前の値を代入する」
これは簡単ですね。同じ値をいれるので、置換ノードで@OFFSET(@FIELD,1)
で上からコピーすればいけます。
例題2:「欠損値を線形補間する」
これを7ノード未満でやることにチャレンジ。
実戦ではこういうケースでは集計ノードをうまく使えないか考えます。
色々考えて、6ノード(6手詰め)で出来ました。
まず新規フィールド作成ノードで、sectionとして集計する区間にラベルをつける。nullと非nullの区間ごとにカウントアップさせます。
集計ノードでsection毎にTemperatureの最小と最大を集計します。このときに件数Record_Countも出しておきます。
次の新規フィールド作成ノードがポイントで、null区間で加算する差分値diffをここで計算してます。CLEM式の意味は、1レコード後ろの最小値と1レコード前の最大値の差分(これがnull区間で埋めるべき値の幅)を、レコード件数で割って1レコードあたりの差分値としています。
あとはこれを本流に結合して、結合で順番が狂ってしまったレコードをTimeの昇順でソートした後、Temperatureを置換ノードでnullの区間に「1つ前のレコード+diff」として埋めます。
不要列を消すフィルターノードを入れたら7手になっちゃいますが、お題はTemperatureの補完なので、これでヨシとします。
(2021/3/19追記) 次のブログで紹介されました。ありがとうございます。5手詰できる猛者の登場に期待します。
https://www.ibm.com/blogs/solutions/jp-ja/modeler-tips-03/