デジタル推進課

KNIME・Excel Macro・Power Automateなど日々の業務で使用できる自動化ツールを中心に書き綴ります

KNIME - 累積を使ってコロナ陽性者数推移を出してみよう!- Moving Aggregation

f:id:makkynm:20210814161129p:plain

 

はじめに 

こんにちは、自動化大好きまっきーです。今まで残業時間というみなさんに身近なテーマでNodeを解説してきましたが、今回は最近身近な話題となった「コロナ陽性者数」のデータを使用して、KNIMEで累積を取る方法について解説したいと思います。

 

 今回のテーマ ~累積 Moving Aggregation~

f:id:makkynm:20210814150232p:plain

 今回のテーマ ~累積 Moving Aggregation~

 

覚えてほしいこと

累積する前にSort!Groupごとに分ける!

 

やりたいこと

コロナ陽性者数の推移を2種類の方法で累積・可視化してみたいと思います。

陽性者数のデータは厚生労働省のホームページからダウンロードできます。リンク

オープンデータ|厚生労働省

 

やりたいこと1 - 全国の感染者数で累積

Prefecture =ALL(全国のデータ)にデータを絞って、日付順に累積を取ることで、全国のコロナ陽性者の累積を算出したいと思います。

f:id:makkynm:20210814150431p:plain

やりたいこと1 - 全国の感染者数で累積

 

やりたいこと2 - 都道府県ごとの感染者数で累積

 

都道府県ごと感染者数の累積を取り、最後棒グラフにて日ごとの全国の感染者推移を各都道府県を反例として表示したいと思います。

f:id:makkynm:20210814150454p:plain

やりたいこと2 - 都道府県ごとの感染者数で累積

 

事前準備

データの中身の確認 - CSV Reader

まずはCSV Readerで元ファイルを読み込んでみましょう。2点注意点が見つかります。

f:id:makkynm:20210814151530p:plain

データの中身の確認 - CSV Reader
注意点1 - 都道府県のカラムにALL(全国)のデータが含まれている

データの中身に注目すると、都道府県のカラムに、各都道府県に加えてALLという全国のデータが含まれていることがわかります。これは累積を計算する上で注意が必要ですね。

全国のデータを求めたいときはIncludeで、都道府県のデータを求めたいときはExcludeでFilteringしてあげると綺麗ですね。Row Filter

f:id:makkynm:20210814152134p:plain

注意点1 - 都道府県のカラムにALL(全国)のデータが含まれている

 

注意点2 - Int型で読み込まれている

みなさん、これがなぜ注意点なのか分かりますか?

GroupByやpivoting等でも同じ注意が必要なので、KNIMEをよく触っている人は分かるかもしれません。

質問を変えて見ましょう。Int型、Double型、Long型の違いについて答えられますか?

今回の注意点はここからきています。

 

答えは桁数です。int型は32bitまでしか扱えないので、最大値は2147483647です。GroupByやPivoting、Moving AggregationなどでSumを取ると、この最大値を超えてしまって計算できなくなる場合があります。それを防ぐため、足し合わせて大きな数値になる場合があるときは事前にDouble型やLong型に変換した上で足しあげると予期せぬエラーを防ぐことができます。

 

ちなみにInt型からDouble型に変換する際は、Math Formulaを使用しています。

f:id:makkynm:20210814151926p:plain

Int型からDouble型に変換 - int to double

 

データのグループ化 - Pivoting 

Moving Aggregationは単純に上から足し上げていきます。都道府県ごとに足し上げようとしても、都道府県のデータが混在していたらきちんと累積を取ることができません。それを防ぐには、PivotingRow Filterを利用してあらかじめ累積すべきデータを分離させておく必要があります。

今回のような、都道府県ごとに求めたいときはPivotingを使用して一括で分離するのがお勧めです。分離させたい要素をPivotのカラム置くのがポイントです。

f:id:makkynm:20210814152621p:plain

データのグループ化 - Pivoting 

f:id:makkynm:20210814152641p:plain

データのグループ化 - Pivoting 

f:id:makkynm:20210814152654p:plain

データのグループ化 - Pivoting 

 

データの並び替え - Sorter 

累積でもう一つ重要な点が並び替えです。累積は上から単純に足しあげるだけなので、事前に並び替えておく必要があります。こんなときはSorterを使用していきましょう。今回は正しく並び替えられるよう、Dateのカラムをまず文字列(String)型から日付型に変換した後、Sorterを使用して並び替えています。

Date型に変換するときも1点注意ですね。今回の日付はyyyy/MM/ddではありません。つまり、例えば7月が、07という書き方になっておらず、単純に7という書き方になっています。

f:id:makkynm:20210814153344p:plain

String型からDate型に変換

f:id:makkynm:20210814153448p:plain

必ずSorterで事前に並び替え

 

Moving Aggregationの使い方

データの可視化にはBar Chartが便利です。行の先頭から累積していくNodeです。

KNIMEの中では珍しい、行の順番が重要なNodeになので、このNodeを使用する前は必ずSorterで正しい順番に並んでいるかを確認しましょう。

また、グループにも注意が必要です。ただひたすらに行の上から累積を計算してしまうので正しく累積を計算したい場合は、累積を計算したい順番だけでなく、Pivotingなどでグループごとにデータを整形してからこのMoving Aggregationを使用する必要があります。

Workflow - Moving Aggregation

f:id:makkynm:20210814152730p:plain

Workflow - Moving Aggregation

Workflowは下記リンクからダウンロードできます。

累積 - Moving Aggregation – KNIME Hub

Confirm - Moving Aggregation

今回はMoving Aggregationの結果だけでなく、棒グラフの結果も見てみましょう。Bar Chartとのコンビがよく分かると思います。

やりたいこと1 - 全国の感染者数を累積

1日ごと累積されていることがわかりますね。また、PrefectureをALLでFilteringをかけていることも重要です。

f:id:makkynm:20210814150431p:plain

やりたいこと1 - 全国の感染者数で累積

第何波と言われているのが、自分で可視化してみるとよく分かりますね。

f:id:makkynm:20210814153747p:plain

やりたいこと1 - 全国の感染者数で累積

 

やりたいこと2 - 都道府県ごとに感染者数を累積

続いて都道府県別です。カラム数が多くなりすぎるので元カラムは割愛しましたが、都道府県別に累積になっていることがわかります。

f:id:makkynm:20210814150454p:plain

やりたいこと2 - 都道府県ごとの感染者数で累積

全体の合計は先ほど出した全国と変わらないはずです。都道府県別に色が付くようになったので、もう少し詳細な情報も得られる形になっています。

政府や各県の動きをここにプロットしてみたら、きっかけが分かるかもしれませんね。

f:id:makkynm:20210814150232p:plain

やりたいこと2 - 都道府県ごとの感染者数で累積

 

Configure - Moving Aggregation

やりたいこと1も2も、累積の部分のConfigureはほぼ変わらないので一緒に解説します。

f:id:makkynm:20210814154642p:plain

Configure - Moving Aggregation

唯一、都道府県別のConfigureはManual Aggregationで1つ1つ指定していたら日が暮れてしまうので、Type Based Aggregationなどで一括で指定することをオススメします。

f:id:makkynm:20210814154907p:plain

Configure - やりたいこと2
Step1 - Cumulative computation - 累積機能ON

累積をするには、このCumulative computation にチェックを入れる必要があります。これにより、上にあるWindowなどの設定は不要になるので無視できます。

 

Step2 - Aggregation settings - 累積カラムの設定

GroupByなどの設定と全く同じですね。今回累積なのでSumにしましたが、他の計算方法を適用することももちろん可能です。

 

Step3 - その他のOption

その他のOptionを解説します。

  • Remove aggregation columns - 累積元カラムを削除する
  • Remove retained columns - 累積の計算に使用されなかったカラムを削除する

下の方の設定はGroupByなどと同じなので解説しません。

 

 ちょっと一言

Moving Averageのような使い方

今回は累積の使い方について説明しましたが、オプションで累積を指定しなければ、Moving Averageと同じような使い方ができます。Moving Averageは平均の種類がたくさんありましたが、Moving AggregationはSumやCountなど、GroupByと同じようなオプションが使えますね。 

f:id:makkynm:20210814154531p:plain

Moving Averageのような使い方

 

おわりに

コロナ陽性者の推移情報って案外簡単にダウンロードできるものなんですね。最近コロナについて気になるなーという方、マスコミのデータではなくぜひ自分でデータを加工して分析してみると新たな発見があるかもしれません。

そういえば、以前KNIME社からいただいた、Contributor of the monthの粗品が家に届きました。I love Nodesと書いてあるTシャツとメモ帳でした!ありがとうございます〜

そろそろ記事にするネタがなくなっています。独力の限界ですかね。。自分の頭の中曝け出した気分です、、

講演依頼などお待ちしてます、、笑

 

 

 

KNIME Hubワークスペース

makkynm/Public – KNIME Hub

Twitter アカウント

まっきー | デジタル推進課 (@makkynm) | Twitter

 

KNIMEに関する本

KNIMEに関する日本語の本って今これくらいしかないと思うんですよね、、

本がいいなーと言う人はぜひ試してみてください。

 

参考リンク