本記事では、新型コロナに関する厚生労働省のHP (オープンデータ|厚生労働省)から入手できるcsvデータを例にpandasでデータを扱う雛形コードを載せました。Pythonでcsvなどのテキストファイルを扱うには十中八九pandas(パンダス)を利用することになります。あたかもExcelのような操作をプログラミングによって簡単に処理することができます。
上記リンク先から入手できる「死亡者数」「PCR 検査実施件数(単日)」「PCR 検査陽性者数(単日)」の3つのcsvファイルは下図のようなものである。
本プログラムで出来ることは次の通りです。①上図3つのファイルをそれぞれpandasで読み出した後、②列方向に結合、③陽性率を計算して新しい列に追加、④欠損データを削除、⑤日付順にソート(並び替え)、⑥下図のように1つのcsvファイルを作成する。
更に、⑦下図のように2軸のグラフを作成し、折れ線図と棒線図で可視化します。
■本プログラム
本コードは、Jupyter Labからコマンドライン用.pyファイルで出力したコードです。
import pandas as pd
df_death = pd.read_csv('death_total.csv', index_col='日付')
print(df_death)
df_tested = pd.read_csv('pcr_tested_daily.csv',
index_col='日付',
encoding='utf-8')
print(df_tested)
df_positive = pd.read_csv('pcr_positive_daily.csv',
index_col='日付',
encoding='utf-8',
skiprows=0,
header=0)
print(df_positive)
df = pd.concat([df_death, df_tested, df_positive], axis=1)
df
df.reset_index(inplace=True)
df
df.rename(columns = {'index':'日付'}, inplace=True)
df
df.info()
df['日付'] = pd.to_datetime(df['日付'])
df.info()
df.sort_values(['日付'], ascending=True, inplace=True)
df
df.isnull().sum()
df2 = df.dropna()
df2
DF = df2.assign(PCR_陽性率_単日 = (df2['PCR 検査陽性者数(単日)'] / df2['PCR 検査実施件数(単日)'])*100)
DF
DF.to_csv('pcr_data.csv', index=False, encoding='cp932')
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import japanize_matplotlib
fig = plt.figure(figsize=(15,6))
ax1 = fig.add_subplot(1,1,1)
ln1 = ax1.bar(DF['日付'], DF['死亡者数'],
color='c', label='死亡者数')
ax2 = ax1.twinx()
ln2 = ax2.plot(DF['日付'], DF['PCR_陽性率_単日'],
color='m', label='陽性率')
h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1+h2, l1+l2, loc='upper left')
ax1.set_ylabel("死亡者数")
ax2.set_ylabel("陽性率")
ax2.set_ylim([0, 100])
plt.grid()
plt.rcParams['font.size'] = 20
plt.tight_layout()
plt.savefig('figure.png')
plt.close()
以上
<広告>
リンク