コロナ感染者数グラフ作成
pandas + matplotlib でグラフ作成
NHKサイトからダウンロードしたcsvを読み込み
https://www3.nhk.or.jp/news/special/coronavirus/data-widget/#mokuji1
日付都道府県コード都道府県名各地の感染者数_1日ごとの発表数各地の感染者数_累計各地の死者数_1日ごとの発表数各地の死者数_累計
02020/01/161北海道0000
12020/01/171北海道0000
22020/01/181北海道0000
32020/01/191北海道0000
42020/01/201北海道0000
........................
245292021/06/1647沖縄県115197840163
245302021/06/1747沖縄県97198814167
245312021/06/1847沖縄県86199670167
245322021/06/1947沖縄県97200640167
245332021/06/2047沖縄県61201250167
24534 rows × 7 columns
データを整形してグラフ表示
<AxesSubplot:xlabel='日付'>
In [1]:import datetimeimport pandas as pdimport matplotlib.pyplot as pltimport japanize_matplotlibfrom japanmap import picture
In [2]:df = pd.read_csv('nhk_news_covid19_prefectures_daily_data.csv',encoding = ('utf8'))
# 日付のフォーマット修正df['日付'] = df['日付'].replace('(\d+)/(\d+)/(\d+)', '\\1/0\\2/0\\3', regex=True)df['日付'] = df['日付'].replace('(\d+)/0*(\d{2,})/0*(\d{2,})', '\\1/\\2/\\3', regex=True)df
Out[2]:
In [3]:# 折線グラフ化する直近のレコード数(7 = 直近7日分)get_count = 365
In [4]:# 全国df_all = df.copy()df_all = df_all.groupby('日付').sum()df_all = df_all.loc[:,['各地の感染者数_1日ごとの発表数']]df_all = df_all.rename(columns={'各地の感染者数_1日ごとの発表数':'全国の感染者数'})df_all = df_all.sort_index()df_all.tail(get_count).plot(figsize=(10, 5))
Out[4]:
<AxesSubplot:xlabel='日付'>
昨日の県別感染者数で地図を色分け
In [5]:# 愛知df_aichi = df.copy()df_aichi = df_aichi[df_aichi.都道府県名 == '愛知県']df_aichi = df_aichi.set_index('日付')df_aichi = df_aichi.loc[:,['各地の感染者数_1日ごとの発表数']]df_aichi = df_aichi.rename(columns={'各地の感染者数_1日ごとの発表数': '愛知県の感染者数'})df_aichi = df_aichi.sort_index()df_aichi.tail(get_count).plot(figsize=(10, 5))
Out[5]:
In [6]:d_yest = '{0:%Y/%m/%d}'.format(datetime.date.today() - datetime.timedelta(days=1))
# CSVからデータ抽出df_yest = df.copy()df_yest = df_yest[df_yest.日付 == d_yest]df_yest = df_yest.set_index('都道府県コード')df_yest = df_yest.loc[:,['各地の感染者数_1日ごとの発表数']]
# japanmapで画像生成cmap = plt.get_cmap('Reds')norm = plt.Normalize(vmin=df_yest.各地の感染者数_1日ごとの発表数.min(),                      vmax=df_yest.各地の感染者数_1日ごとの発表数.max())fcol = lambda x: '#' + bytes(cmap(norm(x), bytes=True)[:3]).hex()plt.subplots(figsize=(8,8))plt.colorbar(plt.cm.ScalarMappable(norm, cmap))plt.imshow(picture(df_yest.各地の感染者数_1日ごとの発表数.apply(fcol)));