pycoro
Senza volere fare previsioni od elaborazioni ufficiali od ufficiose ma solo un esercizio per ripassare alcuni concetti matematici, di seguito trovate il programma Python e i grafici che, partendo dai dati ufficiali sulla diffusione del COVID-19 (https://github.com/pcm-dpc/COVID-19), disegna i grafici per il Veneto e il Friuli sull’andamento e la previsione per i prossimi due giorni dei casi segnalati.
#!/usr/bin/env python3
import urllib.request
import json
from datetime import datetime
from scipy.interpolate import UnivariateSpline
from scipy.signal import savgol_filter
if __name__ == "__main__":
from matplotlib import pyplot as plt
firstDay = datetime(2020, 2, 24)
url = "https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-json/dpc-covid19-ita-regioni.json"
req = urllib.request.Request(url)
with urllib.request.urlopen(req) as response:
datastore = json.loads(response.read())
for regione in ['Veneto','Friuli Venezia Giulia']:
xPoints = []
yPoints = []
xMax=-1
for data in datastore:
if data['denominazione_regione']==regione:
date_time_obj = datetime.strptime(data['data'], '%Y-%m-%d %H:%M:%S')
delta=date_time_obj-firstDay
xMax = max(xMax, delta.days)
xPoints.append(delta.days)
yPoints.append(data['totale_casi'])
plt.plot(xPoints, yPoints, 'o',label='data')
yhat = savgol_filter(yPoints, 11, 3)
plt.plot(xPoints, yhat,label='Savitzky–Golay')
daysWanted=[xMax]
for i in range(0, 4):
daysWanted.append(xMax+i)
for k in (1, 2,3):
spl = UnivariateSpline(xPoints, yhat, k=k)
spl.set_smoothing_factor(0.2)
y = spl(daysWanted)
label = "k=%d" % k
print(label,y)
plt.plot(daysWanted, y, '--', label=label)
plt.grid()
plt.title(regione)
plt.legend( loc="best" )
plt.show()
Veneto
Previsione su 2 giorni (il primo valore è il giorno attuale) con https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.UnivariateSpline.html:
(dato del 23 marzo 2020)
- k=1 [5965.7057941 5965.7057941 6405.50670116 6845.30760822 7285.10851527]
- k=2 [5965.63978126 5965.63978126 6370.41016268 6740.31096795 7075.34219707]
- k=3 [5965.61047754 5965.61047754 6355.34720057 6678.63307654 6918.77284436]
Friuli
- k=1 [ 995.34034413 995.34034413 1053.46755687 1111.5947696 1169.72198234]
- k=2 [ 995.23966355 995.23966355 1033.61949453 1052.47618057 1051.80972167]
- k=3 [ 995.22544223 995.22544223 1027.80489782 1028.63739093 991.24117572]
ARTICOLI
web