シャローム!Sato-Gです。
先週の土曜日に自宅からもっと近いスーパーLでコロナ感染者が出たために閉鎖となってしまった。
もう一つスーパーOがあるんだけど、コーヒー中毒者の僕としては、コーヒー豆の選択肢が多いスーパーLが開いてくれないと困る。
しかし、火曜日に行ってみたらもう開いていた。
しかも普通にお客さんもたくさん!
なんだか拍子抜けだな。
本当に安全は確保されたのかわからないけど、もうウィズコロナなんだからと割り切ることにしているんだろうね。お店もお客さんも…
というわけで、今日はおいしいコーヒーを淹れている。

GOTOキャンペーンは東京もOKということなったけど、7月の段階で東京の感染者が100人を超える日が出て「これは大変だ」って言ってたのに、一旦500人近くまで増加したりすると、100人超えする日が続いても世間もあまり騒ぎ立てなくなったしね。
多少の変化があっても感覚が麻痺しちゃっているのかなあ。
では実際どうなのか、今回は移動合計という計算方法で検証してみる。

1. データについて

ジャッグジャパンさん提供のファイルを取り込もうとしたら、発症日に”8月16日”とか不正な値が入っていてエラーが発生。
そんなデータが数件あるようで、メンテナンスも追いついていないのかな。
ダウンロードしてデータを書き換えて取り込んでみた。

2. 移動合計の推移を求める

【Pulse】PulseでCOVID-19の感染者増加率のアラートを出してみる でご紹介した方法は最新の日付から1週間の累計を取っていた。
しかし、この方法では推移を見ることはできない。
では1週間単位の累計の推移を見たいという時はどうするのか?

この方法は移動合計と呼ばれ、例えば季節変動に左右されない傾向を見るような場合に利用される。Zチャートなども移動合計を使用して作成する。

3. 累計カレンダーで移動合計の推移グラフを作成する

3.1 累計カレンダーテーブルの作成

累計カレンダーを作成するには、

SELECT Table1.Column1,Table2.Column2
FROM Table1,Table2
WHERE …

という基本構文を使用する。このSQLではTable-1とTable2の組み合わせの全パターンが抽出されるので、WHERE句で取得したいパターンの条件を指定する。
作成したSQLは以下のとおり

SELECT  date AS 累計年月日,
        date + ((rownum-1) * (-60*60*24)) AS 年月日,
        GetYear(date + ((rownum-1) * (-60*60*24)))*10000 + GetMonth(date + ((rownum-1) * (-60*60*24)))*100 +          GetDay(date + ((rownum-1) * (-60*60*24))) AS 年月日KEY,
        rownum - 1 AS Counter
FROM
(SELECT  DISTINCT d1.年月日 AS date,
        rownum
FROM [カレンダー] d1,
    (
    SELECT
        RANKASC(年月日KEY) AS rownum
    FROM [カレンダー]
    ) d2
WHERE rownum <= 7
) d3
ORDER BY date,Counter

解説しよう。
このSELECT文ではd3というテーブルを
カレンダーテーブルから年月日とカレンダーから取得したカウンターであるrownumの組み合わせを取得するが、rownumが7以下として日付であるdateに対して1~7のカウンターがつくテーブルができあがる。

(SELECT  DISTINCT d1.年月日 AS date,
        rownum
FROM [カレンダー] d1,
    (
    SELECT
        RANKASC(年月日KEY) AS rownum
    FROM [カレンダー]
    ) d2
WHERE rownum <= 7
) d3

以下のSQLでdateを累計年月日として、カウンターであるrownumの分遡った日付の組み合わせができあがる。Counterはrownum-1とし、当日は0、それから遡って6がMAXとなる。

SELECT  date AS 累計年月日,
        date + ((rownum-1) * (-60*60*24)) AS 年月日,
        GetYear(date + ((rownum-1) * (-60*60*24)))*10000 + GetMonth(date + ((rownum-1) * (-60*60*24)))*100 +          GetDay(date + ((rownum-1) * (-60*60*24))) AS 年月日KEY,
        rownum - 1 AS Counter
FROM d3
ORDER BY date,Counter

できあがった累計カレンダーテーブルは以下のような構造となる。

3.2 リレーションの設定

カレンダーテーブルと累計カレンダーテーブルは年月日KEYでリレーション設定を行い、以下のデータモデルを完成させる。

3.3 移動合計グラフの作成

棒グラフで移動合計のグラフを作成してみよう。
カテゴリは累計年月日、値は7日移動合計と人数を設定する。
ここでCounterはフィルターとして使用するので、以下の数式で[Counter]にフィルター設定を行う。
(SUM([人数]),[Counter])
Counterのフィルターは0~6で、全て選択すると当日含め7日間の合計が計算される。これが7日移動合計だ。
フィルターで0を選択すると、当日の感染者人数が計算される。

グラフは棒グラフとし、7日移動合計の「系列の種類」を「エリア」に設定し、グラフを完成させる。

うーん、これで見る限り、9月10日以降はまた増加傾向にあるように見えるぞ。
GOTOキャンペーンの拡大のニュースはかなり解放的な気分にさせると思うけど、4連休は大丈夫なのか?
この結果は10月頭くらいには出てくると思う。

4. まとめ

今回は累計カレンダーで遡りのカウンターを作成し、移動合計を求める方法を紹介した。
日別の感染者数だけみるとデコボコしているので傾向がわかりにくいが、移動合計で見ると傾向がわかりやすくなるよね。
次回はこれを応用して、移動年計を求めてみる。

最後に4連休は気を抜かずに楽しく過ごしましょう!
ではまた!

この記事が気に入ったら
いいね ! しよう