Commit 930065ff authored by Marc Oudart's avatar Marc Oudart

Résolution exo2 module 3

parent 245847aa
---
title: "Votre titre"
author: "Votre nom"
date: "La date du jour"
title: "Analyse varicelle"
author: "Marc Oudart"
date: "11/04/2020"
output: html_document
---
......@@ -9,25 +9,137 @@ output: html_document
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## Préparation des données
## Quelques explications
Les données de l'incidence de la varicelle 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 fin 1990 et se termine avec une semaine récente. L'URL est :
```{r}
data_url = "https://www.sentiweb.fr/datasets/incidence-PAY-7.csv"
data_local = "C:/Users/Marc/Desktop/MOOC/mooc-rr/module3/exo2/incidence-PAY-7.csv"
```
### Téléchargement
__Nous allons tester si le fichier local existe avec une condition `if`. Si non il sera téléchargé depuis l'url avec la fonction `download.file`. Si oui, il retournera `Fichier déjà téléchargé`__
```{r}
if (file.exists(data_local) == FALSE) {
download.file(data_url, data_local)
} else {
print("Fichier déjà téléchargé")
}
```
Importer les données dans la variable data en sautant la première ligne de commentaire du fichier.
```{r}
data = read.csv(data_url, skip = 1)
head(data)
```
Voir la fin du document :
```{r}
tail(data)
```
Ceci est un document R markdown que vous pouvez aisément exporter au format HTML, PDF, et MS Word. Pour plus de détails sur R Markdown consultez <http://rmarkdown.rstudio.com>.
Regarder s'il y a des données manquantes :
```{r}
lignes_na = apply(data, 1, function(x) any(is.na(x)))
data[lignes_na,]
```
Traverser data ligne par ligne (`data, 1`) et appliquer la fonction qui traverse colonne par colonne qui retourne tout (`any`) s'il y a valeur manquante (`is.na`).
`data[lignes_na,]` pour voir le contenu de ces lignes.
Super il n'y a pas de données manquantes. On peut directement travailler sur ce jeu de donnée.
Quelles types de données ?
Pour la colonne semaine et la colonne indice :
```{r}
class(data$week)
class(data$inc)
```
Tous les deux sont des entiers donc pas de transformation à faire.
Il faut que R comprenne que la 1ère colonne sont des dates.
Il nous faut donc la librairie `parsedate`.
```{r message=FALSE, warning=FALSE}
install.packages("parsedate")
library("parsedate")
```
Lorsque vous cliquerez sur le bouton **Knit** ce document sera compilé afin de ré-exécuter le code R et d'inclure les résultats dans un document final. Comme nous vous l'avons montré dans la vidéo, on inclue du code R de la façon suivante:
Création d'une fonction (`convert_week`) pour transformer la 1ère colonne en date.
```{r}
convert_week = function(date){
ws = paste(date)
iso = paste0(substring(ws, 1, 4), "-W", substring(ws, 5, 6))
as.character(parse_iso_8601(iso))
}
```
Appliquer la fonction à toute les lignes.
```{r}
data$date = as.Date(sapply(data$week, convert_week))
class(data$date)
```
```{r cars}
summary(cars)
Trier le jeu de données par ordre chronologique.
```{r}
data = data[order(data$date),]
head(data)
```
Et on peut aussi aisément inclure des figures. Par exemple:
```{r pressure, echo=FALSE}
plot(pressure)
Est-ce que les lignes sont bien séparées d'1 semaine ?
```{r}
all(diff(data$date) == 7)
```
On peut plotter les données :
```{r}
with(data, plot(date, inc, type ="l"))
```
Le `with` spécifie juste que c'est de la variable `data` qu'il faut prendre (au lieu d'utiliser `data$date`).
Appliquer seulement aux 200 derniers points :
```{r}
with(tail(data, 200), plot(date, inc, type ="l"))
```
Vous remarquerez le paramètre `echo = FALSE` qui indique que le code ne doit pas apparaître dans la version finale du document. Nous vous recommandons dans le cadre de ce MOOC de ne pas utiliser ce paramètre car l'objectif est que vos analyses de données soient parfaitement transparentes pour être reproductibles.
L'incidence de la varicelle semble suivre un cycle dont la largeur des pics est vraiment plus grand que ceux de la grippe. C'est pas uniquement en hiver. Il y a cependant un creux aux 2/3 de l'année vers septembre. Ce mois semble tout indiqué pour séparé nos années.
## L'analyse
Comme les résultats ne sont pas stockés dans les fichiers Rmd, pour faciliter la relecture de vos analyses par d'autres personnes, vous aurez donc intérêt à générer un HTML ou un PDF et à le commiter.
On va analyser d'années en années et non pas de semaine en semaine.
On va faire des années du 1er septembre au 1er septembre de chaque année pour ne pas tomber au milieu d'un pic.
On va faire une fonction pour ça :
```{r}
pic_annuel = function(annee){
debut = paste0(annee-1, "-09-01")
fin = paste0(annee, "-09-01")
semaines = data$date > debut & data$date <= fin
sum(data$inc[semaines], na.rm = TRUE)
}
```
L'année 1990 commence en fin d'année donc dans le pic donc il vaut mieux prendre des années à partir de 1991. 2020 n'est pas encore arrivé à setembre donc on va ignorer cette année là aussi.
```{r}
annees = 1991:2019
```
On va créer un nouveau tableau des incidences par année.
```{r}
incidence_annuelle = data.frame(année = annees, incidence = sapply(annees, pic_annuel))
head(incidence_annuelle)
```
```{r}
plot(incidence_annuelle, type="p")
```
Voir les pics les plus importants en faisant un tri par l'incidence.
```{r}
head(incidence_annuelle[order(-incidence_annuelle$incidence),])
```
L'année avec le plus fort pic est l'année 2009.
Voir les pics les moins importants en faisant un tri inverse par l'incidence.
```{r}
head(incidence_annuelle[order(incidence_annuelle$incidence),])
```
Maintenant, à vous de jouer! Vous pouvez effacer toutes ces informations et les remplacer par votre document computationnel.
L'année 2002 a eu le moins de cas.
Histogramme de la fréquence des incidences en 10 catégories.
```{r}
hist(incidence_annuelle$incidence, breaks=10)
```
\ No newline at end of file
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment