見出し画像

【JKI】020_Patient_Network_Days_01_「稼働日」とは

【JKI_020】課題を確認

Just KNIME It! (JKI)

今回の挑戦はこちら

問題文をDeepL翻訳し少し加筆して以下に

課題20:患者さんの稼働日データ
レベル:高
 
説明:あなたはある病院に勤めています。病院には患者さんの受診日データがあります。この課題では、週末を除く患者さんの受診日間の差分(「network days」(稼働日)と呼びます)を計算します。稼働日を計算したら、患者ごとの平均稼働日を計算します。この課題では、以下の入力と出力で実験してください。

入出力は訳さない方がいいので、スクショで紹介します。

さらに追記です。

注意:
単純にDate&Time Differenceノードを使用すると、患者のデータ/日付が混在し、週末をカウントしてしまうことになります。
ボーナス・チャレンジ:
ループを使用しないソリューションを作成すること。

難易度高だけにループ無しの追加課題が出ました。使う気満々だったので出鼻をくじかれた感がありました。

【network days】

まず「network days」(稼働日)って要するに平日の日数を指しているんだろうとは理解したものの、上記の例の通りに数えるには、そのルールを再確認する必要がありました。

開始日から終了日までの期間に含まれる稼動日の日数を返します。 稼働日とは、土曜、日曜、および指定された休日を除く日のことです。 この関数は、特定期間内の稼動日数を基準にして従業員の給与を計算するときに使用します。

なるほど、今回祝日は考えなくていいだけまだ難易度を下げてもらっているのだなと理解しました。しばしば思うんですがExcelって高機能ですよね。この関数が標準でついてくるわけですから。今回自分でKNIMEで実装しようとして大変苦労したのでより実感しています。

【稼働日の数え方】

開始日から終了日までの期間に含まれる稼動日の日数ということで、開始日も終了日も平日なのかどうかで数えあげる対象かどうかが変わります。
正直言うと、上の例で受診日が土曜日の時があるため、稼働日の算出アルゴリズムをどうしたらいいのか考えるだけで数時間かかりました。
今回は下記のように考えていきました、

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

以上の3つを足せば「稼働日」が算出できます

そのため、日付のデータから、それが1年間のうちの何週間目に当たるか、そしてその日の曜日もデータを得たいと考えました。

【入力データ作成と日付データ変換】

今回は入力データを作るところから課題です。

またData型へ文字列から変換していくときに手間取りました。もっとうまくやれるのかな。Sorterはこの後で、時系列データ処理をするので、データが正しく時系列順にに並ぶように設置してますが、実は今回の入力データだけなら、もともときれいに並べて下さっているので不要です。以下設定を列記します。

設定:

結果:

【時系列データ集計】

先述の通り、今回は2つの受信日の間隔を知るために、それぞれの受信日が2022年の何週目にあり、どの曜日なのかデータ取得したいです。
そういう時はExtract Date&Time Fieldsが便利ですよね。

まっきーさんの下記記事は何度か紹介していますがもう一度。

そして、KNIME workflow (WF)で計算する時にはそれぞれのデータが横並びになっているとMath Formulaが使えます。そこで上記ではそのためのデータ整形をしています。要するに、受信日データを一つずらして、横並びになるようJoinしています。
設定:

結果:

Lug Columnでずらした結果、別の患者さんのデータと並ぶことになる行は集計対象から除いています。あとはカラム間で差を取ったりして計算です。
この後の立式で大変苦労してしまいました。それはまた次回。

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

おまけ:

【JKI_019 感想戦】

今回の公式解答は私の解答とは大きく異なりました。

今回のボーナス・チャレンジのようにループを使用しないソリューションを提案しています。

分岐処理が一目で分かる見読性は優れているように思いました。
まさに見読性の高さはKNIMEの強みだと感じています。

そういえばKNIMEコミュニティが Low Code for Advanced Data Science
のタイトルで情報発信を始めて1年が経過したそうです。素晴らしい!

上記コミュニティでもしばしば取り上げられてきた通り、ビジュアルプログラミングを使いどころはどこか。
良く語られるところではありますが、下記の記事の例えがわかりやすくて共感したので引用しておきます。

プログラマにはもっと複雑な処理ができるプログラミング言語が必要かもしれませんが、プログラミングを知るために必要な処理はそれほど多くありません。
料理に例えると、中華料理のプロには中華鍋が必要ですが、一般人が家庭料理を初めて作る時には、テフロン加工のフライパンの方が適切、ということです。

さらに言えば、世界中の玄人さんにかかればKNIMEでプロも納得のシステム実装が可能です。
私見では国内では未だにマイナーな存在ではあるのですが、もっと多くの方に使ってもらいたいなと願い続けています。

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