見出し画像

【JKI】020_Patient_Network_Days_02_試行錯誤

【JKI_020】課題を再確認

Just KNIME It! (JKI)

出題者の皆さんのコメントですと第20回を記念して難問を出してくださったそうです。 お気遣いどうも(苦笑)

課題では、「network days」(稼働日)の算出が一つのハードルになっています。
その算出に必要なデータを用意するところまで前回紹介しました。

私の場合は稼働日算出をどのように考えたのかを以下記録します。

もっとスマートに解けるのではないかとは思うのですが、それは他の解答者のKNIME workflow (WF)を見るときのお楽しみにします。

【稼働日を数えてみた】

「network days」(稼働日)は二つの日付で決められて期間内に平日が何日あるかを数えます。課題の例を一つ上げると、2022年2月12日~2022年2月25日の期間の稼働日は、10日です。

2月12日は土曜日ですからノーカウント。その次の週から最終日の2月25日までは2週にわたっていて、最終の金曜日までが期間内なので0 + (5 X 1) + 5= 10です。
そんな式は考えなくても一目見たら人間は分かるのでしょうが、上記はあえて下記のルールに寄せて表現してみました。

A)   前回受信日の週は何日平日があるか。
B)   前回受信日と今回受診日の間に土日を含めてまるっと何週間の期間が空いているか。
C)   今回受信日の週は受信日までに何日平日があるか(受信日を含めて考えます)。

今回の例では
Network_Days = A + B x 5 + C
A = 0, B = 1, C = 5です。


【稼働日算出WF】

上記の例のように、土曜日スタートの場合はその週の稼働日は0日と考えます。ちなみに今回はこの病院は日曜日休みで受診する可能性がないと勝手に仮定して話を進めます。この辺休日診療とかいろいろ想定するときりがなさそうですので割り切りました。

前回紹介の通り、各受信日の曜日を数値で得ることができます。
日曜スタートで日月火水木金土を1から7の連番で示します。
例えば下記のJoinerノードから出力されたデータテーブルを見ると、

2022年2月12日は土曜日なのでDay of week (number)は7です。
上述のAすなわち前回受信日の週は何日平日があるかは
A = 7 - Day of week (number)

次はBすなわち前回受信日と今回受診日の間に土日を含めてまるっと何週間の期間が空いているかを考えます。それぞれの受信日が2022年の何週目であるかはWeekカラムにあります。
B = (Week (right) – Week) - 1

最後に、Cすなわち今回受信日の週に月曜日から受信日までに平日が何日あるかは
月曜日から金曜日の場合: Day of week (number) (right) - 1
土曜日の場合:Day of week (number) (right) – 2
となります。この土曜日補正をするかどうかをRule Engineノードで判定しています。

上記で後ほど補正を行うわけですが、AからCで式を立てたので、それを以下の式に代入すると稼働日が出ます。出るはずです(気弱)。
Network_Days = A + B x 5 + C
で、代入してから何やかや式をなるべく(私なりに)シンプルにした結果が
5*($Week (right)$-$Week$)
-($Day of week (number)$)
+($Day of week (number) (right)$)
+$LastDateIsNetworkDay$
となります。

式さえできたらMath Formulaノードの出番です。

結果:カラムは並べ替えてあります

今回の実験サンプルの出力例と稼働日が一致しています。

余談ですがループ無しで土曜日の扱う方法を考え着くのに試行錯誤して半日かかりました。

【平均稼働日算出】

前回のJKIに続いてGroupBy登場です。とにかく便利。

設定:

【データ統合と整形】

特に説明は不要でしょうから設定のみ以下に。

設定:

やっと解答できました。

WFはKNIME Hubに上げてあります。

おまけ:

【Just KNIME It! 20回戦までを振り返って】

おかげさまでJKIの20回、すなわち5ヶ月毎週挑戦を続けることができました。解けたとは言っていません。

明らかに自分の解答が間違っていて、次週の公式解答を見て「あぁっ!やらかしたぁ」って何度か叫んでます。それでもnoteに記録してしまっているので覆水盆に返らず。この挑戦で一番難易度が高いのはまさにこの自分の恥と向き合う精神的ハードルであろうと思います。

得られたものは多くありました。例えばですがKNinjaって新たな称号、とても気に入っています。競プロのようにつよつよでないと名乗れないことはなく、参加しつづけたら認定いただけるところがありがたかったです。

カムイもNARUTOも忍たまも忍者。私もKNinja

忍者ではないですけれど、今連想する言葉、それは

やるならすぐだ!!考えてる時間ないぜ!!

キルア「HUNTERXHUNTER」

続きが楽しみでなりません。

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