__La pandémie de Covid-19 aux États-Unis commence lorsque le premier cas confirmé de Covid-19 est annoncé en janvier 2020.
Le bilan des États-Unis approche la barre des 100.000 morts. Le pays compte ce mardi 26 mai 1.662.898 cas recensés. Selon l'institut Johns Hopkins, le pays compte 532 morts en 24h (638 hier), soit près de 98.218 décès au total. Malgré ces chiffres élevés, les 50 États américains ont entamé un déconfinement partiel et progressif, en conservant certaines restrictions sur les rassemblements afin de freiner la propagation du virus. Le président américain a interdit dimanche l'entrée aux États-Unis aux voyageurs en provenance du Brésil, devenu le deuxième pays le plus touché par la pandémie de coronavirus, a annoncé la Maison Blanche. source : https://www.sortiraparis.com/actualites/a-paris/articles/212134-coronavirus-dans-le-monde-78-morts-en-italie-et-134-au-royaume-uni-en-24h _
__Le but de ces modélisations c'est de voir si le confinement est un facteur qui stoppe le propagation du virus .
__DIAGRAMME CIRCULAIRE
On compare les cas confirmés du covid-19 pour quatre états
__newyork "confiné"
__oklahoma "non confiné"
__california "confiné"
__dakota du sud "non confiné"
On considère le nombre des cas sur 1000 000 de personnes et on les calcule à la main pour la date **7/05/2020 .
# coding: utf-8
import matplotlib.pyplot as plt
import random
name = ['NEW YORK','Oklahoma','Calif','Dakota du sud']
data = [39875 ,1348,1408,3015]
explode=(0, 0.15, 0, 0)
plt.pie(data, explode=explode, labels=name, autopct='%1.1f%%', startangle=90, shadow=True)
plt.axis('equal')
plt.show()
__Calfornie est plus peuplé que New york et les deux sont confinés , sur le diagramme on voit la grande différence des cas entre les deux états.
_NEW YORK se caractérise par de fortes inégalités socio-économiques, des situations de surpopulation dans certains quartiers populaires (Queens, Bronx), où beaucoup de gens souffrent déjà de problèmes de santé, sans accès aux soins. Ces quartiers sont aujourd'hui les plus touchés.
_La Californie a été le premier du pays à imposer des mesures de confinement strictes.
__La rapidité de mise en oeuvre des mesures compte beaucoup plus que leur intensité .
__Le confinement aux états Unis commence le 20/03/2020 .
**On varie le taux de transmission à chaque contact qu'on nomme " beta " dans trois étape : ( NB: les valeurs de cette variation sont aléatoires on vise plutôt l'influence du contact des gens durant la propagation du virus )
(1) **Du 20/03/2020 au 20/05/2020 (61 jours ). beta=0.5
(2) **Du 20/04/2020 au 20/05/2020 ( 30 jours ) . beta=0.25
(3) **Du 20/05/2020 au 29/05/2020 (10 jours ) . beta=0,35
Pour le (1) et le (2) on remarque que la date d'arrivée est la même mais le beta dimminue pour le (2) pour traduire l'arrêt des activités après un mois de confinement . Pour le (3) la date de départ est le 20/05/2020 avec un beta plus faible que le beta de (1) pour traduire le déconfinement progressif aux Etats unis .
Les statistiques des cas inféctés ,décès ou guéris ont été prise du lien suivant https://www.coronavirus-statistiques.com/stats-globale/toutes-les-statistiques-coronavirus-covid19/
PREMIERE ETAPE
__On applique le modèle SEIRD pour une phase de 61 Jours dès le 20 MARS .
__Dans un premier temps on fixe le beta à 0.5 ( Taux de transmition à chaque contact ).
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
# Partie algo : Ne pas modifier
def SEIRD(y0, t, N, beta, sigma, gamma, mu):
def deriv2(y0, t, N, beta, sigma, gamma, mu):
S, E, I, R, D = y0
dSdt = -(beta/N)*I*S
dEdt = (beta/N)*I*S - sigma*E
dIdt = sigma*E - gamma*I - mu*I
dRdt = gamma*I
dDdt = mu*I
return dSdt, dEdt, dIdt, dRdt, dDdt
resol = odeint(deriv2, y0, t, args=(N, beta, sigma, gamma, mu))
S, E, I, R, D = resol.T
return S, E, I, R, D
def SEIRD_kphases(y0, Tn, N, Tbeta, sigma, gamma, mu):
S, E, I, R, D = [], [], [], [], []
n = 0
y = y0
for i in range (len(Tn)):
ni, betai = Tn[i], Tbeta[i]
ti = np.linspace(0, ni, ni+1)
Si, Ei, Ii, Ri, Di = SEIRD(y, ti, N, betai, sigma, gamma, mu)
S = np.concatenate((S,Si[1:]))
E = np.concatenate((E,Ei[1:]))
I = np.concatenate((I,Ii[1:]))
R = np.concatenate((R,Ri[1:]))
D = np.concatenate((D,Di[1:]))
n = n+ni
y = S[n-1], E[n-1], I[n-1], R[n-1], D[n-1]
t = np.linspace(1,n,n) #On récupère le linspace du nombre
#de jours au total : n
return S, E, I, R, D, t
def MoyMob(T,k): #Entier k : Nombre de valeurs prises
l = len(T) #de chaque côté des éléments de T
L = np.zeros(l)
if ((2*k+1)>l):
return L
else :
for i in range(l):
if ((i-k)<0): #Soit k < i
m = i
L[i] = np.mean( T[(i-m):(i+m+1)] ) #i-m = 0
elif ((i+k)>(l-1)): #Soit k > l-1-i
m = l-1-i
L[i] = np.mean( T[(i-m):(i+m+1)]) #i+m+1 = l
else :
L[i] = np.mean( T[(i-k):(i+k+1)] )
return L
# Partie données : Population
# N : Population totale étudiée
N = 328000000
# D0 : Nombre initial de décédés (en général 0)
D0 = 229
# R0 : Nombre initial de rétablis (en général 0)
R0 = 0
# E0 : Nombre initial d'exposés = infectés non infectieux / contaminés non contaminants (en général 0)
E0 = 0
# I0 : Nombre initial d'infectés
I0 = 17235
# S0 : Nombre initial de sains / susceptibles d'êtres infectés (le reste de la population)
S0 = N - E0 - I0 - R0 - D0
# y0 : Vecteurs comportant ces données initiales
y0 = S0, E0, I0, R0, D0
# Partie données : Epidemie
# A modifier à votre guise
# Tn = Tableau contenant pour chaque phase la durée n (jours)
Tn = [61]
# Tbeta = Tableau contenant pour chaque phase le taux beta (jours^(-1))
Tbeta = [0.5]
# dincub = Durée d'incubation : Temps avant d'être contaminant une fois contaminé (jours)
dincub = 4
# dret = Durée de rétablissement : Temps que l'on reste contaminant (jours)
dret = 17
# m = Taux de mortalité parmis les infectés en %
m = 2.5
# Pas besoin de modifier celles-ci car elles dépendent des précédentes
# sigma = Inverse de la durée d'incubation (jours^(-1)) : Taux d'invidus qui passe de E à I par jour
sigma = 1/dincub
# gamma = Inverse de la durée de rétablissement (jour^(-1)) : Taux d'individus qui passe de I à R par jour
gamma = 1/dret
# mu = Taux de mortalité journalier parmis les infectés (jours^(-1)) : Taux d'individus qui passe de I à D par jour
mu = (m/100)*gamma
# Partie Résultats
S, E, I, R, D, t = SEIRD_kphases(y0, Tn, N, Tbeta, sigma, gamma, mu)
#dDdt : Nombre de décédés non cumulés : jour par jour
dDdt = I*mu
# Partie Graphe
fig = plt.figure(facecolor='w')
plt.plot(t, dDdt, 'green', alpha=0.5, lw=2, label='Morts par Jour à partir du 20/03/2020 AU 20/05/2020')
#Ligne de code pour tracer Y ci-dessus
plt.xlabel('Temps (jours)')
plt.ylabel('Nombre (individus)')
plt.grid(b=True, which='major', c='w', lw=2, ls='-')
legend = plt.legend()
legend.get_frame().set_alpha(0.5)
plt.show()
**Après 61 jours le nombre des morts est plus de 200000 (Pour la date du 20/05/2020 ) .
DEUXIEME ETAPE
__Maintenant on fixe beta à 0.25 simplement pour exprimer que la probabilité de la transmition à chaque contact va dimunier après le 20/04/2020 .
__On applique les statistiques du 20/04/2020 pour une phase de 30 jours .
# -*- coding: utf-8 -*-
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
# Partie Algo (Ne pas modifier)
def SEIRD(y0, t, N, beta, sigma, gamma, mu):
def deriv2(y0, t, N, beta, sigma, gamma, mu):
S, E, I, R, D = y0
dSdt = -(beta/N)*I*S
dEdt = (beta/N)*I*S - sigma*E
dIdt = sigma*E - gamma*I - mu*I
dRdt = gamma*I
dDdt = mu*I
return dSdt, dEdt, dIdt, dRdt, dDdt
resol = odeint(deriv2, y0, t, args=(N, beta, sigma, gamma, mu))
S, E, I, R, D = resol.T
return S, E, I, R, D
def MoyMob(T,k): #Entier k : Nombre de valeurs prises
l = len(T) #de chaque côté des éléments de T
L = np.zeros(l)
if ((2*k+1)>l):
return L
else :
for i in range(l):
if ((i-k)<0): #Soit k < i
m = i
L[i] = np.mean( T[(i-m):(i+m+1)] ) #i-m = 0
elif ((i+k)>(l-1)): #Soit k > l-1-i
m = l-1-i
L[i] = np.mean( T[(i-m):(i+m+1)]) #i+m+1 = l
else :
L[i] = np.mean( T[(i-k):(i+k+1)] )
return L
# Partie données : Population
# N : Population totale étudiée
N = 328000000
# D0 : Nombre initial de décédés (en général 0)
D0 =42094
# R0 : Nombre initial de rétablis (en général 0)
R0 = 0
# E0 : Nombre initial d'exposés = infectés non infectieux / contaminés non contaminants (en général 0)
E0 = 0
# I0 : Nombre initial d'infectés
I0 = 784326
# S0 : Nombre initial de sains / susceptibles d'êtres infectés (le reste de la population)
S0 = N - E0 - I0 - R0 - D0
# y0 : Vecteurs comportant ces données initiales
y0 = S0, E0, I0, R0, D0
# Partie données : Epidemie
# A modifier à votre guise
# n = Nombre de jours sur lequel vous réalisez la simulation (jours)
n = 30
# beta = Taux de transmission à chaque contact (jours^(-1)) : Taux d'individus qui passe de S à I (E dans modèle SIERD) par jour
beta = 0.25
# dincub = Durée d'incubation : Temps avant d'être contaminant une fois contaminé (jours)
dincub = 4
# dret = Durée de rétablissement : Temps que l'on reste contaminant (jours)
dret = 17
# m = Taux de mortalité parmis les infectés en %
m = 2.5
# Pas besoin de modifier celles-ci car elles dépendent des précédentes
# t = Un échantillon de temps sous forme d'un tableau, dépendant du n ci dessus
t = np.linspace(0, n, n+1)
# sigma = Inverse de la durée d'incubation (jours^(-1)) : Taux d'invidus qui passe de E à I par jour
sigma = 1/dincub
# gamma = Inverse de la durée de rétablissement (jour^(-1)) : Taux d'individus qui passe de I à R par jour
gamma = 1/dret
# mu = Taux de mortalité journalier parmis les infectés (jours^(-1)) : Taux d'individus qui passe de I à D par jour
mu = (m/100)*gamma
# Partie Résultats
S, E, I, R, D = SEIRD(y0, t, N, beta, sigma, gamma, mu) #On enleve les
S, E, I, R, D, t = S[1:], E[1:], I[1:], R[1:], D[1:], t[1:] #conditions initiales
#dDdt : Nombre de décédés théoriques non cumulés : jour par jour
dDdt = I*mu
# Partie Graphe
fig = plt.figure(facecolor='w')
plt.plot(t, dDdt, 'red', alpha=0.5, lw=2, label='Morts par Jour à partir du 20/04/2020 AU 20/05/2020')
#Ligne de code pour tracer Y ci-dessus
plt.xlabel('Temps (jours)')
plt.ylabel('Nombre (individus)')
plt.grid(b=True, which='major', c='w', lw=2, ls='-')
legend = plt.legend()
legend.get_frame().set_alpha(0.5)
plt.show()
**Après 30 jours le nombre des morts est plus de 20000 (Le 20/05/2020 ) .
__Si on compare les deux courbes pour la même date 20/05/2020 on peut conclure que le confinement est une arme efficace pour réduire le nombre des cas .
___SITUATION ACTUELLE AUX ETATS UNIS___
__Les derniers bilans sont en baisse et pour relancer l'économie qui a été arrêtée par l'épidemie le gouvernemant a decidé de déconfiner quelques états .
__Cette fois on applique les statistiques de la date 20/05/2020 pour une phase de 10 jours avec un beta =0.35 .
# -*- coding: utf-8 -*-
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
# Partie Algo (Ne pas modifier)
def SEIRD(y0, t, N, beta, sigma, gamma, mu):
def deriv2(y0, t, N, beta, sigma, gamma, mu):
S, E, I, R, D = y0
dSdt = -(beta/N)*I*S
dEdt = (beta/N)*I*S - sigma*E
dIdt = sigma*E - gamma*I - mu*I
dRdt = gamma*I
dDdt = mu*I
return dSdt, dEdt, dIdt, dRdt, dDdt
resol = odeint(deriv2, y0, t, args=(N, beta, sigma, gamma, mu))
S, E, I, R, D = resol.T
return S, E, I, R, D
def MoyMob(T,k): #Entier k : Nombre de valeurs prises
l = len(T) #de chaque côté des éléments de T
L = np.zeros(l)
if ((2*k+1)>l):
return L
else :
for i in range(l):
if ((i-k)<0): #Soit k < i
m = i
L[i] = np.mean( T[(i-m):(i+m+1)] ) #i-m = 0
elif ((i+k)>(l-1)): #Soit k > l-1-i
m = l-1-i
L[i] = np.mean( T[(i-m):(i+m+1)]) #i+m+1 = l
else :
L[i] = np.mean( T[(i-k):(i+k+1)] )
return L
# Partie données : Population
# N : Population totale étudiée
N = 328000000
# D0 : Nombre initial de décédés (en général 0)
D0 = 93439
# R0 : Nombre initial de rétablis (en général 0)
R0 = 294312
# E0 : Nombre initial d'exposés = infectés non infectieux / contaminés non contaminants (en général 0)
E0 = 0
# I0 : Nombre initial d'infectés
I0 = 1551853
# S0 : Nombre initial de sains / susceptibles d'êtres infectés (le reste de la population)
S0 = N - E0 - I0 - R0 - D0
# y0 : Vecteurs comportant ces données initiales
y0 = S0, E0, I0, R0, D0
# Partie données : Epidemie
# A modifier à votre guise
# n = Nombre de jours sur lequel vous réalisez la simulation (jours)
n = 10
# beta = Taux de transmission à chaque contact (jours^(-1)) : Taux d'individus qui passe de S à I (E dans modèle SIERD) par jour
beta = 0.35
# dincub = Durée d'incubation : Temps avant d'être contaminant une fois contaminé (jours)
dincub = 4
# dret = Durée de rétablissement : Temps que l'on reste contaminant (jours)
dret = 17
# m = Taux de mortalité parmis les infectés en %
m = 2.5
# t = Un échantillon de temps sous forme d'un tableau, dépendant du n ci dessus
t = np.linspace(0, n, n+1)
# sigma = Inverse de la durée d'incubation (jours^(-1)) : Taux d'invidus qui passe de E à I par jour
sigma = 1/dincub
# gamma = Inverse de la durée de rétablissement (jour^(-1)) : Taux d'individus qui passe de I à R par jour
gamma = 1/dret
# mu = Taux de mortalité journalier parmis les infectés (jours^(-1)) : Taux d'individus qui passe de I à D par jour
mu = (m/100)*gamma
# Partie Résultats
S, E, I, R, D = SEIRD(y0, t, N, beta, sigma, gamma, mu) #On enleve les
S, E, I, R, D, t = S[1:], E[1:], I[1:], R[1:], D[1:], t[1:] #conditions initiales
#dDdt : Nombre de décédés théoriques non cumulés : jour par jour
dDdt = I*mu
# Partie Graphe
fig = plt.figure(facecolor='w')
plt.plot(t, dDdt, 'purple', alpha=0.5, lw=2, label='Morts par jour à partir du 20/05/2020')
#Ligne de code pour tracer Y ci-dessus
plt.xlabel('Temps (jours)')
plt.ylabel('Nombre (individus)')
plt.grid(b=True, which='major', c='w', lw=2, ls='-')
legend = plt.legend()
legend.get_frame().set_alpha(0.5)
plt.show()
**Le nombre des cas est supérieur à 6000 ; ce nombre reste inferieur aux nombres qu'on a déjà obtenu pour les deux premières courbes .
_Ce résultat montre qu'on a probablement passé le pic épidémique.
**La visualisation de ces courbes c'est plus qu'un nombre c'est pour prendre conscience du confinement .