見出し画像

【JKI】004_Days With Price Changes

【JKI_004】課題を確認

Just KNIME It! (JKI)

今回の挑戦はこちら

画像1

今回はDeepL翻訳の方が良さそうでした。

チャレンジ4:価格変動があった日
レベル 簡単

説明
あなたはKNIMEを使って、ある商品の毎日の価格をオンラインで監視しています。ラインプロットノードを使用して、すでに収集した毎日の価格を視覚化した後、あなたは価格がしばしば一定の日数で再び変化することに気づきます。手元にある価格データに「Change」という名前の新しい列を作成し、その値は日次価格が前日と比較して変化した場合は1、変化しなかった場合は0になります。データの最初の日足は、「Change」の値が1になるようにします。
例として、最初の日次価格が以下のようなものであった場合

日付 価格
2015-01-01 10
2015-01-02 10
2015-01-03 11

最終的に以下のような形式のデータになるはずです。

日付 価格 変更
2015-01-01 10 1
2015-01-02 10 0
2015-01-03 11 1

問題を読んで最初に思い出したのはまっきーさんの下記記事です。

カスタマイズしたらほぼ解答ですね。

それにしてもなんと緻密な記事でしょうか。あらためて感銘を受けました。

さて、私なりにアレンジした内容を紹介してみます。


【CSV Reader】

まっきーさんのCSV Readerノード説明はKNIME APの一世代前のものではありますが、有用性は揺らがないです。

さて今回どう使ったかを参考までに。

設定:

画像2

皆さんにKNIME Hubにworkflow (WF)を共有するので、CSVは.knwfファイル内に格納しました。相対パスなどについては前にも体験しましたね。

結果:

画像3

日付順に価格が入ってますね。
実はここで欠損値があったり、途中にひっかけがあるのかといろいろ確認してしまいました。第3回のデータ整形の課題でややこりていたので慎重になってます。

今回は何もトリックは仕掛けられていなかったです。


【Line Plot】

課題のストーリーに従ってLine Plotをしてみました。
ノードの説明はまっきーさんにお任せです。

デモデータが生々しくて素敵。


設定:

画像4

画像5

Areaは自動で範囲を絞り込む設定にしてみました。

結果:

画像6

可視化はここまでで、次は価格が変わった日をどう検出するかを検討しましょう。

画像7

【Lag Column】

文頭で紹介した時系列データ処理に関するまっきーさんの記事から引用します。

Lag Columnの使い方
KNIMEは基本列単位の処理ですが、このNodeは数少ない行の処理が可能なNodeです。 時系列データ処理や変化量を求める時に使用できます。
Sorterを事前に噛ませるのがおすすめです。

とのことですので、そのまま作ってみましょう。

画像8

Sorterは今回下記設定にしましたけど、元データがちゃんと日付順なので実は何も変化がないです。もし別のデータを使うときには役に立つかもですね。割愛します。

以下はLag Columnの設定と結果です。

設定:

画像9

結果:

画像10

2015-01-01では前日に価格がついてないので空白値になりますね。
2015-01-14で価格改定があったので、前日とは異なる値がPrice(-1)カラムに入力されています。
こうやって前日のデータを別カラムにすれば、KNIMEは列間の計算処理は得意なので時系列データが処理できます。

【欠損値の処理】

計算前に初日のデータだけは欠損値が生じているので処理します。今回は0円だったとしておきました。

画像11

ノード解説は迷いなくまっきーさんの記事を紹介しておきます。


設定:

画像12

結果は自明なので割愛します。


【Math Formulaでの真偽値判定】

今回は金額の多少を問わないで変化があれば”1”、変化がない時は”0”の真偽値を算出します。
TeachOpenCADDでも使いましたね。

画像13

設定:

画像14

結果:

画像15

変化があった時だけ、整数値“1”を返していますね。


【出力を整えて完成】

ColumnFilterの説明はもういいかなと思います。

一応設定と出力を掲示します。

画像16

画像17

出力データのデータ型までは指示がなかったので、日付もCSV Rreaderのデフォルトが文字列だったのでそのままにします。実は読み取り形式も選択できるので、本来そこで整えておくべきだったかなぁ。


【KNIME Hubへ回答を投稿して完了】

画像18


今回は設問が素直で逆に本当にこれで大丈夫?と不安になっています。
もし来週の模範解答を見てエーッてなったらまた楽しいかな。

画像19


おまけ:

【新展開の予感】

記事を書いている間にまっきーさんがとっくに投稿を終えてましたね。

しかも

official supporter として、Infocomの人の回答・解説が見たいなあ。

と煽りが入ってました。
でもこれ、公式が解答するのってハードル高いっすよね!模範解答に異論唱えちゃったりして。玄人の方々の掛け合いもまた新たな娯楽となりそうです。


【十人十色】

前回の模範解答は比較的私のやり方に近くホッとしました。


一方で、まっきーさんのWFはホンマに驚いた。

私があっさり断念した病名の名寄せをやり切って、本当のCDCの分析結果のような答えを出していました。
WFのメタノードを開いて見ることをお勧めします。
私の感想としては、「ああ、プロのデータサイエンティストってオフでも手は抜かないのね。」でした。

まっきーさんは例えばLine Plotノードの説明記事でも

やはりオプション全解説はかなり骨が折れますね、、

と言いつつやり切ってました。
あんなに詳しい解説は世界広しといえどもまっきーさんしかしてないと思います。

ヘタリアって知ってる人どれだけいらっしゃるか知らないんですが、まっきーさんはドイツなの⁉って思ってます。パスタぁ~♪


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