Python.02 グラフ作成
前回の話
使用データ
前回に引き続き、
厚生労働省「データからわかる-新型コロナウイルス感染症情報-」より、
「新規陽性者数の推移(日別)」オープンデータ(CSV形式)を使用。
ファイル名「newly_confirmed_cases_daily.csv」
この記事から読みはじめる方は、以下ご確認ください。
上記ファイル「newly_confirmed_cases_daily.csv」を日付をindexにする形で読み込み、週ごとに集計した形でデータ「df_W」を用意しています。これをグラフに使います。
※実際に初めてデータを触るときはいくつかの確認や前処理が必要ですがここでは省略します。
import pandas as pd
df = pd.read_csv('./data/newly_confirmed_cases_daily.csv', index_col=0, parse_dates=True)
df_W = df.resample('W').sum()
df_W
グラフ表示
日本語表示
1分1秒早くグラフが表示したくて気がせくのですが、ここはひとつ、グラフで日本語が使えるように設定しておきます。
import matplotlib.font_manager as fm
import matplotlib
# font_location = 'C:\Windows\Fonts\BIZ-UDMinchoM.ttc' # ロカール上のフォントパスを指定(Windows)
font_location = '/Library/Fonts/MS Gothic.ttf' # ロカール上のフォントパスを指定(Mac)
font_name = fm.FontProperties(fname=font_location).get_name() # フォントパス(font_location)を指定しフォント名を取得
matplotlib.rc('font',family=font_name) # 設定ファイル(matplotlibrc)の「font.family」取得したフォント名へ変更
実行結果は、これだけでは特にありません。
著者は、WindowsとMacの両方の環境を行ったり来たりしていたので、片方をコメントアウトさせて使ってました。
好きなフォントをご指定ください。ゴシック体の無難なやつが今は指定されてます。
(おまじないとしてコピペで使えますよ。)
ついにグラフ!
%matplotlib inline
import matplotlib.pyplot as plt
sxmin='2021-05-01' # 表示期間の開始を指定
sxmax='2022-12-27' # 表示期間の終了を指定
xmin = datetime.datetime.strptime(sxmin, '%Y-%m-%d')
xmax = datetime.datetime.strptime(sxmax, '%Y-%m-%d')
plt.xlim([xmin,xmax]) # ここでグラフに、x軸の範囲を指定
plt.title('新規陽性者数-ALL-') # 表ラベル
plt.xlabel('日付') # x軸ラベル
plt.ylabel('新規陽性者数') # y軸ラベル
plt.grid(which='major',axis='both',color='#999999',linestyle='--')
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%d-%b-%Y'))
plt.gcf().autofmt_xdate()
# 週合計したデータ「df_W」の中から、国全体の合計「ALL」列だけをグラフに表示させます
# 色は b(青色)、ラベルは ALL とします。
plt.plot(df_W['ALL'], color='b', label=u'ALL')
plt.legend() # グラフに凡例を表示
fnameF='./img/COVID19.jpg' # imgフォルダに画像を保存
plt.savefig(fnameF, dpi=200, bbox_inches="tight", pad_inches=0.1)
plt.show() # グラフ表示
何回か山が来ていることがわかるグラフを作ることができました!
国全体だとこんな感じなんですね。
都道府県ごとにデータが収録されているので、いくつかピックしてグラフ化してみます。
コメントを付けてあるので、上と違うところを確認してみてください。
sxmin='2021-05-01'
sxmax='2022-12-27'
xmin = datetime.datetime.strptime(sxmin, '%Y-%m-%d')
xmax = datetime.datetime.strptime(sxmax, '%Y-%m-%d')
plt.xlim([xmin,xmax])
plt.title('新規陽性者数(都道府県別)') # 都道府県別
plt.xlabel('日付')
plt.ylabel('新規陽性者数')
plt.grid(which='major',axis='both',color='#999999',linestyle='--')
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%d-%b-%Y'))
plt.gcf().autofmt_xdate()
# 東京、京都、大阪、沖縄を抜き出しました。
# 並列して書けば大丈夫です。色分け、ラベル付けしますね。
plt.plot(df_W['Tokyo'], color='b', label=u'Tokyo')
plt.plot(df_W['Kyoto'], color='r', label=u'Kyoto')
plt.plot(df_W['Osaka'], color='m', label=u'Osaka')
plt.plot(df_W['Okinawa'], color='g', label=u'Okinawa')
plt.legend()
fnameF='./img/COVID19(都道府県別).jpg' # 都道府県別
plt.savefig(fnameF, dpi=200, bbox_inches="tight", pad_inches=0.1)
plt.show()
全国民集計と一緒に出すとグラフがえらいことになるので、分けて出しますね。人口の差が陽性者の数に直接影響しているのか、確認したい都道府県は個別にピックアップした方が良さそうだとわかりますね。
それにしても12月末に向けた増加傾向が気に掛かります。
まとめ
グラフを作るという第一目標は達成できました。
しかしこれだけでは、厚生労働省の公式サイトで見ればいいわけで、比較などができません。どうしましょう。
次は、Y軸が左右で異なる2つのグラフを重ねて表記してみたいと思います。
今日も読んでいただき、ありがとうございました。
よろしければサポートお願いいたします。いただいたサポートは勉強のための書籍購入費に使う予定です。