pandasでCOVID-19データファイルをプロット

pandasでCOVID-19データファイルをプロット

概要

  • pandasを使用し、COVID-19データをプロットする(主目的はpandasの練習)

環境

  • Python ver : 3.7.7
  • Numpy ver : 1.18.4
  • Scipy ver : 1.4.1
  • Pandas ver : 1.0.3
  • matplotlib ver : 3.2.1

データ

厚生労働省のwebページから、データ(csvファイル)を取得
オープンデータ|厚生労働省

データの読み込み

pandasのread_csv()で、簡単に読み込める。

data_pcr_positive_daily = './pcr_positive_daily.csv'
data_pcr_tested_daily = './pcr_tested_daily.csv'
df_pcr_positive = pd.read_csv(data_pcr_positive_daily)
df_pcr_tested = pd.read_csv(data_pcr_tested_daily)

複数のDataFrameの連結

merge()を使用し、共通の「日付」列を元にして連結する。

df = pd.merge(df_pcr_positive,df_pcr_tested,on='日付')

移動平均のように、窓を使用した計算処理にはrolling()を使用する。 mean()の他にもメソッドが用意されている。 例えば以下のようにすることで、移動平均した列を新たに追加できる。

df['移動平均'] = df.iloc[:,1].rolling(7).mean()

列同士を使用した演算で、新たに列を作ることも可能。

df['陽性率'] = df.iloc[:,1] / df.iloc[:,2] * 100

コード全体

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter,DayLocator
import pandas as pd

# CSVデータファイル
# https://www.mhlw.go.jp/stf/covid-19/open-data.html
data_pcr_positive_daily = './pcr_positive_daily.csv'
data_pcr_tested_daily = './pcr_tested_daily.csv'

# データファイルをpandasで読み込み
#  - 日々の陽性者数と、PCR検査実施数を連結
#  - また、陽性者数の移動平均、陽性率も計算
df_pcr_positive = pd.read_csv(data_pcr_positive_daily)
df_pcr_tested = pd.read_csv(data_pcr_tested_daily)
df = pd.merge(df_pcr_positive,df_pcr_tested,on='日付')
df['移動平均'] = df.iloc[:,1].rolling(7).mean()
df['陽性率'] = df.iloc[:,1] / df.iloc[:,2] * 100 # [%]

data_date = df.iloc[:,0].astype(np.datetime64)
data_pcr_positive = df.iloc[:,1]
data_pcr_positive_ave = df.iloc[:,3]

# 陽性者数および移動平均をプロット
plt.bar(data_date,data_pcr_positive,label='PCR Positive')
plt.plot(data_date,data_pcr_positive_ave,label='moving_ave',color='r')
plt.gca().xaxis.set_major_formatter(DateFormatter('%Y-%m-%d'))
plt.gca().xaxis.set_major_locator(DayLocator(interval=14))
plt.gcf().autofmt_xdate()
plt.xlabel('Date')
plt.ylabel('PCR positive')
plt.grid(which='both')
plt.legend()
plt.show()

f:id:storikai:20200812162039p:plain