4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Covid-19感染状況の推移をgoogle colab(python)で自動グラフ化!

Last updated at Posted at 2021-05-22

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.結果

実行をしてみると以下のような図が出てくると思います。

image.png

5.課題(?)

ずいぶん線がガタガタです。統計データをそのまま描画してしまっているのでこうなってしまいましたが、移動平均をとるなどしてスムーズにする方法もありますので、トライしてみていただければと思います。
4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?