Dernière mise à jour : 7 mars 2020
Afin de mieux comprendre l'évolution de l'épidémie de coronavirus qui nous frappe actuellement, nous nous sommes procuré les données relatives à son évolution recensée jour par jour depuis le 22/01/2020 à travers le monde.
Dans cet article, nous ne nous risquerons pas en la réalisation d'une prédiction sur son évolution à l'aide d'algorithmes dédiés à l'apprentissage, mais nous réaliserons une simple analyse des données qui nous permettra d'apprécier la réalité des faits de cette épidémie.
#Lien officiel (John Hopkins) : https://github.com/CSSEGISandData/COVID-19
import requests
path = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/"
casConfirmes = "time_series_19-covid-Confirmed.csv"
casDecedes = "time_series_19-covid-Deaths.csv"
casGueris = "time_series_19-covid-Recovered.csv"
url = path+casConfirmes
print(url)
fichier = requests.get(url)
open('C:/DEVELOPPEMENT/JUPYTER_NOTEBOOK/20200305 - CoronaVirus/datas/time_series_19-covid-Confirmed.csv', 'wb').write(fichier.content)
url = path+casDecedes
fichier = requests.get(url)
open('C:/DEVELOPPEMENT/JUPYTER_NOTEBOOK/20200305 - CoronaVirus/datas/time_series_19-covid-Deaths.csv', 'wb').write(fichier.content)
url = path+casGueris
fichier = requests.get(url)
open('C:/DEVELOPPEMENT/JUPYTER_NOTEBOOK/20200305 - CoronaVirus/datas/time_series_19-covid-Recovered.csv', 'wb').write(fichier.content)
print("Telechargement terminé")
from datetime import datetime
#----> Cas confirmés
import pandas as pnd
#Chargement du fichier
datasConfirmes = pnd.read_csv('datas/time_series_19-covid-Confirmed.csv')
#Conversion des intitulés de colonnes (dates) en ligne
datasConfirmes = pnd.melt(datasConfirmes, id_vars=['Province/State','Country/Region','Lat','Long'], var_name='ObservationDate')
#Ajout de la colonne SNo
datasConfirmes.insert(0, 'SNo', range(0, len(datasConfirmes)))
#Formattage de la date
datasConfirmes['ObservationDate'] = pnd.to_datetime(datasConfirmes.ObservationDate, format='%m/%d/%y')
datasConfirmes['ObservationDate'] = datasConfirmes["ObservationDate"].dt.strftime("%m/%d/%Y")
#On renomme la colonne value en "Confirmed"
datasConfirmes = datasConfirmes.rename(columns={"value": "Confirmed"})
#----> Cas decedes
datasDecedes = pnd.read_csv('datas/time_series_19-covid-Deaths.csv')
datasDecedes = pnd.melt(datasDecedes, id_vars=['Province/State','Country/Region','Lat','Long'], var_name='ObservationDate')
datasDecedes.insert(0, 'SNo', range(0, len(datasDecedes)))
datasDecedes = datasDecedes.rename(columns={"value": "Deaths"})
#----> Cas gueris
datasGueris = pnd.read_csv('datas/time_series_19-covid-Recovered.csv')
datasGueris = pnd.melt(datasGueris, id_vars=['Province/State','Country/Region','Lat','Long'], var_name='ObservationDate')
datasGueris.insert(0, 'SNo', range(0, len(datasGueris)))
datasGueris = datasGueris.rename(columns={"value": "Recovered"})
#On fusionne les dataFrames
datasFusion = pnd.concat([datasConfirmes, datasDecedes['Deaths'],datasGueris['Recovered']], axis=1, join='inner')
#On sauvegarde le fichier
datasFusion.to_csv('datas/covid_19_datas.csv', index=False)
#Les données sont en libre téléchargement sur notre repository GitHub
#https://github.com/QSTOM-IT/datascience/tree/master/CORONAVIRUS-2019
#Lien officiel (John Hopkins) : https://github.com/CSSEGISandData/COVID-19
import pandas as pnd
datas = pnd.read_csv('datas/covid_19_datas.csv')
#Nombre d'observations et de caractéristiques
datas.shape
#Informations sur le nom des colonnes
datas.columns
#Affichage des 5 premières observations
datas.head(5)
#Affichage des 5 dernières observations
datas.tail(5)
#Informations sur les types de caractéristiques dont nous disposons
datas.info()
#On renomme certaines caracteristiques pour une facilité de manipulation ultérieure
datas = datas.rename(columns={"ObservationDate": "Date", "Province/State": "ProvinceState","Country/Region":"Country","Last Update":"LastUpdate"})
#Combien de données manquantes ?
datas.isnull().sum()
Certaines observations ne semblent pas posséder d'informations concernant la province ou l'état ce qui paraît logique car tous les pays n'ont pas de province ou d'état
#Conversion de la feature Date au format Date
datas['Date']= pnd.to_datetime(datas['Date'])
#Type de caractéristiques
datas.info()
#Liste des pays
datas["Country"].unique()
#On renomme le pays "Mainland China" en "China"
datas = datas.replace('Mainland China', 'China')
#Date minimale des observations
datas["Date"].min()
#Date maximale des observations
datas["Date"].max()
#Pour connaitre le nombre de cas à la date maximale l'erreur serait de faire la somme de la colonne Confirmed, car il s'agit
#d'une donnée cumulée chaque jour !
#Il faut donc extraire les données à la date souhaitée et de réaliser ensuite les différents calculs
#On extrait les données à la derniere date la plus récente
datasDerniereDate = datas[datas['Date'] == max(datas['Date'])].reset_index()
#Frequence des relevés (on constate un relevé journalier)
datas["Date"].unique()
#MONDIAL = Combien de cas : confirmés ? décédés ? Guerris ?
confirmes = datasDerniereDate["Confirmed"].sum()
decedes = datasDerniereDate["Deaths"].sum()
gueris = datasDerniereDate["Recovered"].sum()
print("NIVEAU MONDIAL EN DATE DU : "+max(datas['Date']).strftime("%d/%m/%Y"))
print(" Confirmes : "+str(confirmes))
print(" Decedes : "+str(decedes))
print(" Gueris : "+str(gueris))
print(" Taux mortalité (%): "+str(round((decedes/confirmes)*100,2)))
#Pour utilisation dans la synthèse
confirmesMondial = confirmes
decedesMondial = decedes
guerisMondial = gueris
mortaliteMondial = round((decedes/confirmes)*100,2)
#Date de début de l'épidémie en Chine (Cas confirmé > 0)
datasChine = datas[datas['Country'] == 'China'].reset_index()
datasChine = datasChine[datasChine.Confirmed > 0]
print("Date du premier cas = "+(min(datasChine['Date']).strftime("%d/%m/%Y")))
#En Chine
datasChine = datasDerniereDate[datasDerniereDate['Country']=="China"].reset_index()
confirmes = datasChine["Confirmed"].sum()
decedes = datasChine["Deaths"].sum()
gueris = datasChine["Recovered"].sum()
print("EN CHINE EN DATE DU : "+max(datas['Date']).strftime("%d/%m/%Y"))
print(" Confirmes : "+str(confirmes))
print(" Decedes : "+str(decedes))
print(" Gueris : "+str(gueris))
print(" Taux mortalité (%): "+str(round((decedes/confirmes)*100,2)))
confirmesChine = confirmes
decedesChine = decedes
guerisChine = gueris
mortaliteChine = round((decedes/confirmes)*100,2)
#Chronogramme de l'évolution de l'épidémie en chine
#Représentation des différents cas
#La courbe de mortalité semble plate, mais cela est dû à un nombre peu élevé de mortalité par rapport aux autres valeures ()
#Groupement par date en réalisant la somme de chaque feature
datasEvolutionChine = datas[datas['Country'] == 'China'].reset_index()
datasEvolutionChine = datasEvolutionChine.groupby('Date')['Confirmed', 'Deaths', 'Recovered'].sum().reset_index()
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
from matplotlib.pyplot import figure
figure(num=None, figsize=(12, 3), dpi=80, facecolor='w', edgecolor='k')
plt.plot(datasEvolutionChine['Date'],datasEvolutionChine['Confirmed'],color='black',label='Cas confirmés')
plt.plot(datasEvolutionChine['Date'],datasEvolutionChine['Recovered'],color='green',label='Cas guéris')
plt.plot(datasEvolutionChine['Date'],datasEvolutionChine['Deaths'],color='red',label='Cas décédés')
plt.title('Evolution du coronavirus Covid-19 en Chine en date du '+max(datas['Date']).strftime("%d/%m/%Y"))
plt.ylabel('Nombre de cas')
plt.xlabel('Dates')
plt.legend()
plt.show()
#Date de début de l'épidémie en France (Cas confirmé > 0)
datasFrance = datas[datas['Country'] == 'France'].reset_index()
datasFrance = datasFrance[datasFrance.Confirmed > 0]
print("Date du premier cas = "+(min(datasFrance['Date']).strftime("%d/%m/%Y")))
#En France
datasFrance = datasDerniereDate[datasDerniereDate['Country']=="France"].reset_index()
confirmes = datasFrance["Confirmed"].sum()
decedes = datasFrance["Deaths"].sum()
gueris = datasFrance["Recovered"].sum()
print("EN FRANCE EN DATE DU : "+max(datas['Date']).strftime("%d/%m/%Y"))
print(" Confirmes : "+str(confirmes))
print(" Decedes : "+str(decedes))
print(" Gueris : "+str(gueris))
print(" Taux mortalité (%): "+str(round((decedes/confirmes)*100,2)))
confirmesFrance = confirmes
decedesFrance = decedes
guerisFrance = gueris
mortaliteFrance = round((decedes/confirmes)*100,2)
#Chronogramme de l'évolution de l'épidémie en France
#Représentation des différents cas
#Groupement par date en réalisant la somme de chaque feature
datasEvolutionFrance = datas[datas['Country'] == 'France'].reset_index()
datasEvolutionFrance = datasEvolutionFrance.groupby('Date')['Confirmed', 'Deaths', 'Recovered'].sum().reset_index()
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
from matplotlib.pyplot import figure
figure(num=None, figsize=(12, 3), dpi=80, facecolor='w', edgecolor='k')
plt.plot(datasEvolutionFrance['Date'],datasEvolutionFrance['Confirmed'],color='black',label='Cas confirmés')
plt.plot(datasEvolutionFrance['Date'],datasEvolutionFrance['Recovered'],color='green',label='Cas guéris')
plt.plot(datasEvolutionFrance['Date'],datasEvolutionFrance['Deaths'],color='red',label='Cas décédés')
plt.title('Evolution du coronavirus Covid-19 en France en date du '+max(datas['Date']).strftime("%d/%m/%Y"))
plt.ylabel('Nombre de cas')
plt.xlabel('Dates')
plt.legend()
plt.show()
#Date de début d'accroissement de l'épidémie
#25/02/2020 pour la France de 18 cas à 38 cas
import datetime
dateDebutFrance = datetime.datetime(2020 ,2, 25)
datasFrance = datas[datas['Country'] == 'France'].reset_index()
datasFrance['Date'] = pnd.to_datetime(datasFrance['Date'])
filtre = (datasFrance['Date'] > dateDebutFrance) & (datasFrance['Date'] <= (max(datas['Date'])))
datasFrance = datasFrance.loc[filtre]
datasEvolutionFrance = datasFrance.groupby('Date')['Confirmed', 'Deaths', 'Recovered'].sum().reset_index()
from matplotlib.pyplot import figure
figure(num=None, figsize=(12, 3), dpi=80, facecolor='w', edgecolor='k')
plt.plot(datasEvolutionFrance['Date'],datasEvolutionFrance['Confirmed'],color='black',label='Cas confirmés')
plt.plot(datasEvolutionFrance['Date'],datasEvolutionFrance['Recovered'],color='green',label='Cas guéris')
plt.plot(datasEvolutionFrance['Date'],datasEvolutionFrance['Deaths'],color='red',label='Cas décédés')
plt.title('Evolution du coronavirus Covid-19 en France en date du '+max(datas['Date']).strftime("%d/%m/%Y"))
plt.ylabel('Nombre de cas')
plt.xlabel('Dates')
plt.legend()
plt.show()
#Date de début de l'épidémie en Italie (Cas confirmé > 0)
datasItalie = datas[datas['Country'] == 'Italy'].reset_index()
datasItalie = datasItalie[datasItalie.Confirmed > 0]
print("Date du premier cas = "+(min(datasItalie['Date']).strftime("%d/%m/%Y")))
#En Italie
datasItalie = datasDerniereDate[datasDerniereDate['Country']=="Italy"].reset_index()
confirmes = datasItalie["Confirmed"].sum()
decedes = datasItalie["Deaths"].sum()
gueris = datasItalie["Recovered"].sum()
print("EN ITALIE EN DATE DU : "+max(datas['Date']).strftime("%d/%m/%Y"))
print(" Confirmes : "+str(confirmes))
print(" Decedes : "+str(decedes))
print(" Gueris : "+str(gueris))
print(" Taux mortalité (%): "+str(round((decedes/confirmes)*100,2)))
confirmesItalie = confirmes
decedesItalie = decedes
guerisItalie = gueris
mortaliteItalie = round((decedes/confirmes)*100,2)
#Chronogramme de l'évolution de l'épidémie en Italie
#Groupement par date en réalisant la somme de chaque feature
datasEvolutionItalie = datas[datas['Country'] == 'Italy'].reset_index()
datasEvolutionItalie = datasEvolutionItalie.groupby('Date')['Confirmed', 'Deaths', 'Recovered'].sum().reset_index()
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
from matplotlib.pyplot import figure
figure(num=None, figsize=(12, 3), dpi=80, facecolor='w', edgecolor='k')
plt.plot(datasEvolutionItalie['Date'],datasEvolutionItalie['Confirmed'],color='black',label='Cas confirmés')
plt.plot(datasEvolutionItalie['Date'],datasEvolutionItalie['Recovered'],color='green',label='Cas guéris')
plt.plot(datasEvolutionItalie['Date'],datasEvolutionItalie['Deaths'],color='red',label='Cas décédés')
plt.title('Evolution du coronavirus Covid-19 en Italie en date du '+max(datas['Date']).strftime("%d/%m/%Y"))
plt.ylabel('Nombre de cas')
plt.xlabel('Dates')
plt.legend()
plt.show()
#Date de début d'accroissement de l'épidémie
#21/02/2020 pour l'Italie de 3 cas à 20 cas
dateDebutItalie = datetime.datetime(2020 ,2, 21)
datasItalie = datas[datas['Country'] == 'Italy'].reset_index()
datasItalie['Date'] = pnd.to_datetime(datasItalie['Date'])
filtre = (datasItalie['Date'] > dateDebutItalie) & (datasItalie['Date'] <= (max(datas['Date'])))
datasItalie = datasItalie.loc[filtre]
datasEvolutionItalie = datasItalie.groupby('Date')['Confirmed', 'Deaths', 'Recovered'].sum().reset_index()
from matplotlib.pyplot import figure
figure(num=None, figsize=(12, 3), dpi=80, facecolor='w', edgecolor='k')
plt.plot(datasEvolutionItalie['Date'],datasEvolutionItalie['Confirmed'],color='black',label='Cas confirmés')
plt.plot(datasEvolutionItalie['Date'],datasEvolutionItalie['Recovered'],color='green',label='Cas guéris')
plt.plot(datasEvolutionItalie['Date'],datasEvolutionItalie['Deaths'],color='red',label='Cas décédés')
plt.title('Evolution du coronavirus Covid-19 en Italie en date du '+max(datas['Date']).strftime("%d/%m/%Y"))
plt.ylabel('Nombre de cas')
plt.xlabel('Dates')
plt.legend()
plt.show()
Nous allons définir pour chaque pays la date d'accroissement de l'épidémie (c'est à dire la date où le nombre de cas confirmés a augmenté significativement).
Puis nous allons comparer pour chaque pays l'évolution de l'épidémie sur une période comportant un nombre de jours identiques.
#Date de début d'accroissement de l'épidémie pour chaque pays (obtenues via observations des données)
#22/01/2020 pour la Chine passage (début des relevés)
#25/02/2020 pour la France de 18 cas à 38 cas
#21/02/2020 pour l'Italie de 3 cas à 20 cas
import datetime
#Création des dates de début
dateDebutChine = datetime.datetime(2020, 1, 22)
dateDebutFrance = datetime.datetime(2020, 2, 25)
dateDebutItalie = datetime.datetime(2020 ,2, 21)
#Comme la France a démarrée aprés la chine et l'italie, on calcul le nombre de jours d'observations en France
nbjoursObservationsFrance = (max(datas['Date'])-dateDebutFrance).days
#Calcul des dates de fin
dateFinFrance = dateDebutFrance + datetime.timedelta(days=nbjoursObservationsFrance)
dateFinChine = dateDebutChine + datetime.timedelta(days=nbjoursObservationsFrance)
dateFinItalie = dateDebutItalie + datetime.timedelta(days=nbjoursObservationsFrance)
#Extraction des données en Chine
datasChine = datas[datas['Country'] == 'China'].reset_index()
datasChine['Date'] = pnd.to_datetime(datasChine['Date'])
filtre = (datasChine['Date'] > dateDebutChine) & (datasChine['Date'] <= dateFinChine)
datasChine = datasChine.loc[filtre]
datasEvolutionChine = datasChine.groupby('Date')['Confirmed', 'Deaths', 'Recovered'].sum().reset_index()
#Extraction des données en Italie
datasItalie = datas[datas['Country'] == 'Italy'].reset_index()
datasItalie['Date'] = pnd.to_datetime(datasItalie['Date'])
filtre = (datasItalie['Date'] > dateDebutItalie) & (datasItalie['Date'] <= dateFinItalie)
datasItalie = datasItalie.loc[filtre]
datasEvolutionItalie = datasItalie.groupby('Date')['Confirmed', 'Deaths', 'Recovered'].sum().reset_index()
#Extraction des données en France
datasFrance = datas[datas['Country'] == 'France'].reset_index()
datasFrance['Date'] = pnd.to_datetime(datasFrance['Date'])
filtre = (datasFrance['Date'] > dateDebutFrance) & (datasFrance['Date'] <= dateFinFrance)
datasFrance = datasFrance.loc[filtre]
datasEvolutionFrance = datasFrance.groupby('Date')['Confirmed', 'Deaths', 'Recovered'].sum().reset_index()
from matplotlib.pyplot import figure
figure(num=None, figsize=(12, 3), dpi=80, facecolor='w', edgecolor='k')
#Creation d'un tableau comportant le nombre de jours pour l'affichage sur le graphique
jours = [i for i in range(nbjoursObservationsFrance)]
plt.plot(jours,datasEvolutionChine['Confirmed'],color='black',label='Cas confirmés en Chine')
plt.plot(jours,datasEvolutionFrance['Confirmed'],color='blue',label='Cas confirmés en France')
plt.plot(jours,datasEvolutionItalie['Confirmed'],color='orange',label='Cas confirmés en Italie')
plt.title('Vitesse d\'évolution du Coronavirus en Chine, Italie et France')
plt.ylabel('Nombre de cas')
plt.xlabel('Dates')
plt.legend()
plt.show()
On constate une évolution plus rapide du coronavirus en Italie qu'en France sur une même période de jours. Le jour de la date de départ a été choisie comme suit :
from matplotlib.pyplot import figure
figure(num=None, figsize=(12, 3), dpi=80, facecolor='w', edgecolor='k')
#Creation d'un tableau comportant le nombre de jours pour l'affichage sur le graphique
jours = [i for i in range(nbjoursObservationsFrance)]
plt.plot(jours,datasEvolutionChine['Deaths'],color='black',label='Décès en Chine')
plt.plot(jours,datasEvolutionFrance['Deaths'],color='blue',label='Décès en France')
plt.plot(jours,datasEvolutionItalie['Deaths'],color='orange',label='Décès en Italie')
plt.title('Nombre de décès en Chine, Italie et France sur une période donnée')
plt.ylabel('Nombre de cas')
plt.xlabel('Dates')
plt.legend()
plt.show()
datasChine = datas[datas['Country'] == 'China'].reset_index()
datasEvolutionChine = datasChine.groupby('Date')['Confirmed', 'Deaths', 'Recovered'].sum().reset_index()
valeurPrecedente = 0
listeEvolution = []
for index, observation in datasEvolutionChine.iterrows():
evolution = observation['Confirmed'] - valeurPrecedente
valeurPrecedente = observation['Confirmed']
listeEvolution.append(evolution)
datasEvolutionChine['Evolution'] = listeEvolution
from matplotlib.pyplot import figure
figure(num=None, figsize=(12, 3), dpi=80, facecolor='w', edgecolor='k')
plt.bar(datasEvolutionChine['Date'],datasEvolutionChine['Evolution'],color='black',label='Nombre de nouveaux cas par jour')
plt.title('Nombre de nouveaux cas par jour en Chine')
plt.ylabel('Nombre de cas')
plt.xlabel('Dates')
plt.legend()
plt.show()
#Evolution sur les X derniers jours
nbJours = 5
from datetime import datetime, timedelta
dateMaximale = max(datasEvolutionChine['Date'])
#Le plus 1 sert à caluler le nombre de cas pour le premier jour en fonction du jour précédent
#Ce jour précédent sera ensuite supprimé
dateAuparavant = dateMaximale - timedelta(days=nbJours+1)
#Extraction des données
datasChine = datas[datas['Country'] == 'China'].reset_index()
filtre = (datasChine['Date'] > dateAuparavant) & (datasChine['Date'] <= dateMaximale)
datasChine = datasChine.loc[filtre]
datasEvolutionChine = datasChine.groupby('Date')['Confirmed', 'Deaths', 'Recovered'].sum().reset_index()
#Calcul du nombre de nouveau cas et ajout d'une nouvelle colonne au dataFrame
valeurPrecedente = 0
listeEvolution = []
for index, observation in datasEvolutionChine.iterrows():
evolution = observation['Confirmed'] - valeurPrecedente
valeurPrecedente = observation['Confirmed']
listeEvolution.append(evolution)
#On supprime la premiere ligne
import numpy as np
listeEvolution = np.array(listeEvolution)
listeEvolution = np.delete(listeEvolution, 0, 0)
datasEvolutionChine = datasEvolutionChine.drop(datasEvolutionChine.index[0])
datasEvolutionChine['Evolution'] = listeEvolution
from matplotlib.pyplot import figure
figure(num=None, figsize=(12, 3), dpi=80, facecolor='w', edgecolor='k')
plt.plot(datasEvolutionChine['Date'],datasEvolutionChine['Evolution'],color='black',label='Nombre de nouveaux cas ces '+str(nbJours)+' derniers jours')
plt.title('Nombre de nouveaux cas ces '+str(nbJours)+' derniers jours en Chine')
plt.ylabel('Nombre de cas')
plt.xlabel('Dates')
plt.legend()
plt.show()
#Tendance
X = [i for i in range(0, len(listeEvolution))]
X = np.array(X).reshape((-1, 1))
Y = np.array(datasEvolutionChine['Evolution'])
from sklearn import linear_model
regr = linear_model.LinearRegression()
regr.fit(X, Y)
coef = regr.coef_
if (coef == 0 ):
evolutionChine = "Stable"
if (coef > 0 ):
evolutionChine = "Augmentation"
if (coef < 0 ):
evolutionChine = "Diminution"
print("Tendance = "+evolutionChine)
datasItalie = datas[datas['Country'] == 'Italy'].reset_index()
datasEvolutionItalie = datasItalie.groupby('Date')['Confirmed', 'Deaths', 'Recovered'].sum().reset_index()
valeurPrecedente = 0
listeEvolution = []
for index, observation in datasEvolutionItalie.iterrows():
evolution = observation['Confirmed'] - valeurPrecedente
valeurPrecedente = observation['Confirmed']
listeEvolution.append(evolution)
datasEvolutionItalie['Evolution'] = listeEvolution
from matplotlib.pyplot import figure
figure(num=None, figsize=(12, 3), dpi=80, facecolor='w', edgecolor='k')
plt.bar(datasEvolutionItalie['Date'],datasEvolutionItalie['Evolution'],color='black',label='Nombre de nouveaux cas par jour')
plt.title('Nombre de nouveaux cas par jour en Italie')
plt.ylabel('Nombre de cas')
plt.xlabel('Dates')
plt.legend()
plt.show()
#Evolution sur les X derniers jours
nbJours = 5
from datetime import datetime, timedelta
dateMaximale = max(datasEvolutionChine['Date'])
#Le plus 1 sert à caluler le nombre de cas pour le premier jour en fonction du jour précédent
#Ce jour précédent sera ensuite supprimé
dateAuparavant = dateMaximale - timedelta(days=nbJours+1)
#Extraction des données
datasItalie = datas[datas['Country'] == 'Italy'].reset_index()
datasItalie['Date'] = pnd.to_datetime(datasItalie['Date'])
filtre = (datasItalie['Date'] > dateAuparavant) & (datasItalie['Date'] <= dateMaximale)
datasItalie = datasItalie.loc[filtre]
datasEvolutionItalie = datasItalie.groupby('Date')['Confirmed', 'Deaths', 'Recovered'].sum().reset_index()
#Calcul du nombre de nouveau cas et ajout d'une nouvelle colonne au dataFrame
valeurPrecedente = 0
listeEvolution = []
for index, observation in datasEvolutionItalie.iterrows():
evolution = observation['Confirmed'] - valeurPrecedente
valeurPrecedente = observation['Confirmed']
listeEvolution.append(evolution)
#On supprime la premiere ligne
import numpy as np
listeEvolution = np.array(listeEvolution)
listeEvolution = np.delete(listeEvolution, 0, 0)
datasEvolutionItalie = datasEvolutionItalie.drop(datasEvolutionItalie.index[0])
datasEvolutionItalie['Evolution'] = listeEvolution
from matplotlib.pyplot import figure
figure(num=None, figsize=(12, 3), dpi=80, facecolor='w', edgecolor='k')
plt.plot(datasEvolutionItalie['Date'],datasEvolutionItalie['Evolution'],color='black',label='Nombre de nouveaux cas ces '+str(nbJours)+' derniers jours')
plt.title('Nombre de nouveaux cas ces '+str(nbJours)+' derniers jours en Italie')
plt.ylabel('Nombre de cas')
plt.xlabel('Dates')
plt.legend()
plt.show()
#Tendance
X = [i for i in range(0, len(listeEvolution))]
X = np.array(X).reshape((-1, 1))
Y = np.array(datasEvolutionItalie['Evolution'])
from sklearn import linear_model
regr = linear_model.LinearRegression()
regr.fit(X, Y)
coef = regr.coef_
if (coef == 0 ):
evolutionItalie = "Stable"
if (coef > 0 ):
evolutionItalie = "Augmentation"
if (coef < 0 ):
evolutionItalie = "Diminution"
print("Tendance = "+evolutionItalie)
datasFrance = datas[datas['Country'] == 'France'].reset_index()
datasEvolutionFrance = datasFrance.groupby('Date')['Confirmed', 'Deaths', 'Recovered'].sum().reset_index()
valeurPrecedente = 0
listeEvolution = []
for index, observation in datasEvolutionFrance.iterrows():
evolution = observation['Confirmed'] - valeurPrecedente
valeurPrecedente = observation['Confirmed']
listeEvolution.append(evolution)
datasEvolutionFrance['Evolution'] = listeEvolution
from matplotlib.pyplot import figure
figure(num=None, figsize=(12, 3), dpi=80, facecolor='w', edgecolor='k')
plt.bar(datasEvolutionFrance['Date'],datasEvolutionFrance['Evolution'],color='black',label='Nombre de nouveaux cas par jour')
plt.title('Nombre de nouveaux cas par jour en France')
plt.ylabel('Nombre de cas')
plt.xlabel('Dates')
plt.legend()
plt.show()
#Evolution sur les X derniers jours
nbJours = 5
from datetime import datetime, timedelta
dateMaximale = max(datasEvolutionChine['Date'])
#Le plus 1 sert à caluler le nombre de cas pour le premier jour en fonction du jour précédent
#Ce jour précédent sera ensuite supprimé
dateAuparavant = dateMaximale - timedelta(days=nbJours+1)
#Extraction des données
datasFrance = datas[datas['Country'] == 'France'].reset_index()
datasFrance['Date'] = pnd.to_datetime(datasFrance['Date'])
filtre = (datasFrance['Date'] > dateAuparavant) & (datasFrance['Date'] <= dateMaximale)
datasFrance = datasFrance.loc[filtre]
datasEvolutionFrance = datasFrance.groupby('Date')['Confirmed', 'Deaths', 'Recovered'].sum().reset_index()
#Calcul du nombre de nouveau cas et ajout d'une nouvelle colonne au dataFrame
valeurPrecedente = 0
listeEvolution = []
for index, observation in datasEvolutionFrance.iterrows():
evolution = observation['Confirmed'] - valeurPrecedente
valeurPrecedente = observation['Confirmed']
listeEvolution.append(evolution)
#On supprime la premiere ligne
import numpy as np
listeEvolution = np.array(listeEvolution)
listeEvolution = np.delete(listeEvolution, 0, 0)
datasEvolutionFrance = datasEvolutionFrance.drop(datasEvolutionFrance.index[0])
datasEvolutionFrance['Evolution'] = listeEvolution
from matplotlib.pyplot import figure
figure(num=None, figsize=(12, 3), dpi=80, facecolor='w', edgecolor='k')
plt.plot(datasEvolutionFrance['Date'],datasEvolutionFrance['Evolution'],color='black',label='Nombre de nouveaux cas ces '+str(nbJours)+' derniers jours')
plt.title('Nombre de nouveaux cas ces '+str(nbJours)+' derniers jours en France')
plt.ylabel('Nombre de cas')
plt.xlabel('Dates')
plt.legend()
plt.show()
#Tendance
X = [i for i in range(0, len(listeEvolution))]
X = np.array(X).reshape((-1, 1))
Y = np.array(datasEvolutionFrance['Evolution'])
from sklearn import linear_model
regr = linear_model.LinearRegression()
regr.fit(X, Y)
coef = regr.coef_
if (coef == 0 ):
evolutionFrance = "Stable"
if (coef > 0 ):
evolutionFrance = "Augmentation"
if (coef < 0 ):
evolutionFrance = "Diminution"
print("Tendance = "+evolutionFrance)
datasSynthese = [
["MONDE",confirmesMondial,decedesMondial,guerisMondial,mortaliteMondial,"-"],
["CHINE",confirmesChine,decedesChine,guerisChine,mortaliteChine,evolutionChine],
["ITALIE",confirmesItalie,decedesItalie,guerisItalie,mortaliteItalie,evolutionItalie],
["FRANCE",confirmesFrance,decedesFrance,guerisFrance,mortaliteFrance,evolutionFrance]
]
synthese = pnd.DataFrame (datasSynthese, columns = ['ZONE','NB CONFIRMES','NB DECEDES','NB GUERIS','TAUX MORTALITE','EVOLUTION'])
synthese
import folium
carteDuMonde = folium.Map(location=[0, 0], tiles='cartodbpositron',
min_zoom=1.5, max_zoom=4, zoom_start=1.5)
for i in range(0, len(datas)):
folium.Circle(
location=[datas.iloc[i]['Lat'], datas.iloc[i]['Long']],
color='crimson',
tooltip = '<li><bold>Pays : '+str(datas.iloc[i]['Country'])+
'<li><bold>Province : '+str(datas.iloc[i]['ProvinceState'])+
'<li><bold>Confirmes : '+str(datas.iloc[i]['Confirmed'])+
'<li><bold>Decedes : '+str(datas.iloc[i]['Deaths'])+
'<li><bold>Gueris : '+str(datas.iloc[i]['Recovered']),
radius=int(datas.iloc[i]['Confirmed'])).add_to(carteDuMonde)
#Affichage de la carte (cela prend un peu de temps)
carteDuMonde