diff --git a/module3/exo1/analyse-syndrome-grippal.Rmd b/module3/exo1/analyse-syndrome-grippal.Rmd index 771e78faac371f23c921f7f7aecc87f2100e9059..a9f5a0ac3d223a0a0740aa5f1e65269200f5bd9c 100644 --- a/module3/exo1/analyse-syndrome-grippal.Rmd +++ b/module3/exo1/analyse-syndrome-grippal.Rmd @@ -22,6 +22,7 @@ knitr::opts_chunk$set(echo = TRUE) ## Préparation des données Les données de l'incidence du syndrome grippal sont disponibles du site Web du [Réseau Sentinelles](http://www.sentiweb.fr/). Nous les récupérons sous forme d'un fichier en format CSV dont chaque ligne correspond à une semaine de la période demandée. Nous téléchargeons toujours le jeu de données complet, qui commence en 1984 et se termine avec une semaine récente. L'URL est: + ```{r} data_url = "http://www.sentiweb.fr/datasets/incidence-PAY-3.csv" ``` @@ -29,41 +30,46 @@ data_url = "http://www.sentiweb.fr/datasets/incidence-PAY-3.csv" Voici l'explication des colonnes donnée sur le [sur le site d'origine](https://ns.sentiweb.fr/incidence/csv-schema-v1.json): | Nom de colonne | Libellé de colonne | -|----------------+-----------------------------------------------------------------------------------------------------------------------------------| -| `week` | Semaine calendaire (ISO 8601) | -| `indicator` | Code de l'indicateur de surveillance | -| `inc` | Estimation de l'incidence de consultations en nombre de cas | -| `inc_low` | Estimation de la borne inférieure de l'IC95% du nombre de cas de consultation | -| `inc_up` | Estimation de la borne supérieure de l'IC95% du nombre de cas de consultation | -| `inc100` | Estimation du taux d'incidence du nombre de cas de consultation (en cas pour 100,000 habitants) | -| `inc100_low` | Estimation de la borne inférieure de l'IC95% du taux d'incidence du nombre de cas de consultation (en cas pour 100,000 habitants) | -| `inc100_up` | Estimation de la borne supérieure de l'IC95% du taux d'incidence du nombre de cas de consultation (en cas pour 100,000 habitants) | -| `geo_insee` | Code de la zone géographique concernée (Code INSEE) http://www.insee.fr/fr/methodes/nomenclatures/cog/ | -| `geo_name` | Libellé de la zone géographique (ce libellé peut être modifié sans préavis) | +|-----------------|-------------------------------------------------------| +| `week` | Semaine calendaire (ISO 8601) | +| `indicator` | Code de l'indicateur de surveillance | +| `inc` | Estimation de l'incidence de consultations en nombre de cas | +| `inc_low` | Estimation de la borne inférieure de l'IC95% du nombre de cas de consultation | +| `inc_up` | Estimation de la borne supérieure de l'IC95% du nombre de cas de consultation | +| `inc100` | Estimation du taux d'incidence du nombre de cas de consultation (en cas pour 100,000 habitants) | +| `inc100_low` | Estimation de la borne inférieure de l'IC95% du taux d'incidence du nombre de cas de consultation (en cas pour 100,000 habitants) | +| `inc100_up` | Estimation de la borne supérieure de l'IC95% du taux d'incidence du nombre de cas de consultation (en cas pour 100,000 habitants) | +| `geo_insee` | Code de la zone géographique concernée (Code INSEE) | +| `geo_name` | Libellé de la zone géographique (ce libellé peut être modifié sans préavis) | La première ligne du fichier CSV est un commentaire, que nous ignorons en précisant `skip=1`. + ### Téléchargement ```{r} data = read.csv(data_url, skip=1) ``` Regardons ce que nous avons obtenu: + ```{r} head(data) tail(data) ``` Y a-t-il des points manquants dans nos données ? + ```{r} na_records = apply(data, 1, function (x) any(is.na(x))) data[na_records,] ``` Les deux colonnes qui nous intéressent sont `week` et `inc`. Vérifions leurs classes: + ```{r} class(data$week) class(data$inc) ``` + Ce sont des entiers, tout va bien ! ### Conversion des numéros de semaine @@ -85,21 +91,25 @@ convert_week = function(w) { ``` Nous appliquons cette fonction à tous les points, créant une nouvelle colonne `date` dans notre jeu de données: + ```{r} data$date = as.Date(convert_week(data$week)) ``` Vérifions qu'elle est de classe `Date`: + ```{r} class(data$date) ``` Les points sont dans l'ordre chronologique inverse, il est donc utile de les trier: + ```{r} data = data[order(data$date),] ``` C'est l'occasion pour faire une vérification: nos dates doivent être séparées d'exactement sept jours: + ```{r} all(diff(data$date) == 7) ``` @@ -107,11 +117,13 @@ all(diff(data$date) == 7) ### Inspection Regardons enfin à quoi ressemblent nos données ! + ```{r} plot(data$date, data$inc, type="l", xlab="Date", ylab="Incidence hebdomadaire") ``` Un zoom sur les dernières années montre mieux la localisation des pics en hiver. Le creux des incidences se trouve en été. + ```{r} with(tail(data, 200), plot(date, inc, type="l", xlab="Date", ylab="Incidence hebdomadaire")) ``` @@ -146,6 +158,7 @@ head(inc_annuelle) ### Inspection Voici les incidences annuelles en graphique: + ```{r} plot(inc_annuelle, type="p", xlab="Année", ylab="Incidence annuelle") ``` @@ -153,6 +166,7 @@ plot(inc_annuelle, type="p", xlab="Année", ylab="Incidence annuelle") ### Identification des épidémies les plus fortes Une liste triée par ordre décroissant d'incidence annuelle permet de plus facilement repérer les valeurs les plus élevées: + ```{r} head(inc_annuelle[order(-inc_annuelle$incidence),]) ```