【追記】 都道府県のデータは厚労省で一括して毎日16時ごろ発表されることになり、NHKのデータは 2022-09-27 で終了しました。
NHKの新型コロナウイルス特設サイトの下のほうからリンクされている nhk_news_covid19_prefectures_daily_data.csv というオープンデータは、毎日の都道府県ごとの感染者数や死者数をまとめたものです。これを Python の pandas で読み込んで操作してみましょう。
注意すべきは「日付」という欄に 2022/8/18
のような形式で日付が入っていることです。これを単に文字列として読むと、2021/9/30
と 2021/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万人あたりの感染者数")