DataPortalのレポート作成を厚労省公開の新型コロナウイルス感染症関連データを使って試してみた

DataPortalにてデータ量が一定以上あるレポート作成を試す目的にて、日次で蓄積されている厚労省公開の新型コロナウイルス感染症関連データを使ってみました。
2022.02.26

DataPortalでレポート作成の練習を行うには何かしらのデータが必要となってきますが、一定以上の量を持ちつつ構成にずれがないパブリックなデータはあまり目にしません。ランダムで作成する手もありますが、量を作るとなると中々大変です。

何かないものかと探していたところ、新型コロナウイルス感染症の新規陽性者数推移データ辺りが扱いやすいのではないか、と提言を受けました。日数の蓄積もありつつ公開されているということもあり、試しに使ってレポートにしてみました。

新型コロナウイルス感染症の新規陽性者数推移

厚生労働省が公開しているデータで、他に以下のような種類もあります。今回新規陽性者数推移を使った理由は、一番目に表示されていたからというものです。

  • 入院治療等を要する者等推移
  • 死亡者数(累積)
  • 重症者数の推移

データを加工する

ダウンロードしたものをそのままDataPortalで取り扱ってみようと試みましたが、そのままだとグラフ化が中々辛い構成になっています。

日付,全地域数値,県1数値,県2数値,,,,

シンプルに、日付,地域,数値 の構成に組み替えるべく、簡単なコードをこしらえてみました。

import sys
import csv


args = sys.argv
header = None
with open(args[1], 'r') as read_csv:
    with open(args[2], 'w') as write_csv:
        writer = csv.writer(write_csv)
        for line in read_csv.readlines():
            data = line.strip().split(',')
            if not header:
                header = data
                writer.writerow(['Date', 'Area', 'Count'])
                header.pop(0)
                header.pop(0)
                continue
            date = data.pop(0)
            data.pop(0)
            area_index = 0
            for count in data:
                print(area_index)
                writer.writerow([date, header[area_index], count])
                area_index += 1

各日付の全地域合計分については、計算上で重複となってしまうため除外しています。使い方は以下の通り。

python replace.py newly_confirmed_cases_daily.csv replace.csv

出力結果は以下のようになります。

Date,Area,Count
2020/1/16,Hokkaido,0
2020/1/16,Aomori,0
2020/1/16,Iwate,0
2020/1/16,Miyagi,0
2020/1/16,Akita,0
2020/1/16,Yamagata,0
2020/1/16,Fukushima,0
2020/1/16,Ibaraki,0
2020/1/16,Tochigi,0
2020/1/16,Gunma,0
2020/1/16,Saitama,0
2020/1/16,Chiba,0
2020/1/16,Tokyo,0

DataPortalにてレポート化

レポートを新規作成し、データソースにSpreadsheetを指定して追加します。

データソースの接続構成は以下の図のような感じです。

フィールド構成は以下の図の通り。

グラフの構成は以下のような設定にて、

以下のような表示となります。

あとがき

今回のグラフ化は途中でコードベースでのデータ構成変更を行っており、もし定期更新をしたい場合はCloudFunction等を利用して1次データの加工が必要となります。

とりあえずやってみたい場合は、色々凝りすぎずにまずは手作業での編集にて可視化を試してみるとよいかもしれません。