X-Git-Url: https://www.fleuret.org/cgi-bin/gitweb/gitweb.cgi?p=python.git;a=blobdiff_plain;f=covid19.py;h=beccb9bc75d79d27a4a297b6d8c34171c3216e63;hp=e633b03c8e99b69276288d999dbbb518f1efcb69;hb=HEAD;hpb=65d1b3f2d428743f157e4180306adbad7829cba2 diff --git a/covid19.py b/covid19.py index e633b03..fdfe16e 100755 --- a/covid19.py +++ b/covid19.py @@ -1,75 +1,89 @@ #!/usr/bin/env python -import os, time, math +# Any copyright is dedicated to the Public Domain. +# https://creativecommons.org/publicdomain/zero/1.0/ + +# Written by Francois Fleuret + +import os, time import numpy, csv import matplotlib.pyplot as plt import matplotlib.dates as mdates import urllib.request -url = 'https://github.com/CSSEGISandData/COVID-19/raw/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv' +###################################################################### + + +def gentle_download(url, delay=86400): + filename = url[url.rfind("/") + 1 :] + if not os.path.isfile(filename) or os.path.getmtime(filename) < time.time() - delay: + print(f"Retrieving {url}") + urllib.request.urlretrieve(url, filename) + return filename -file = 'time_series_19-covid-Confirmed.csv' ###################################################################### -if not os.path.isfile(file) or os.path.getmtime(file) < time.time() - 86400: - print('Retrieving file') - urllib.request.urlretrieve(url, file) +nbcases_filename = gentle_download( + "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv" +) ###################################################################### -with open(file, newline='') as csvfile: - reader = csv.reader(csvfile, delimiter=',') +with open(nbcases_filename, newline="") as csvfile: + reader = csv.reader(csvfile, delimiter=",") times = [] nb_cases = {} time_col = 5 for row_nb, row in enumerate(reader): for col_nb, field in enumerate(row): - if row_nb >= 1 and col_nb == 1: - country = field - if not country in nb_cases: - nb_cases[country] = numpy.zeros(len(times)) - # print(country) if row_nb == 0 and col_nb >= time_col: - times.append(time.mktime(time.strptime(field, '%m/%d/%y'))) - if row_nb == 1 and col_nb == time_col: - nb_cases['World'] = numpy.zeros(len(times)) + times.append(time.mktime(time.strptime(field, "%m/%d/%y"))) if row_nb >= 1: - if col_nb >= time_col: - nb_cases['World'][col_nb - time_col] += int(field) + if col_nb == 1: + country = field + if not country in nb_cases: + nb_cases[country] = numpy.zeros(len(times)) + elif col_nb >= time_col: + # if field == '': field = '0' nb_cases[country][col_nb - time_col] += int(field) +countries = list(nb_cases.keys()) +countries.sort() +print("Countries: ", countries) + +nb_cases["World"] = sum(nb_cases.values()) + ###################################################################### fig = plt.figure() ax = fig.add_subplot(1, 1, 1) -# ax.grid -ax.yaxis.grid(color='gray', linestyle='-', linewidth=0.25) -ax.set_title('Nb. of COVID-19 cases') -ax.set_xlabel('Date', labelpad = 10) -ax.set_yscale('log') +ax.yaxis.grid(color="gray", linestyle="-", linewidth=0.25) +ax.set_title("Nb. of COVID-19 cases") +ax.set_xlabel("Date", labelpad=10) +ax.set_yscale("log") + +myFmt = mdates.DateFormatter("%b %d") -myFmt = mdates.DateFormatter('%b %d') ax.xaxis.set_major_formatter(myFmt) dates = mdates.epoch2num(times) -for key, color, label, delta in [ - ('World', 'blue', 'World', 0), - ('Switzerland', 'red', 'Switzerland', 14), - ('France', 'lightgreen', 'France', 11), - ('US', 'black', 'USA', 14), - ('Korea, South', 'gray', 'S. Korea', 0), - ('Italy', 'purple', 'Italy', 3), - ('China', 'orange', 'China', 0) +for key, color, label in [ + ("World", "blue", "World"), + ("Switzerland", "red", "Switzerland"), + ("France", "lightgreen", "France"), + ("US", "black", "USA"), + ("Korea, South", "gray", "South Korea"), + ("Italy", "purple", "Italy"), + ("China", "orange", "China"), ]: - delta = 0 - ax.plot(dates[:dates.shape[0]-delta], nb_cases[key][delta:], color = color, label = label, linewidth=2) + ax.plot(dates, nb_cases[key], color=color, label=label, linewidth=2) -# ax.legend(loc='center left', bbox_to_anchor=(1, 0.5), frameon = False) -ax.legend(frameon = False) +ax.legend(frameon=False) plt.show() -fig.savefig('covid19.png') + +fig.savefig("covid19_nb_cases.png") ######################################################################