<jupyter_start><jupyter_text>Les types de modèles de propagation * Le modèle SI est un modèle où il n'y a que deux possibilités : ou bien l'individu est susceptible d'être infecté (S), ou bien il est infecté à vie (I). Cela s'applique par exemple au cas du SIDA. Pour le coronavirus, nous ne l'utiliserons pas.* Le modèle SIR est un modèle où l'individu peut être guéri du virus, et être donc immunisé (R). Ce modèle s'applique bien au problème du coronavirus, et nous l'avons déjà modélisé.* Le modèle SIS est un modèle où l'individu peut guérir, mais est alors de nouveau susceptible d'être infecté. Il n'y a pas d'immunité. On va tester ce modèle là, puisque nous n'avons pas la certitude qu'il est impossible de contracter plusieurs fois le coronavirus. * Dans le modèle SEIR, il y a un état intermédiaire, exposé (E). Un individu qui a été au contact d'une personne infectée devient infecté avec une certaine probabilité. L'individu peut être susceptible, exposé, infecté puis immunisé.* Le modèle SEIS est identique au modèle SEIR mais sans immunité.D'autres caractéristiques peuvent être ajoutées à ces modèles, tels que la possibilité de déceder (D), d'être mis en quarantaine (Q) ou encore d'êre immunisé à la naissance (M).  Choix d'un modèle de propagation du virus Je vais donc tester un modèle SIS où les individus qui guérissent du coronavirus sont de nouveau susceptobles de tomber malade.<jupyter_code>import datetime
import os
import yaml

import numpy as np
import pandas as pd
# Lecture du fichier d'environnement
ENV_FILE = '..\env.yaml'
with open(ENV_FILE) as f:
    params = yaml.load(f , Loader=yaml.FullLoader)

# Initialisation des chemins vers les fichiers
ROOT_DIR = os.path.dirname(os.path.abspath(ENV_FILE))
DATA_FILE = os.path.join(ROOT_DIR,
                         params['directories']['processed'],
                         params['files']['all_data'])

# Lecture du fichier de données
epidemie_df = (pd.read_csv(DATA_FILE, parse_dates=['Last Update'])
    .assign(day=lambda _df: _df['Last Update'].dt.date)
               .drop_duplicates(subset=['Country/Region', 'Province/State', 'day'])
               [lambda df: df['day'] <= datetime.date(2020, 3, 12)]
    )
epidemie_df =epidemie_df.groupby(['Country/Region', 'day']).sum()
epidemie_df['Infected'] = epidemie_df['Confirmed'].groupby(['Country/Region']).diff()
epidemie_df = epidemie_df.reset_index()
# Importation de la base de données de la Banque Mondiale pour la population par pays en 2018

import pandas as pd

pop_df = pd.read_excel(r'..\Population.xlsx')
pop_df = pop_df[['Country Name','2018 [YR2018]']]
pop_df = pop_df.rename(columns={"Country Name": "Country", "2018 [YR2018]": "Population"})
epidemie_df = epidemie_df.rename(columns={'Country/Region':'Country'})
# Pour pouvoir merger les deux base de données, je fais en sorte que les noms des pays soient identiques

pop_df.loc[(pop_df.Country == 'Brunei Darussalam'),'Country']='Brunei'
pop_df.loc[(pop_df.Country == 'Congo, Dem. Rep.'),'Country']='Congo (Kinshasa)'
pop_df.loc[(pop_df.Country == 'United States'),'Country']='US'
pop_df.loc[(pop_df.Country == 'Egypt, Arab Rep.'),'Country']='Egypt'
pop_df.loc[(pop_df.Country == 'United Kingdom'),'Country']='UK'
pop_df.loc[(pop_df.Country == 'Hong Kong SAR, China'),'Country']='Hong Kong'
pop_df.loc[(pop_df.Country == 'Iran, Islamic Rep.'),'Country']='Iran'
pop_df.loc[(pop_df.Country == 'Korea, Rep.'),'Country']='South Korea'
pop_df.loc[(pop_df.Country == 'Macao SAR, China'),'Country']='Macau'
pop_df.loc[(pop_df.Country == 'China'),'Country']='Mainland China'
pop_df.loc[(pop_df.Country == 'Russian Federation'),'Country']='Russia'
pop_df.loc[(pop_df.Country == 'St. Martin (French part)'),'Country']='Saint Martin'
pop_df.loc[(pop_df.Country == 'Slovak Republic'),'Country']='Slovakia'
# Je merge les deux base de données, certaines regions n'ont pas pu être mergées
# Pour celles-là, il faudra entrer manuellement la population

final_df=pd.merge(epidemie_df, pop_df, on='Country', how='outer', indicator=True)
final_df=final_df[final_df['_merge'] == "both"]
# Cette fonction défini la taille de la population selon le pays pour lequel on veut avoir la propagation du virus

def pop_pays(pays):
    global pop
    pop=final_df[final_df['Country'] == pays]['Population'].iloc[0]
# Choix du pays à modéliser

pop_pays('France')
pop
# Modèle SIS

import matplotlib.pylab as plt

S = pop - 1
I = 1
beta = 0.2
gamma = 0.01

sus = []
inf = []

def infection(S, I, pop):
    for t in range (0, 500):
        S, I = S - beta * ((S * I / pop)) + gamma * I, I + beta * ((S * I) / pop) - gamma * I

        sus.append(S)
        inf.append(I)


infection(S, I, pop)


figure = plt.figure()
figure.canvas.set_window_title('SIS model')

infectes,=plt.plot(inf, label='Infectes')

susceptibles,=plt.plot(sus, label='Susceptibles')

plt.legend(handles=[infectes, susceptibles])


plt.xlabel('Temps')
plt.ylabel('Population')

plt.show()
pop_pays('Mainland China')
pop
# Modèle SIS

import matplotlib.pylab as plt

S = pop - 1
I = 1
beta = 0.2
gamma = 0.01

sus = []
inf = []

def infection(S, I, pop):
    for t in range (0, 500):
        S, I = S - beta * ((S * I / pop)) + gamma * I, I + beta * ((S * I) / pop) - gamma * I

        sus.append(S)
        inf.append(I)


infection(S, I, pop)

figure = plt.figure()
figure.canvas.set_window_title('SIS model')

infectes,=plt.plot(inf, label='Infectes')

susceptibles,=plt.plot(sus, label='Susceptibles')

plt.legend(handles=[infectes, susceptibles])


plt.xlabel('Temps')
plt.ylabel('Population')

plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1385110952040086, 'fraction_numerical': 0.00894774516821761, 'mean_word_length': 4.628398791540786, 'pattern_counts': {'":': 2, '<': 6, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '62976', 'license': 'MIT', 'n_tokens_mistral': 2071, 'n_tokens_neox': 1959, 'n_words': 587, 'path': 'notebooks/Nouveau_modele.ipynb', 'repo_name': 'JohanneBacheron/corona', 'size': '5588'}