iMind Developers Blog

iMind開発者ブログ

Pythonで新型コロナの感染者数推移を確認する(都道府県データ)

概要

COVID-19の国内の感染状況について、自分で手を動かしてデータを確認する為のサンプルコードです。

全国データ版はこちら

感染者数のデータ

下記に掲載されているCSVファイルを利用。

https://github.com/kaz-ogiwara/covid19

都道府県ごとの数値を取り扱ったprefectures.csvとprefectures-2.csvを使って分析をします。

都道府県データの読込み

2ファイルのデータを読み込んでマージします。

import datetime
import pandas as pd
import matplotlib
from matplotlib import pylab as plt

%matplotlib inline

# フォント設定(環境によってここに指定する値は異なります)
from matplotlib import rcParams
rcParams['font.family'] = 'sans-serif'
rcParams['font.sans-serif'] = ['MS PGothic', 'Osaka', 'Hiragino Sans', 'TakaoGothic']

# csvデータの取得
prefectures = pd.read_csv('https://raw.githubusercontent.com/kaz-ogiwara/covid19/master/data/prefectures.csv')
prefectures2 = pd.read_csv('https://raw.githubusercontent.com/kaz-ogiwara/covid19/master/data/prefectures-2.csv')

# 両データのマージ
# 都道府県の名前が途中から末尾の県の有無に変更があるので最初2文字をキーとする
prefectures['pref'] = prefectures['都道府県'].apply(lambda x: x[:2])
prefectures.drop('都道府県', axis=1, inplace=True)
prefectures2['pref'] = prefectures2['都道府県'].apply(lambda x: x[:2])
df = prefectures2.merge(prefectures, on=['年', '月', '日', 'pref'], how='left').reset_index(drop=True).fillna(0)

# 日付をdatetimeに変換
def to_datetime(row):
    return datetime.datetime(row['年'], row['月'], row['日'])
df['日付'] = df[['年', '月', '日']].apply(to_datetime, axis=1)

# 今回使わないカラムを落としておきます
df.drop(['年', '月', '日'], axis=1, inplace=True)

# カラム名を変更
df.rename(columns={'患者数(2020年3月28日からは感染者数)': '感染者数'}, inplace=True)

# 昔のデータは使いづらそうなので3/28からにしておく
df = df[df['日付'] >= '2020-03-28'].reset_index(drop=True).copy()

# 日付をindexに設定
df.set_index('日付', inplace=True)

マージで県名に差異があったりと少し手こずったので、主に分析したい月のデータ件数が正しいことを確認しておきます。

下記は4月分データが30日×47都道府県分あることをチェック。

len(df[(df.index >= '2020-04-01') & (df.index <= '2020-04-30')]) / 30
    #=> 47

生成されたデータの中身はこんな感じです。

df.head()
日付 都道府県 PCR検査陽性者数 PCR検査人数 陽性率 検査人数の集計期間に対応する陽性者数 pref 感染者数 現在は入院等 退院者 死亡者
2020-03-28 北海道 172 1976.0 0 0.0 北海 172.0 44.0 121.0 7
2020-03-28 青森県 6 124.0 0 0.0 青森 6.0 6.0 0.0 0
2020-03-28 岩手県 0 50.0 0 0.0 岩手 0.0 0.0 0.0 0
2020-03-28 宮城県 2 187.0 0 0.0 宮城 2.0 1.0 1.0 0
2020-03-28 秋田県 4 211.0 0 0.0 秋田 4.0 2.0 2.0 0

全国データの読込み

比較対象として使う為、全国データも読み込んでおきます。

# 全国データの取得
summary = pd.read_csv('https://raw.githubusercontent.com/kaz-ogiwara/covid19/master/data/summary.csv')

# 日付をdatetimeに変換
def to_datetime(row):
    return datetime.datetime(row['年'], row['月'], row['日'])
summary['日付'] = summary[['年', '月', '日']].apply(to_datetime, axis=1)

# 今回使わないカラムを落としておきます
summary.drop(['年', '月', '日', 'URL'], axis=1, inplace=True)

# 日付をindexに指定
summary.set_index('日付', inplace=True)

# トータルのの前日との差から当日の新規感染者数や検査数を出します
# 「人工呼吸器又は集中治療室に入院している者」を「重傷者」として扱います
summary['当日陽性者'] = summary['PCR検査陽性者'].diff(periods=1)
summary['当日検査実施人数'] = summary['PCR検査実施人数'].diff(periods=1)
summary['当日死亡者'] = summary['死亡者'].diff(periods=1)
summary['当日重傷者'] = summary['人工呼吸器又は集中治療室に入院している者'].diff(periods=1)
summary['当日有症状者'] = summary['有症状者'].diff(periods=1)
summary['当日無症状者'] = summary['無症状者'].diff(periods=1)
summary['当日退院者'] = summary['退院者'].diff(periods=1)

東京都の感染者数推移

全国データでやったのと同じように感染者数の推移を確認します。

まずは東京で。感染者数の実数と7日間移動平均を表示します。

pref_df = df[df['pref'] == '東京'].copy()
pref_df['当日感染者'] = pref_df['感染者数'].diff(periods=1)
pref_df['当日感染者(移動平均)'] = pref_df['当日感染者'].rolling(7, center=True).mean()

# axの設定処理の共通化
import matplotlib.ticker as ticker
from matplotlib.dates import DateFormatter
def set_xticks(ax, df, start_date, end_date):
    df = df[(df.index >= start_date) & (df.index <= end_date)]
    ax.xaxis.set_major_formatter(DateFormatter('%b %d'))
    ax.xaxis.set_major_locator(ticker.LinearLocator(int(len(df) / 3)))
    ax.set_xlim([start_date, end_date])
    return ax

fig, ax = plt.subplots(figsize=(15,7))
ax.bar(pref_df.index, pref_df['当日感染者'], alpha=0.5, color='blue')
ax.bar(pref_df.index, pref_df['当日感染者(移動平均)'], alpha=0.3, color='red')
set_xticks(ax, summary, datetime.datetime(2020, 4, 1), datetime.datetime(2020, 4, 30))

青が実数。赤が移動平均です。

f:id:mwsoft:20200502224744p:plain

都道府県の感染者数比較

感染者数上位6県で移動平均の推移を比較してみます。

def plot_pref_df(df, pref, ax, color):
    pref_df = df[df['pref'] == pref].copy()
    pref_df['当日感染者'] = pref_df['感染者数'].diff(periods=1)
    pref_df['当日感染者(移動平均)'] = pref_df['当日感染者'].rolling(7, center=True).mean()
    ax.plot(pref_df.index, pref_df['当日感染者(移動平均)'], color=color, linewidth=4, alpha=0.5)

fig, ax = plt.subplots(figsize=(15,7))
plot_pref_df(df, '東京', ax, color='red')
plot_pref_df(df, '大阪', ax, color='blue')
plot_pref_df(df, '神奈', ax, color='green')
plot_pref_df(df, '千葉', ax, color='orange')
plot_pref_df(df, '埼玉', ax, color='purple')
plot_pref_df(df, '兵庫', ax, color='yellow')
ax.legend(['東京', '大阪', '神奈川', '千葉', '埼玉', '兵庫'])
set_xticks(ax, summary, datetime.datetime(2020, 4, 1), datetime.datetime(2020, 4, 29))

f:id:mwsoft:20200503132134p:plain

どの県も4月中旬以降、徐々に感染者数を減らしています。大阪は減少傾向が始まるのが少し遅いように見えますが検査数の問題も絡んでいそうです(後述)。

感染者数トップ6は下記で出しました。

df.groupby('pref')['感染者数'].max().reset_index().sort_values('感染者数', ascending=False).head(10)
pref 感染者数
26 東京 4152.0
9 大阪 1627.0
32 神奈 1028.0
7 埼玉 851.0
5 千葉 810.0
4 北海 767.0
3 兵庫 645.0
34 福岡 642.0
24 愛知 488.0
1 京都 319.0

全国との比較

全国データも合わせてplotしてみます。Y軸は全国だけスケールを別途指定し、残りの6都府県は同じスケールで表示します。

def plot_pref_df(df, pref, ax, color):
    pref_df = df[df['pref'] == pref].copy()
    pref_df['当日感染者'] = pref_df['感染者数'].diff(periods=1)
    pref_df['当日感染者(移動平均)'] = pref_df['当日感染者'].rolling(7, center=True).mean()
    ax.plot(pref_df.index, pref_df['当日感染者(移動平均)'], color=color, linewidth=4, alpha=0.5)

fig, ax = plt.subplots(figsize=(15,7))
plot_pref_df(df, '東京', ax, color='red')
plot_pref_df(df, '大阪', ax, color='blue')
plot_pref_df(df, '神奈', ax, color='green')
plot_pref_df(df, '千葉', ax, color='orange')
plot_pref_df(df, '埼玉', ax, color='purple')
plot_pref_df(df, '兵庫', ax, color='yellow')
ax.legend(['東京', '大阪', '神奈川', '千葉', '埼玉', '兵庫'])

ax2 = ax.twinx()
summary['当日陽性者(移動平均)'] = summary['当日陽性者'].rolling(7, center=True).mean()
ax2.plot(summary.index, summary['当日陽性者(移動平均)'], color='#333333')

set_xticks(ax, summary, datetime.datetime(2020, 4, 1), datetime.datetime(2020, 4, 29))

黒が全国の推移です。ほぼ東京と同じ動きになっています。

f:id:mwsoft:20200502225805p:plain

東京とそれ以外の比較

東京とそれ以外の県のSUMではどのような違いがあるのでしょうか。

tokyo = df[df.pref == '東京'].copy()
other = df[df.pref != '東京'].groupby(level=0).sum()

fig, ax = plt.subplots(figsize=(15,7))

def plot_pref_df(pref_df, ax, color):
    pref_df['当日感染者'] = pref_df['感染者数'].diff(periods=1)
    pref_df['当日感染者(移動平均)'] = pref_df['当日感染者'].rolling(7, center=True).mean()
    ax.plot(pref_df.index, pref_df['当日感染者(移動平均)'], color=color, linewidth=4, alpha=0.5)

ax2 = ax.twinx()
plot_pref_df(tokyo, ax, color='red')
plot_pref_df(other, ax2, color='blue')
ax.legend(['東京'])
ax2.legend(['その他'])

set_xticks(ax, summary, datetime.datetime(2020, 4, 1), datetime.datetime(2020, 4, 29))

Y軸のスケールは同じようになるように調整してあります。

赤が東京、青がそれ以外です。

f:id:mwsoft:20200503132652p:plain

この2つで比較した場合は特に動きに違いは見られないようです。

検査数と陽性率

都道府県ごとの検査数と陽性率を確認してみます。

コード上で4月30日以降のデータをカットしていますが、これは5月1日の大阪の検査数が3527件に跳ね上がっていてグラフが見づらくなった為です。大阪の検査数が急激に増えている理由は未確認です。厚労省のデータも同じ数字になっていたのでデータの間違いではなさそう。

def plot_pref_df(df, pref, ax, ax2, color):
    pref_df = df[df['pref'] == pref].copy()
    pref_df['当日感染者'] = pref_df['感染者数'].diff(periods=1)
    pref_df['当日PCR検査人数'] = pref_df['PCR検査人数'].diff(periods=1)
    pref_df['当日感染者(移動平均)'] = pref_df['当日感染者'].rolling(7, center=True).mean()
    pref_df['当日PCR検査人数(移動平均)'] = pref_df['当日PCR検査人数'].rolling(7, center=True).mean()
    pref_df['当日陽性率(移動平均)'] = pref_df['当日感染者(移動平均)'] / pref_df['当日PCR検査人数(移動平均)']
    ax.plot(pref_df.index, pref_df['当日PCR検査人数(移動平均)'], color=color, linewidth=4)
    ax2.plot(pref_df.index, pref_df['当日陽性率(移動平均)'], color=color, linewidth=4)

fig, ax = plt.subplots(figsize=(15,7))
fig, ax2 = plt.subplots(figsize=(15,7))
plot_pref_df(df[df.index < '2020-04-30'], '東京', ax, ax2, color='red')
plot_pref_df(df[df.index < '2020-04-30'], '大阪', ax, ax2, color='blue')
plot_pref_df(df[df.index < '2020-04-30'], '神奈', ax, ax2, color='green')
plot_pref_df(df[df.index < '2020-04-30'], '千葉', ax, ax2, color='orange')
ax.legend(['東京', '大阪', '神奈川', '千葉'])
ax2.legend(['東京', '大阪', '神奈川', '千葉'])

ax.set_title('PCR検査人数')
ax2.set_title('陽性率')

set_xticks(ax, summary, datetime.datetime(2020, 4, 1), datetime.datetime(2020, 4, 27))
set_xticks(ax2, summary, datetime.datetime(2020, 4, 1), datetime.datetime(2020, 4, 27))

PCR検査人数の推移がこちら。

f:id:mwsoft:20200503005602p:plain

関東3件の検査数が4月中旬以降横ばいなのに対して大阪(青)の検査数はかなり伸びています。

続いて陽性率。

f:id:mwsoft:20200503005617p:plain

どの都府県も下落傾向ですが、大阪では検査数を増やしたことによって下落幅が大きくなっています。

東京と大阪の感染者数と陽性率を比較してみます。

def plot_pref_df(df, pref, ax, ax2, color):
    pref_df = df[df['pref'] == pref].copy()
    pref_df['当日感染者'] = pref_df['感染者数'].diff(periods=1)
    pref_df['当日PCR検査人数'] = pref_df['PCR検査人数'].diff(periods=1)
    pref_df['当日感染者(移動平均)'] = pref_df['当日感染者'].rolling(7, center=True).mean()
    pref_df['当日PCR検査人数(移動平均)'] = pref_df['当日PCR検査人数'].rolling(7, center=True).mean()
    pref_df['当日陽性率(移動平均)'] = pref_df['当日感染者(移動平均)'] / pref_df['当日PCR検査人数(移動平均)']
    ax.bar(pref_df.index, pref_df['当日感染者(移動平均)'], color=color, linewidth=4, alpha=0.5)
    ax2.plot(pref_df.index, pref_df['当日陽性率(移動平均)'], color=color, linewidth=4)

fig, ax = plt.subplots(figsize=(15,7))
ax2 = ax.twinx()
plot_pref_df(df[df.index < '2020-04-30'], '東京', ax, ax2, color='red')
plot_pref_df(df[df.index < '2020-04-30'], '大阪', ax, ax2, color='blue')
ax.legend(['東京', '大阪'])

ax.set_title('感染者数と陽性率')

set_xticks(ax, summary, datetime.datetime(2020, 4, 1), datetime.datetime(2020, 4, 27))
set_xticks(ax2, summary, datetime.datetime(2020, 4, 1), datetime.datetime(2020, 4, 27))

棒グラフが感染者、折れ線が陽性率です。

f:id:mwsoft:20200503011101p:plain

感染者数のみを比較したグラフでは大阪は鈍化のペースが遅いように見えましたが、陽性率で見ると下落のペースは早くなっています。

検査の敷居を低くすれば発見が増えるので感染者は増え、ハズレも増えるので陽性率は下がることが想像されます。しかし検査の拡充によってどういった割合で陽性と陰性が増えていくのかデータがない為、この数字をどう見るべきかはなんとも言えません。

2つの大都市がそれぞれ違った検査に対するアプローチをしていることは、今後その効果を検証する上では役に立ちそうです。

人口比での感染者推移

下記サイトから都道府県の人口を取得します。(Excelファイル)

https://www.stat.go.jp/naruhodo/c1data/02_01_stt.html

厚労省のデータもそうですが、国のデータの多くがExcelやPDFでのみ配布されているのはイケてないと思います。オープンデータでもよく値が取りづらいExcel形式で配布がされていて、読み込むのに一手間かかったります。

下記はCSVに加工したもの。人口は千人単位です。

都道府県,人口
北海道,5320
青森,1278
岩手,1255
宮城,2323
秋田,996
山形,1102
福島,1882
茨城,2892
栃木,1957
群馬,1960
埼玉,7310
千葉,6246
東京,13724
神奈川,9159
新潟,2267
富山,1056
石川,1147
福井,779
山梨,823
長野,2076
岐阜,2008
静岡,3675
愛知,7525
三重,1800
滋賀,1413
京都,2599
大阪,8823
兵庫,5503
奈良,1348
和歌山,945
鳥取,565
島根,685
岡山,1907
広島,2829
山口,1383
徳島,743
香川,967
愛媛,1364
高知,714
福岡,5107
佐賀,824
長崎,1354
熊本,1765
大分,1152
宮崎,1089
鹿児島,1626
沖縄,1443

人口をこれまで使ってきたDataFrameにマージします。

# 上記のCSVを読み込む
population = pd.read_csv('population.csv')

population['pref'] = population['都道府県'].apply(lambda x: x[:2])
population.drop('都道府県', axis=1, inplace=True)
df = df.merge(population)

4/30時点での10万人あたりの感染者数を出します。

df['10万人あたりの感染者数'] = df['感染者数'] / df['人口'] * 100
tmp_df = df[df.index == datetime.datetime(2020, 4, 30)]
tmp_df.sort_values('10万人あたりの感染者数', ascending=False)[['都道府県', '感染者数', '人口', '10万人あたりの感染者数']]

ソートして感染者数が多い都道府県から順に表示します。

日付 都道府県 感染者数 人口 10万人あたりの感染者数
2020-04-30 東京 4152.0 13724 30.253570
2020-04-30 石川 251.0 1147 21.883173
2020-04-30 富山 202.0 1056 19.128788
2020-04-30 大阪 1627.0 8823 18.440440
2020-04-30 福井 122.0 779 15.661104
2020-04-30 北海道 767.0 5320 14.417293
2020-04-30 千葉 810.0 6246 12.968300
2020-04-30 福岡 642.0 5107 12.570981
2020-04-30 京都 319.0 2599 12.273952
2020-04-30 兵庫 645.0 5503 11.720880
2020-04-30 埼玉 851.0 7310 11.641587
2020-04-30 神奈川 1028.0 9159 11.223933
2020-04-30 高知 74.0 714 10.364146
2020-04-30 沖縄 142.0 1443 9.840610
2020-04-30 群馬 146.0 1960 7.448980
2020-04-30 岐阜 146.0 2008 7.270916
2020-04-30 滋賀 96.0 1413 6.794055
2020-04-30 和歌山 62.0 945 6.560847
2020-04-30 愛知 488.0 7525 6.485050
2020-04-30 山梨 52.0 823 6.318348
2020-04-30 山形 68.0 1102 6.170599
2020-04-30 奈良 82.0 1348 6.083086
2020-04-30 茨城 163.0 2892 5.636238
2020-04-30 広島 155.0 2829 5.478968
2020-04-30 大分 60.0 1152 5.208333
2020-04-30 佐賀 41.0 824 4.975728
2020-04-30 福島 73.0 1882 3.878852
2020-04-30 宮城 88.0 2323 3.788205
2020-04-30 愛媛 47.0 1364 3.445748
2020-04-30 島根 23.0 685 3.357664
2020-04-30 新潟 75.0 2267 3.308337
2020-04-30 長野 66.0 2076 3.179191
2020-04-30 香川 28.0 967 2.895553
2020-04-30 栃木 54.0 1957 2.759325
2020-04-30 熊本 47.0 1765 2.662890
2020-04-30 三重 45.0 1800 2.500000
2020-04-30 山口 32.0 1383 2.313811
2020-04-30 青森 26.0 1278 2.034429
2020-04-30 静岡 72.0 3675 1.959184
2020-04-30 秋田 16.0 996 1.606426
2020-04-30 宮崎 17.0 1089 1.561065
2020-04-30 長崎 17.0 1354 1.255539
2020-04-30 岡山 23.0 1907 1.206083
2020-04-30 徳島 5.0 743 0.672948
2020-04-30 鹿児島 10.0 1626 0.615006
2020-04-30 鳥取 3.0 565 0.530973
2020-04-30 岩手 0.0 1255 0.000000

東京は人口比で見ても突出しています。

また石川、富山、福井の北陸で感染者が多いようです。

上記をグラフにするとこうなります。

fig, ax = plt.subplots(figsize=(15,7))
tmp_df.sort_values('10万人あたりの感染者数', ascending=False)[['10万人あたりの感染者数']].plot(kind='bar', ax=ax)
ax.axis('off')

f:id:mwsoft:20200503021434p:plain

都道府県によって蔓延状況にかなりの差があることがわかります。

感染者数のみだと心もとないので陽性率も並べてみます。

tmp_df = df[df.index == datetime.datetime(2020, 4, 30)].copy()
tmp_df['陽性率'] = tmp_df['PCR検査陽性者数'] / tmp_df['PCR検査人数']
tmp_df = tmp_df.sort_values('10万人あたりの感染者数', ascending=False)
fig, ax = plt.subplots(figsize=(15,7))
tmp_df[['10万人あたりの感染者数']].plot(kind='bar', ax=ax, color='blue', position=0)
ax2 = ax.twinx()
tmp_df[['陽性率']].plot(kind='bar', ax=ax2, color='red', position=1)
ax.axis('off')

青が10万人あたりの感染者数、赤が陽性率。

f:id:mwsoft:20200503022411p:plain

概ね感染者数と陽性率には相関があるようです。左から12番目の他より少し抜けて陽性率が高いのは神奈川県。

陽性率が高く出ている県とそうでない県について今後の収束ペースを分析をしていくと何か見えてくるかもしれません。

人口と10万人あたりの感染者数で散布図を出してみます。

tmp_df = df[df.index == datetime.datetime(2020, 4, 30)]
tmp_df.plot(kind='scatter', x='人口', y='10万人あたりの感染者数')

f:id:mwsoft:20200503021000p:plain

大都市ほど感染が広まりやすいという傾向がある為、両者の相関はそれなりにはありそうです。

相関係数は0.617でした。

tmp_df[['人口', '10万人あたりの感染者数']].corr()['10万人あたりの感染者数']['人口']
    #=> 0.6174923414924649

続いて陽性率と10万人あたりの感染者数の相関。

f:id:mwsoft:20200503135304p:plain

tmp_df.plot(kind='scatter', x='陽性率', y='10万人あたりの感染者数')
tmp_df[['陽性率', '10万人あたりの感染者数']].corr()['陽性率']['10万人あたりの感染者数']
    #=> 0.872994206884142

相関係数0.873。

都道府県ごとに検査体制の差はあるものの全体で見ればだいたい収まるべき範囲に収まっていると言って良いでしょうか。

致死率

都道府県ごとの致死率を比較して特筆すべき点がないか確認してみます。

tmp_df['死亡者'] =  pd.to_numeric(tmp_df['死亡者'], errors='coerce')
tmp_df['致死率'] = tmp_df['死亡者'] / tmp_df['感染者数']

tmp_df = tmp_df.sort_values('致死率', ascending=False)
fig, ax = plt.subplots(figsize=(15,7))
tmp_df[['10万人あたりの感染者数']].plot(kind='bar', ax=ax, color='blue', position=0)
ax2 = ax.twinx()
tmp_df[['致死率']].plot(kind='bar', ax=ax2, color='red', position=1)
ax.axis('off')

青が10万人あたりの感染者数、赤が致死率。

f:id:mwsoft:20200503030926p:plain

感染者数が増えることで致死率が上がるといった事象は今のところ起きていないようです。

最も致死率が高いのは群馬の10.3%ですが感染者数146人、死亡者15人と件数が少ないためこれが意味のある数字なのかはこれだけではわかりません。

全国平均では2.91%でした。

tmp_df['死亡者'].sum() / tmp_df['感染者数'].sum()

  #=> 0.029158905287290444

10万人あたりのPCR検査検査人数についても見てみましょう。

tmp_df['10万人あたりのPCR検査人数'] = tmp_df['PCR検査人数'] / tmp_df['人口'] * 100
fig, ax = plt.subplots(figsize=(15,7))
tmp_df[['10万人あたりのPCR検査人数']].plot(kind='bar', ax=ax, color='blue', position=0)
ax2 = ax.twinx()
tmp_df[['致死率']].plot(kind='bar', ax=ax2, color='red', position=1)
ax.axis('off')

tmp_df[['致死率', '10万人あたりのPCR検査人数']].corr()['10万人あたりのPCR検査人数']['致死率']
    #=> 0.10767425226654537

青が10万人あたりのPCR検査人数、赤が致死率です。

f:id:mwsoft:20200503135920p:plain

この取り方だと検査数と致死率の間には相関は出てきませんでした。

検査数が増えれば軽症患者の感染者数が増加して致死率は下がりそうなところですが、他のファクターも関わってくるのでcorrだけでさらっと取れるような相関ではなさそうです。

直近の状況を確認する

ここまでは全体の数字を見てきましたが、直近の数字に絞って確認すると見えてくるものも変わってきそうです。

下記では4/24〜4/30の間の増分を確認しています。

tmp_df1 = df[df.index == datetime.datetime(2020, 4, 24)].set_index('pref')
tmp_df2 = df[df.index == datetime.datetime(2020, 4, 30)].set_index('pref')
columns = ['10万人あたりの感染者数', '感染者数']
tmp_df = tmp_df2[columns] - tmp_df1[columns]
tmp_df = tmp_df.reset_index().merge(population)
tmp_df['10万人あたりの感染者数'] = tmp_df['感染者数'] / tmp_df['人口'] * 100
tmp_df.sort_values('10万人あたりの感染者数', ascending=False)[['pref', '感染者数', '人口', '10万人あたりの感染者数']]

下記が過去2週間の人口10万人あたりの感染者数です。県名は前2文字で切ってあります。

pref 感染者数 人口 10万人あたりの感染者数
北海 205.0 5320 3.853383
富山 39.0 1056 3.693182
東京 419.0 13724 3.053046
石川 29.0 1147 2.528335
大阪 179.0 8823 2.028788
京都 33.0 2599 1.269719
神奈 116.0 9159 1.266514
埼玉 84.0 7310 1.149111
福岡 58.0 5107 1.135696
佐賀 9.0 824 1.092233
和歌 10.0 945 1.058201
島根 7.0 685 1.021898
兵庫 40.0 5503 0.726876
千葉 42.0 6246 0.672430
沖縄 9.0 1443 0.623701
広島 13.0 2829 0.459526
奈良 6.0 1348 0.445104
新潟 10.0 2267 0.441112
高知 3.0 714 0.420168
福島 7.0 1882 0.371945
静岡 13.0 3675 0.353741
青森 4.0 1278 0.312989
群馬 6.0 1960 0.306122
福井 2.0 779 0.256739
熊本 4.0 1765 0.226629
滋賀 3.0 1413 0.212314
茨城 6.0 2892 0.207469
愛知 14.0 7525 0.186047
山形 2.0 1102 0.181488
宮城 4.0 2323 0.172191
岡山 3.0 1907 0.157315
山梨 1.0 823 0.121507
長崎 1.0 1354 0.073855
山口 1.0 1383 0.072307
栃木 1.0 1957 0.051099
宮崎 0.0 1089 0.000000
大分 0.0 1152 0.000000
岩手 0.0 1255 0.000000
鹿児 0.0 1626 0.000000
秋田 0.0 996 0.000000
愛媛 0.0 1364 0.000000
香川 0.0 967 0.000000
徳島 0.0 743 0.000000
鳥取 0.0 565 0.000000
岐阜 0.0 2008 0.000000
三重 0.0 1800 0.000000
長野 -1.0 2076 -0.048170

県ごとの経済活動の再開の基準にはこうした値も参考にされそうです。他にも病床数や陽性率、感染経路不明数等の兼ね合いもあるのであくまで1要素としてですが。

改定履歴

Author: Masato Watanabe, Date: 2020-05-03, 記事投稿