<p align="center">
<img src="https://user-images.githubusercontent.com/63207451/114284722-45901b80-9a52-11eb-8a0c-e99fc8681436.gif" height="80" width="140">
<p/>
<h1 align="center">Simulation épidémiologique</h1>
<br/>
<p align="center">
<a href="https://www.codacy.com/gh/antonin-lfv/simulation_virus_covid-19/dashboard?utm_source=github.com&utm_medium=referral&utm_content=antonin-lfv/simulation_virus_covid-19&utm_campaign=Badge_Grade"><img src="https://app.codacy.com/project/badge/Grade/ee1396c2e13b47b4aba29ba19881758c" height="20"/></a>
<a href="https://www.python.org/downloads/release/python-380/"><img src="https://img.shields.io/badge/python-3.8-blue.svg" height="20"/></a>
<p/>
<br/>
<p align="center">
Ce projet a pour objectifs de modéliser une <b>épidémie</b>, et de simuler sa propagation au sein d'une population d'individus. Le taux d'infection, de guérison et de létalité seront les paramètres de notre modèle, que nous étudierons afin de mieux comprendre leur impact sur la vitesse de propagation du virus. On choisira des populations de quelques centaines à quelques dizaines de milliers d'individus et on supposera qu'un individu immunisé le reste toute sa vie. Cette modélisation sera réalisée avec matplotlib et plotly indépendamment. <br/>
Ce modèle statistique sera ensuite comparé aux modèles mathématiques <b>SIR</b> et <b>SIDR</b>, qui appartiennent à la famille des modèles compartimenantaux en épidémiologie, qui reposent sur des équations différentielles.<br/>
<br/>
<p/>
<br/>
>__UPDATE :__ <br/>- Ajout de la courbe 'removed', courbe noire, qui correspond aux personnes ne pouvant plus transmettre le virus, elle correspond à la somme des personnes immunisées et décédées. Elle est ajoutée dans le but de pouvoir comparer les résultats de la simulation à un modèle mathématiques, le modèle SIR.
<br/> - Nouvelle optimisation du code, qui rend le processus quasi instantané.
<br/> - <b>Grâce à l'optimisation, vous pouvez tester la simulation en ligne [ici](https://share.streamlit.io/antonin-lfv/simulation_virus_covid-19/Streamlit/main.py)</b>
<br/>
<br/>
# Liens utiles
- Article lié à ce github : ( à venir )
- Comprendre le [Modèle SIR](https://fr.wikipedia.org/wiki/Modèles_compartimentaux_en_épidémiologie). <br/>
- Thèse de Derdei Bichara sur l'[étude de modèles épidémiologiques](https://tel.archives-ouvertes.fr/tel-00841444/file/BicharaPhDThesis.pdf): Stabilité, observation et estimation de paramètres.
- Étude des [modèles épidémiologiques et du Ro](http://www.math.univ-metz.fr/~sallet/R0_EPICASA09.pdf)
<br/>
# Résultat global sous Plotly
<br/>
Simulation effectuée avec des valeurs de paramètres standards. <br/>
<br/>
<p align="center">
<img src="https://user-images.githubusercontent.com/63207451/101951720-c13ea080-3bf7-11eb-9dbd-c3cb50136b29.png" width="1000">
<p/>
<br/>
(courbe noire : somme des personnes immunisées et décédées) <br/>
<br/>
# Index
1. [Librairies](#librairies)
2. [Le modèle python](#le-modèle-python)
1. [Simulation avec différents taux d'infection](#Simulation-avec-différents-taux-dinfection)
2. [Simulation avec différentes létalités](#simulation-avec-différentes-létalités)
3. [Simulation avec différents taux d'immunité](#simulation-avec-différents-taux-dimmunité)
4. [Mise en place d'un confinement](#Mise-en-place-dun-confinement)
1. [Confinement immédiat](#confinement-dès-le-premier-cas-detecté)
2. [Confinement après dépassement du seuil hospitalier](#confinement-après-dépassement-de-la-capacité-hospitalière)
5. [Simuler le SARS-cov-2](#simuler-le-SARS-cov-2)
6. [Simulation avec différents Ro et cas limites](#Simulation-avec-différents-Ro-et-cas-limites)
3. [Le modèle SIR](#le-modèle-SIR)
1. [Modèle mathématique](#Modélisation-mathématique-SIR)
2. [Comparaison SIR / modèle Python](#Comparaison-SIR--modèle-python)
4. [Le modèle SIDR](#le-modèle-SIDR)
1. [Modèle mathématique](#Modélisation-mathématique-SIDR)
2. [Comparaison SIDR / modèle Python](#Comparaison-SIDR--modèle-python)
5. [Conclusion](#conclusion)
# Librairies
<br/>
Si vous n'avez jamais utilisé plotly pensez à le télécharger via la console : <br/>
<br/>
pip install plotly
Documentation [Plotly](https://plotly.com/python/) .
À chaque exécution d'une fonction sous plotly, une page html s'ouvrira avec le résultat.
Pour matplotlib une simple fenêtre python apparaîtra (ou plus).
<br/>
<br/>
# Le modèle python
<br/>
Lors de la simulation, plusieurs paramètres sont en jeux. Il y a tout d'abord le nombre d'invidus dans la population, ici on choisira une population entre 1 et 20000 individus pour avoir un temps d'exécution raisonnable. Ce nombre restera constant durant toute la simulation, nous supposerons que toute la population est susceptible d'être contaminée, et que la natalité compense la mortalité. La repartition de ces individus sera donnée par le paramètre variance_population , et qui variera entre 0 et 2 environ. Plus ce nombre est grand, plus la population sera étalée. <br/>
<br/>
Ensuite, le paramètre rayon_contamination correspond à la zone dans laquelle un individu infecté peut transmettre le virus à un individu sain, avec une probabilté nommée infectiosité, qui est comprise entre 0 et 1. Chaque individu infecté reste infecté jusqu'à temps qu'il devienne immunisé ou qu'il décède. Après qu'un individu soit infecté, il a une probabilité p de devenir immunisé et donc de ne plus transmettre le virus, et une probabilité d de décéder suite à l'infection. Ces deux paramètres sont compris entre 0 et 1 également. Pour utiliser le paramètre λ du modèle SIR, qui est le taux de retirement, on fixera p=0 et d=λ. <br/>
Nous ne considérerons pas pour l'instant l'apparition d'un vaccin durant la simulation. Seule l'immunité innée des individus est prise en compte.
On notera Ro le taux de reproduction du virus, qui est le nombre moyen d'individus qu'une personne infectieuse infecte tant qu'elle est contagieuse, et qui est égale au rapport de l'infectiosité sur le taux de retirement ( probabilité d'être immunisé ou de décéder ).
<br/>
<br/>
Les simulations de cette section sont réalisées avec le modèle python, et affichées avec la librairie plotly <br/>
<br/>
## Simulation avec différents taux d'infection
<br/>
Faisons varier le taux d'infection entre 10%, 15%, 30%, 50% et 70% et observons la courbe du nombre de personnes infectés. <br/>
<br/>
<p align="center">
<img width="1403" alt="infectés_variation_infectiosité" src="https://user-images.githubusercontent.com/63207451/97112938-6b657600-16e7-11eb-9c86-d197de969450.png">
<p/>
<br/>
On remarque naturellement que plus l'infectiosité est grande, plus le nombre maximum de personnes infectés est grand. Mais également que le nombre d'infectés chute plus rapidement avec une infectiosité élevée. <br/>
Intéressons nous maintenant au nombre de décès en fonction de ces différentes valeurs d'infectiosité. <br/>
<br/>
<p align="center">
<img width="1403" alt="morts_variation_infectiosité" src="https://user-images.githubusercontent.com/63207451/97112882-204b6300-16e7-11eb-9d9f-f3619ead67c1.png">
<p/>
<br/>
Les courbes sont quasiment linéaires sur une grande partie, jusqu'à atteindre un certain seuil, qui est très proche malgrès des infectiosités très différentes. La différence se fait dans la vitesse à laquelle le seuil est atteint, plus l'infectiosité est grande plus le seuil est atteint rapidement, il est atteint en une dizaine de jours pour une infectiosité de l'ordre de 70% et en une quinzaine pour une infectiosité de l'ordre de 10%.
<br/>
## Simulation avec différentes létalités
<br/>
Faisons à présent varier la létalité entre 5%, 10%, 25%, 30% et 40%. Et observons l'évolution des courbes du nombre d'individus infectés.<br/>
<br/>
<p align="center">