Cette fois, nous prédirons l'heure du pic d'infection dans chaque pays par un graphique logarithmique.
・ Un peu de théorie ・ Prévisions de chaque pays ・ Explication du code ・ Théorie supplémentaire ・ Prévisions de chaque pays II
La dernière fois, l'équation suivante a été dérivée.
I = I_0\exp(\gamma (\frac{\beta}{\gamma} \frac{S}{N} - 1)t)\\
Si vous prenez le logarithme des deux côtés,
\ln I = \ln I_0+\gamma (\frac{\beta}{\gamma} \frac{S}{N} - 1)t\\
Est obtenu. Autrement dit, si vous dessinez un graphique avec $ \ ln I $ sur l'axe vertical et le temps $ t $ sur l'axe horizontal, la pente sera
\gamma (\frac{\beta}{\gamma} \frac{S}{N} - 1)\\
Peut tracer une ligne droite. Ici, ce gradient dépend de $ S $ et correspond au nombre de personnes non infectées qui diminue avec le temps. Et ce dégradé peut être réécrit comme suit en utilisant le nombre de reproduction effectif $ R $ introduit la dernière fois.
\gamma (R - 1)\\
R = R_0 \frac{S}{N}\\
R_0 = \frac{\beta}{\gamma}\\
Par conséquent, ce gradient devient 0 à R = 1, c'est-à-dire le nombre de reproductions = 0, et le nombre de personnes infectées n'augmente plus, de sorte que l'infection culmine. Cette fois, sur la base de cette théorie, je voudrais tracer les données de chaque pays dans $ \ log I \ vs \ t $ et voir l'heure du pic d'infection dans chaque pays.
De plus, à partir de la pente montante, $ S \ Fallingdotseq N $, et $ \ gamma (R_0 -1) $ peuvent être obtenus. En ajustant le graphe obtenu avec ceci comme valeur initiale, il semble que $ \ gamma $, $ \ beta $, $ R_0 $ puissent être obtenus.
Il peut sembler méfiant que l'Italie soit incluse, mais les résultats sont les suivants: Si vous regardez ces trois pays côte à côte, vous pouvez voir qu'ils sont très différents. Autrement dit, si les axes x et y sont déplacés en parallèle, ils sont susceptibles de se chevaucher. En d'autres termes, vous pouvez voir qu'il existe des zones avec la même inclinaison. Dans chaque graphique, vous pouvez voir ** une section qui augmente 10 fois en près de 10 jours **. Oui, le DP est susceptible de saturer d'abord la courbe du nombre d'infections, puis la Corée du Sud, puis l'Italie. Le graphique ci-dessous trace la pente. Autrement dit, quand il atteint 0, cela signifie qu'il est saturé. Ainsi, vous pouvez voir ce qui précède à partir de ce graphique. Quand je parle de l'Italie, on m'a beaucoup parlé, mais je pense qu'elle atteindra son apogée dans environ 10 jours.
Le même graphique est affiché pour l'Espagne, l'Allemagne, la Suisse, le Royaume-Uni et les Pays-Bas autres que l'Italie. Chevauchement, l'Angleterre est un peu en retrait, mais les autres ont des courbes similaires. L'axe vertical diffère selon chaque situation (population, etc.), mais la pente change à peu près de la même manière. Et, si vous regardez le diagramme de la pente, il semble qu'elle sera saturée tous ensemble dans environ 2 semaines **.
Les trois pays que sont le Japon, l'Iran et Bahreïn ont également des courbes très similaires dans un sens. Puisque la situation croissante est différente, l'axe y est complètement différent, donc je pense que la situation du système médical est différente. Cependant, l'inclinaison après le lever est assez similaire, et bien qu'ils aient été presque saturés ces derniers jours, l'Iran et le Japon ont de nouveau augmenté. Bahreïn a également une inclinaison négative, mais il est redevenu positif. Les gradients de ces trois pays sont ** 10 fois / 30 jours, ce qui est un gradient doux qui semble saturé à tout moment après sa stabilisation. Ces pays sont toujours infectés et doivent être contenus avec des tensions dans toute la société.
J'ai essayé de tracer la Suède et les États-Unis de la même manière.
Comme vous pouvez le voir en un coup d'œil, la hausse est similaire. Cependant, la Suède a une pente plus petite du milieu. Cependant, en regardant le graphique de la pente inférieure, il est presque parallèle à l'axe des x ces jours-ci, et il ne semble pas qu'il se dirige vers zéro. En d'autres termes, il ne semble pas saturer dans un proche avenir. Cependant, aux États-Unis, les données du 58e au 65e sont disponibles, et il semble que la pente s'approche rapidement de 0. Si vous prolongez cela, vous pouvez voir que ** il est possible que l'infection atteigne un pic dans environ 10 jours **. On peut voir que le gradient maximal des deux pays est d'environ 25 fois / 20 jours, ce qui est plus grand que le gradient précédent.
La bibliothèque à utiliser et la lecture des données sont les mêmes que la dernière fois. Les données sur le nombre de décès sont également traitées, mais elles sont supprimées car elles ne sont pas utilisées ci-dessous.
import numpy as np
from scipy.integrate import odeint
from scipy.optimize import minimize
import matplotlib.pyplot as plt
import pandas as pd
#Lisez les données CSV avec les pandas.
data = pd.read_csv('COVID-19/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv')
data_r = pd.read_csv('COVID-19/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_recovered_global.csv')
Ci-dessous, la fonction de traitement des données renvoie les données de numéro d'infection et de gradient traitées.
def data_city(city):
#Données de processus
t_cases = 0
t_recover = 0
t_deaths = 0
for i in range(0, len(data_r), 1):
if (data_r.iloc[i][1] == city): #for country/region
#if (data_r.iloc[i][0] == city): #for province:/state
print(str(data_r.iloc[i][0]) + " of " + data_r.iloc[i][1])
for day in range(4, len(data.columns), 1):
confirmed_r[day - 4] += data_r.iloc[i][day]
t_recover += data_r.iloc[i][day]
for i in range(0, len(data), 1):
if (data.iloc[i][1] == city): #for country/region
#if (data.iloc[i][0] == city): #for province:/state
print(str(data.iloc[i][0]) + " of " + data.iloc[i][1])
for day in range(4, len(data.columns), 1):
confirmed[day - 4] += data.iloc[i][day] - confirmed_r[day - 4]
diff_confirmed[day - 4] += confirmed[day-4] / confirmed_r[day - 4]
tl_confirmed = 0
dlog_confirmed = [0] * (len(data.columns) - 4)
dlog_confirmed[0]=np.log(confirmed[0])
dlog_confirmed[1]=np.log(confirmed[1])-np.log(confirmed[0])
for i in range(2, len(confirmed)-2, 1):
if confirmed[i] > 0:
dlog_confirmed[i]=(np.log(confirmed[i+1])-np.log(confirmed[i-1]))/2
else:
continue
tl_confirmed = confirmed[len(confirmed)-1] + confirmed_r[len(confirmed)-1] + confirmed_d[len(confirmed)-1]
t_cases = tl_confirmed
return confirmed, dlog_confirmed
Ce qui suit est utilisé pour tracer plusieurs pays sur le même diagramme. Entrez le pays que vous souhaitez dessiner dans city_list. Utilisez la fonction de traitement des données ci-dessus pour obtenir les données du nombre d'infection et son gradient un-à-un. Dessinez ceci. Donc fig, (ax1, ax2) =. .. .. La définition de est définie en dehors de l'instruction for. Enfin, je vais les afficher tous ensemble. Je n'ose pas définir la couleur, mais elle est automatiquement sélectionnée.
city_list={ "Spain","Germany","Switzerland","United Kingdom", "Netherlands" }
fig, (ax1,ax2) = plt.subplots(2,1,figsize=(1.6180 * 4, 4*2))
for city in city_list:
confirmed = [0] * (len(data.columns) - 4)
confirmed_r = [0] * (len(data_r.columns) - 4)
confirmed_d = [0] * (len(data_d.columns) - 4)
diff_confirmed = [0] * (len(data.columns) - 4)
days_from_22_Jan_20 = np.arange(0, len(data.columns) - 4, 1)
days_from_22_Jan_20_ = np.arange(0, len(data.columns) - 4, 1)
recovered_rate = [0] * (len(data_r.columns) - 4)
deaths_rate = [0] * (len(data_d.columns) - 4)
confirmed, dlog_confirmed = data_city(city)
#dessin matplotlib
lns1=ax1.semilogy(days_from_22_Jan_20, confirmed, ".-", label = str(city))
lns4=ax2.plot(days_from_22_Jan_20_, dlog_confirmed, ".-",label = str(city))
ax1.set_xlabel("days from 22, Jan, 2020")
ax1.set_ylabel("casas ")
ax2.set_ylabel("slopes ")
ax1.legend(loc=0)
ax2.legend(loc=0)
ax1.grid()
ax2.grid()
plt.pause(1)
plt.savefig('./fig/logmulti_{}_.png'.format(city))
plt.close()
En fait, on peut imaginer que la transition de la courbe du nombre de guérison sera similaire à la courbe du nombre d'infection, bien qu'il y ait un retard dans la récupération. Alors, j'ai essayé d'en parler ci-dessous. Premièrement, la substitution de $ I $ dans la troisième équation du modèle SIR donne ce qui suit.
\frac{dr}{dt} = \gamma I_0\exp(\gamma (R - 1)t) \\
Par conséquent, si vous prenez le logarithme des deux côtés
\ln (\frac{dr}{dt}) = \ln \gamma + \ln I_0 + \gamma (R - 1)t \\
Sera. Autrement dit, on peut s'attendre à ce que la différenciation temporelle (pente) du taux de récupération ait la même courbe que l'équation ci-dessus, et les sections y diffèrent de $ \ ln \ gamma $. Cependant, cela semble difficile à gérer en raison de la grande erreur, je vais donc le changer un peu.
Autrement dit, lorsque R est constamment intégré (bien que non analytiquement correct), l'équation suivante est obtenue.
r = \frac{I_0}{(R-1)}\exp(\gamma (R - 1)t) + r_0\\
Par conséquent, si vous prenez le logarithme des deux côtés
\ln r = \ln I_0 -\ln (R-1) + \gamma (R - 1)t +\ln r_0
Peut être écrit. Par conséquent, on peut s'attendre à ce qu'une courbe qui est presque parallèle et a une section y de $ -ln (R-1) + \ ln r_0 $ soit différente de la formule ci-dessus de $ \ ln I $.
Une belle courbe a été obtenue comme indiqué ci-dessous. Comme prévu, la courbe du nombre d'infection et la courbe du nombre de guérison commencent en parallèle et se croisent après le pic du nombre d'infection. Parallèlement à cela, la différence entre les deux courbes ($ \ log (A / B) = \ log A- \ log B $) passe linéairement par $ 10 ^ 0 $.
Les deux courbes sont parallèles, et j'ai conclu ci-dessus que le nombre d'infections est susceptible de culminer dans environ 10 jours, mais après cela, il semble qu'elles ne se croisent pas facilement. Après cela, on considère qu'ils vont s'approcher et se croiser, mais les données du nombre de guérison peuvent être suspectes.
Les deux courbes se rapprochent régulièrement, et après le nombre maximal d'infections, elles se croisent et la fin est visible.
Au Japon, les deux courbes se rapprochent progressivement, et l'écart se dirige vers 0, mais l'écart s'est creusé en raison de l'augmentation récente du nombre d'infections. Ainsi, comme pour ce qui précède, nous pouvons conclure que la propagation de l'infection se poursuit et qu'il est nécessaire de la supprimer.
・ Le nombre d'infections dans chaque pays a été tracé de manière logarithmique et classé, et le moment du nombre maximal d'infections a été prévu. ・ L'heure de la fin a été prédite en traçant simultanément le nombre d'infections et le nombre de guérisons.
・ Je veux suivre l'évolution de la situation chaque jour ・ La théorie de la partie supplémentaire étant suspecte, je vais l'organiser un peu plus et la connecter à la détermination des paramètres.
Recommended Posts