新型コロナ陽性者数をQuickSightで予測してみた

# はじめに
AWSのBIツールQuickSightにて、ノーコードで機械学習を用いた予測ができるとのことで
最近よく目にする新型コロナ陽性者数で試してみました。
また、データの自動更新についても試してみました。

# データソース
新型コロナ陽性者数のデータはオープンデータとして厚生労働省のサイトで公開されています。
https://www.mhlw.go.jp/stf/covid-19/open-data.html

この中から[陽性者数](https://www.mhlw.go.jp/content/pcr_positive_daily.csv)をダウンロードして使います。

## 方針
ダウンロードしたファイルpcr_positive_daily.csvを直接QuickSight(SPICE)に取り込みでもいいのですが、
ここではS3に保存してそれをQuickSightのSPICEに取り込むようにします。
理由：
このデータは日々更新されていくので、この出来上がったグラフも最新データに追随していかせたいのです。
データソースがS3だと自動更新させて追随させることができるのですが、
ファイルのアップロードだと自動更新できないのでこうします。
自動更新の方法については後述。

## S3にアップロード
手動でダウンロードしたファイルをS3にアップロードします。
今回は以下の場所にアップロードしたとします。
s3://dummy_bucket/hogehoge/pcr_positive_daily.csv

## マニフェストファイルの準備
pcr_positive_daily.csvを開くと、以下のようなデータであることがわかります。

```csv:pcr_positive_daily.csv
日付,PCR 検査陽性者数(単日)
2020/1/16,1
2020/1/17,0
2020/1/18,0
以下略
```

ですので以下のような記述のマニフェストファイルを用意します。

```json:pcr_positive_daily.json
{ 
    "fileLocations": [
          {"URIs": ["s3://dummy_bucket/hogehoge/pcr_positive_daily.csv"]}
     ],
     "globalUploadSettings": {
         "format": "CSV",
         "delimiter": ",",
         "containsHeader": "true"
    }
}
```
それぞれの項目の意味などはこちらを参照してください。
[QuickSight ＞ ユーザーガイド ＞ Amazon S3 のマニフェストファイルでサポートされている形式](https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/supported-manifest-file-format.html)

## QuickSightのバケット許可
QuickSightにS3のバケットdummy_bucketにアクセスできるよう許可を与えます。
QuickSight右上のアイコン ＞ QuickSightの管理 ＞ セキュリティとアクセス権限
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436247/2622f1d7-94a5-db70-3d3a-e2d88f8df38f.png)
**QuickSightのAWSサービスへのアクセス** の **追加または削除する** をクリック
Amazon S3の説明文にある **詳細** のリンクをクリック
S3バケットを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436247/8f538717-d799-f1d9-b8f1-cc9c30e89806.png)

目的のバケットであるdummy_bucketにチェックを入れて **完了** します。

## 取り込み
QuickSightの左のサイドバーのデータセット ＞ 新しいデータセット ＞ S3
データソース名は適当に（ここではcovid19_allにしています）。
マニフェストファイルのアップロードでは先ほど作成したマニフェストファイルを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436247/48d9bbd4-52ea-40d9-1db8-b5f40c0a8658.png)


接続ができたら確認してみましょう。
、、、日付カラムが文字列型として認識されてしまってますね。
データ型を指定してあげましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436247/9b962ce4-9d9a-37d0-f6b8-94dac4201559.png)


# 分析
先ほど作ったデータソースをもとに分析を作り、そこに今回の目的である予測を追加します。

## グラフ化
X軸に日付、値にPCR検査陽性者数を指定して折れ線グラフを描画します。
ラベルのフォーマットなどをいい感じに整えましょう。

## 予測を追加
グラフ右上の折り畳みメニュー＞・・・＞予測を追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436247/1ac7cb4c-16bb-453d-114e-c9e6e09bab56.png)

こんな感じで予測が表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436247/8ff68e75-d315-f987-4887-8834fd385f56.png)



# 自動化
元のデータが更新に追随してQuickSightも更新されるよう、自動化します。
Lambdaでデータを取得して、データセットを更新するように設定します。

## Lambda
Lambdaで厚生労働省のサイトからデータをダウンロードしてS3に保存するように記載します。
保存先は先ほどマニフェストファイルで指定した
s3://dummy_bucket/hogehoge/pcr_positive_daily.csv
になるようにします。
詳細は割愛。
トリガーで日次バッチとして動くように設定します。

## データセット
QuickSightのTopからデータセットを開き、
先ほど作ったcovid19_allのデータセットを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436247/d8e6a017-3c4b-04fe-3dda-0baa7600958f.png)
**更新スケジュール** から日次で動くようにスケジュールを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436247/695c1c0d-c10f-a6da-9d7e-7ad0d27411a3.png)

# おわりに
以上、機械学習に関する知識なしに簡単に予測のグラフを描画できました。
長々と書きましたが、グラフさえ描画できてしまえば、
メニューから予測を追加するだけと非常に簡単なので利用機会が出てきそうです。