Ryn's Web Page
Pythonでオープンデータをダウンロードしてグラフを描く
とりあえず作ってみたバージョン。敢えて見通しの良さを優先。エラー処理はしていない。
必要に応じて外部ライブラリをインストールすること。
厚生労働省のサイトに有るオープンデータ「新規陽性者数の推移(日別)」をダウンロードし、
指定した日数の、指定した3つの都道府県の、直近の新規陽性者数の折れ線グラフを描く。
指定する都道府県名は、ダウンロードしたcsvファイルの1行目の値と一致している必要が有る。
ダウンロードしたファイルとグラフのファイルはカレントディレクトリに保存される。
# covid19a.py by Ryn October 17, 2022
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.dates as mdates
import urllib.request
import csv
url = "https://covid19.mhlw.go.jp/public/opendata/newly_confirmed_cases_daily.csv"
filename = url.split('/')[-1]
urllib.request.urlretrieve(url, filename)
date = []
prefdata = [['','o','red'],['','D','blue'],['','x','green']]
days: int = int(input('直近の日数 --> '))
for i in range(3):
prefdata[i][0] = (input(str(i+1)+'番目の県名 --> '))
with open( filename, 'r', encoding="utf-8_sig") as f:
for row in csv.DictReader(f):
date.append (pd.to_datetime(row['Date']))
for i in range(3):
prefdata[i].append(int(row[ prefdata[i][0] ]))
fig = plt.figure(dpi=150)
plt.title('直近' + str(days) + '日間の新規陽性者数', fontname="MS Gothic")
plt.xlabel("日", fontname="MS Gothic")
plt.ylabel("人\n数", fontname="MS Gothic", rotation=360)
for i in range(3):
plt.plot(date[len(date)-days:len(date)],prefdata[i][len(date)-days:len(date)],
marker = prefdata[i][1],markersize = 1,color=prefdata[i][2],label=prefdata[i][0] )
plt.legend()
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter("%y/%m/%d"))
plt.gcf().autofmt_xdate()
plt.savefig('covid19.png')
plt.show()
入力の例
実行結果の例