NHKの新型コロナデータ

NHKの新型コロナウイルス特設サイトの下のほうからリンクされている nhk_news_covid19_prefectures_daily_data.csv というオープンデータは、毎日の都道府県ごとの感染者数や死者数をまとめたものです。これを Python の pandas で読み込んで操作してみましょう。

注意すべきは「日付」という欄に 2022/8/18 のような形式で日付が入っていることです。これを単に文字列として読むと、2021/9/302021/10/1 の順序関係が逆になったりして、面倒です。これは pandas の「日付」型に変換して読む必要があります。読み込んで、最後の5行だけを表示してみます:

import pandas as pd

df = pd.read_csv("nhk_news_covid19_prefectures_daily_data.csv", parse_dates=["日付"])
df.tail()
              日付  都道府県コード 都道府県名  ...  各地の死者数_1日ごとの発表数  各地の死者数_累計  各地の直近1週間の人口10万人あたりの感染者数
44457 2022-08-14       47   沖縄県  ...                0        537                  1802.27
44458 2022-08-15       47   沖縄県  ...                5        542                  1766.43
44459 2022-08-16       47   沖縄県  ...                0        542                  1768.20
44460 2022-08-17       47   沖縄県  ...                6        548                  1752.80
44461 2022-08-18       47   沖縄県  ...                7        555                  1782.24

[5 rows x 8 columns]

列名:

df.columns
Index(['日付', '都道府県コード', '都道府県名', '各地の感染者数_1日ごとの発表数', '各地の感染者数_累計',
       '各地の死者数_1日ごとの発表数', '各地の死者数_累計', '各地の直近1週間の人口10万人あたりの感染者数'],
      dtype='object')

都道府県ごとの感染者数の合計を求めるために、都道府県コードでグループ分けして、「各地の感染者数_1日ごとの発表数」の合計を求めてみましょう:

df.groupby("都道府県コード")["各地の感染者数_1日ごとの発表数"].sum()
都道府県コード
1      572833
2      117029
3       73927
(以下略)

データの中にも「各地の感染者数_累計」があるので、そちらを取り出してみましょう。日付を第1キー、都道府県コードを第2キーとしてソートし、都道府県名と感染者数累計だけに絞って、最後の47行だけを取り出せばうまくいきそうです:

df.sort_values(["日付", "都道府県コード"])[["都道府県名", "各地の感染者数_累計"]].tail(47)
      都道府県名  各地の感染者数_累計
945     北海道      572833
1891    青森県      117029
2837    岩手県       73927

(以下略)

「各地の直近1週間の人口10万人あたりの感染者数」をプロットします:

import matplotlib.pyplot as plt

df1 = df.sort_values(["日付", "都道府県コード"]).tail(47).sort_values("各地の直近1週間の人口10万人あたりの感染者数")
plt.figure(figsize=(8, 10))
plt.barh(df1["都道府県名"], df1["各地の直近1週間の人口10万人あたりの感染者数"])
plt.xlabel("各地の直近1週間の人口10万人あたりの感染者数")
各地の直近1週間の人口10万人あたりの感染者数