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()