新型コロナ感染者数が一番ヤバい都市はどこか
人口100万人以上の政令指定都市の新型コロナウィルス感染者数を月ごとに時系列で追ってみました。Pandasの勉強をしようと思っていたらこんなデータを見つけたので遊んでみた結果です。
人口100人以上の政令指定都市は以下の11都市です。
まずは3月から11月までの各都市別新規感染者数。
8月に一度大きな山があったことがわかりますが、中でも大阪はぶっちぎりです。近隣の京都や神戸は比較的健闘しているようです。
大阪と札幌は増加傾向にあるのが怖いですね。
こちらは10万人ごとの新規感染者数。
8月には大阪以外にも福岡市が思いの他マズい状況にあったことが分かりました。次いで名古屋が割とピンチだったかも?しかしどちらもその後は抑え込んでいることがわかります。
それにしても大阪はマズいですね、人口補正をかけてもこの通りです。これは周辺地域が気が気でないでしょう。札幌と大阪の二都市がなぜ増加傾向にあるのかは興味深い問題です。
以下はやったこと。
もっとすっきりした風に書きたいので、有識者の添削をお待ちしております。
まずはデータを取得
import pandas as pdimport numpy as npimport datetime as dtimport matplotlib.pyplot as plt
時系列データを追うために日付をdatetimeに変換
df['確定日'] = pd.to_datetime(df['確定日'])
各都市の人口は別場所からとってきて辞書型に格納
cities = ['yokohama', 'osaka', 'nagoya', 'sapporo', 'fukuoka', 'kawasaki', 'kobe', 'kyoto', 'saitama', 'hiroshima', 'sendai']numbers = [3756412, 2750995, 2328138, 1972978, 1602633, 1539082, 1516638, 1457856, 1318753, 1198664, 1091992]populations = dict(zip(cities, numbers))
各都市の新規感染者数はこんな感じて取得。query()がなぜかdatetimeと仲悪かったんじゃ……
def get_ts_list(city):df_city = df[(df['居住市区町村'] == city)]ts_list =month = 3while month < 12 :date = "2020/" + str(month) + "/1"date2 = "2020/" + str(month+1) + "/1"p = df_city['確定日'] >= dt.datetime.strptime(date, "%Y/%m/%d")s = df_city['確定日'] >= dt.datetime.strptime(date2, "%Y/%m/%d")new = p.sum()-s.sum()ts_list.append(new)month +=1return ts_list
新規感染者数を10万人あたりで計算する。
def get_ts_per_list(ts, city):ts_per =for p in ts:per = round(p/populations[city]*100000, 1)ts_per.append(per)return ts_per
グラフ描画はこんな感じ。データが多いので画像を拡大し凡例を出しています。
plt.figure(figsize=(6, 3), dpi=200)plt.plot(month, sapporo_ts, marker="o", color = "#E60012", linestyle = "--", label="Sapporo")plt.plot(month, yokohama_ts, marker="o", color = "#DFD000", linestyle = "--", label="Yokohama")plt.plot(month, kawasaki_ts, marker="o", color = "#009944", linestyle = "--", label="Kawasaki")plt.plot(month, saitama_ts, marker="o", color = "#0068B7", linestyle = "--", label="Saitama")plt.plot(month, nagoya_ts, marker="o", color = "#1D2088", linestyle = "--", label="Nagoya")plt.plot(month, kyoto_ts, marker="o", color = "#920783", linestyle = "--", label="Kyoto")plt.plot(month, osaka_ts, marker="v", color = "#C7000B", linestyle = "--", label="Osaka")plt.plot(month, kobe_ts, marker="v", color = "#E8AC51", linestyle = "--", label="Kobe")plt.plot(month, fukuoka_ts, marker="v", color = "#0068B7", linestyle = "--", label="Fukuoka")plt.plot(month, hiroshima_ts, marker="v", color = "#39A869", linestyle = "--", label="Hiroshima")plt.legend(loc="upper left", fontsize=8)