キーワード辞典
物凄く大雑把なPython

登録日 22/10/17   更新日 22/10/17


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()


入力の例


実行結果の例








[ 黒板消しとチョーク受けの画像 ]