はじめに
こんにちは、自動化大好きまっきーです。今まで残業時間というみなさんに身近なテーマでNodeを解説してきましたが、今回は最近身近な話題となった「コロナ陽性者数」のデータを使用して、KNIMEで累積を取る方法について解説したいと思います。
今回のテーマ ~累積 Moving Aggregation~
覚えてほしいこと
累積する前にSort!Groupごとに分ける!
やりたいこと
コロナ陽性者数の推移を2種類の方法で累積・可視化してみたいと思います。
陽性者数のデータは厚生労働省のホームページからダウンロードできます。リンク
やりたいこと1 - 全国の感染者数で累積
Prefecture =ALL(全国のデータ)にデータを絞って、日付順に累積を取ることで、全国のコロナ陽性者の累積を算出したいと思います。
やりたいこと2 - 都道府県ごとの感染者数で累積
各都道府県ごと感染者数の累積を取り、最後棒グラフにて日ごとの全国の感染者推移を各都道府県を反例として表示したいと思います。
事前準備
データの中身の確認 - CSV Reader
まずはCSV Readerで元ファイルを読み込んでみましょう。2点注意点が見つかります。
注意点1 - 都道府県のカラムにALL(全国)のデータが含まれている
データの中身に注目すると、都道府県のカラムに、各都道府県に加えてALLという全国のデータが含まれていることがわかります。これは累積を計算する上で注意が必要ですね。
全国のデータを求めたいときはIncludeで、都道府県のデータを求めたいときはExcludeでFilteringしてあげると綺麗ですね。Row Filter
注意点2 - Int型で読み込まれている
みなさん、これがなぜ注意点なのか分かりますか?
GroupByやpivoting等でも同じ注意が必要なので、KNIMEをよく触っている人は分かるかもしれません。
質問を変えて見ましょう。Int型、Double型、Long型の違いについて答えられますか?
今回の注意点はここからきています。
答えは桁数です。int型は32bitまでしか扱えないので、最大値は2147483647です。GroupByやPivoting、Moving AggregationなどでSumを取ると、この最大値を超えてしまって計算できなくなる場合があります。それを防ぐため、足し合わせて大きな数値になる場合があるときは事前にDouble型やLong型に変換した上で足しあげると予期せぬエラーを防ぐことができます。
ちなみにInt型からDouble型に変換する際は、Math Formulaを使用しています。
データのグループ化 - Pivoting
Moving Aggregationは単純に上から足し上げていきます。都道府県ごとに足し上げようとしても、都道府県のデータが混在していたらきちんと累積を取ることができません。それを防ぐには、PivotingやRow Filterを利用してあらかじめ累積すべきデータを分離させておく必要があります。
今回のような、都道府県ごとに求めたいときはPivotingを使用して一括で分離するのがお勧めです。分離させたい要素をPivotのカラム置くのがポイントです。
データの並び替え - Sorter
累積でもう一つ重要な点が並び替えです。累積は上から単純に足しあげるだけなので、事前に並び替えておく必要があります。こんなときはSorterを使用していきましょう。今回は正しく並び替えられるよう、Dateのカラムをまず文字列(String)型から日付型に変換した後、Sorterを使用して並び替えています。
Date型に変換するときも1点注意ですね。今回の日付はyyyy/MM/ddではありません。つまり、例えば7月が、07という書き方になっておらず、単純に7という書き方になっています。
Moving Aggregationの使い方
データの可視化にはBar Chartが便利です。行の先頭から累積していくNodeです。
KNIMEの中では珍しい、行の順番が重要なNodeになので、このNodeを使用する前は必ずSorterで正しい順番に並んでいるかを確認しましょう。
また、グループにも注意が必要です。ただひたすらに行の上から累積を計算してしまうので正しく累積を計算したい場合は、累積を計算したい順番だけでなく、Pivotingなどでグループごとにデータを整形してからこのMoving Aggregationを使用する必要があります。
Workflow - Moving Aggregation
Workflowは下記リンクからダウンロードできます。
累積 - Moving Aggregation – KNIME Hub
Confirm - Moving Aggregation
今回はMoving Aggregationの結果だけでなく、棒グラフの結果も見てみましょう。Bar Chartとのコンビがよく分かると思います。
やりたいこと1 - 全国の感染者数を累積
1日ごと累積されていることがわかりますね。また、PrefectureをALLでFilteringをかけていることも重要です。
第何波と言われているのが、自分で可視化してみるとよく分かりますね。
やりたいこと2 - 都道府県ごとに感染者数を累積
続いて都道府県別です。カラム数が多くなりすぎるので元カラムは割愛しましたが、都道府県別に累積になっていることがわかります。
全体の合計は先ほど出した全国と変わらないはずです。都道府県別に色が付くようになったので、もう少し詳細な情報も得られる形になっています。
政府や各県の動きをここにプロットしてみたら、きっかけが分かるかもしれませんね。
Configure - Moving Aggregation
やりたいこと1も2も、累積の部分のConfigureはほぼ変わらないので一緒に解説します。
唯一、都道府県別のConfigureはManual Aggregationで1つ1つ指定していたら日が暮れてしまうので、Type Based Aggregationなどで一括で指定することをオススメします。
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と同じようなオプションが使えますね。
おわりに
コロナ陽性者の推移情報って案外簡単にダウンロードできるものなんですね。最近コロナについて気になるなーという方、マスコミのデータではなくぜひ自分でデータを加工して分析してみると新たな発見があるかもしれません。
そういえば、以前KNIME社からいただいた、Contributor of the monthの粗品が家に届きました。I love Nodesと書いてあるTシャツとメモ帳でした!ありがとうございます〜
そろそろ記事にするネタがなくなっています。独力の限界ですかね。。自分の頭の中曝け出した気分です、、
講演依頼などお待ちしてます、、笑
KNIME Hubワークスペース
Twitter アカウント
まっきー | デジタル推進課 (@makkynm) | Twitter
KNIMEに関する本
KNIMEに関する日本語の本って今これくらいしかないと思うんですよね、、
本がいいなーと言う人はぜひ試してみてください。
参考リンク
- 厚生労働省 コロナ陽性者数元データ:オープンデータ|厚生労働省
- KNIME Example Workflow(英語):
Moving Aggregation – KNIME Hub