1. はじめに
新型コロナの国別100万人あたりの感染者の推移について、エクセルで毎回膨大なデータを編集してグラフ化するのが大変だなぁと思っていたところ、これって自動化できるんじゃない?と思って、作成したプログラムを紹介します。GoogleColabを使って1クリックで描画してくれるので、便利だと思います。 Matplotlibの使い方とPandasをマスターすればこんなに便利だというイメージを掴む演習としても最適かと思います。 (ちなみに、今回データソースとして使ったオックスフォード大学のサイトour world dataに行くと、国を選択すれば描画してくれるツールも掲載されているので、そちらの方で十分では?という声があるかもしれません。しかし、例えば、このコードをサーバーに載せて定期的にメールで送ってもらうようなことも出来ますので、Pythonでコードを書くのは意味があったりします。) なお、毎度のことですが、プログラムの実行など、本件の実践については、ご自身の責任でお願いします。2.全体の流れ
①オックスフォード大学のOur World Dataにあるowid-covid-data.csvをダウンロード(データ自体はGitHubにもあります。サンプルプログラムではGitHubサイトのUrlを使っています)。 ②①のダウンロードとあわせて、CSVをpandas形式で読み込み(pd.read_csv) ③指定した国の100万人あたりの感染者のデータを検索して取り出し、リストに格納していきます。 ④グラフ化できるようにデータをマージします。 ⑤matplotlibモジュールのpyplotで描画・PNGファイルでのデータ保存をします。とりあえずやってみたい方は、以下3.のコードをGoogleColabに貼り付けて実行してみてください。
3.コード
import requests
import pandas as pd
import matplotlib.pyplot as plt
from pylab import rcParams
plt.style.use('ggplot')
#描画の際のサイズを指定します。
rcParams['figure.figsize'] = 15,10
#データファイルのURL
url = "https://github.com/owid/covid-19-data/blob/master/public/data/owid-covid-data.csv?raw=true"
#csvをurlのサイトから取得して、pd形式にします。(①、②)
df = pd.read_csv(url)
#描画をさせたい国のリストです。ここは適宜、変えてOKです。
country = ["Indonesia", "Vietnam", "Thailand", "China", "Japan"]
#とりあえずデータを格納する空のリストです。
pdata = []
#描画させたいデータを取り込んでいきます。(③)
for countries in country:
qstr = 'location in '+ '"' + countries +'"'
dfdata= df[['date','new_cases_per_million','location']].query(qstr).rename(columns={'new_cases_per_million': countries}).drop(columns="location")
pdata.append(dfdata)
#描画させるためにデータをマージします。(④)
pmerge = pd.merge(pdata[0], pdata[1])
for n in range(0, len(pdata)-1):
pmerge = pd.merge(pmerge, pdata[n+1])
#描画と保存をします。(⑤)
plt.tight_layout()
pmerge.plot(x = "date")
plt.savefig("coviddata.png1", format="png", dpi=500)
plt.show()
plt.close('all')
4.結果
実行をしてみると以下のような図が出てくると思います。