--- title: "Analyse de l'incidence du syndrome grippal" author: "GuR" date: "2025-09-10" output: html_document --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ``` # Récupération & aperçus des données ```{r} data_url = "sentinelles-france-grippe.csv" # https://www.sentiweb.fr/datasets/all/inc-3-PAY.csv ``` ```{r} data = read.csv(data_url, skip = 1) # skip = ignorer la 1ère ligne du CSV qui contient un commentaire head(data) #affichage du début du jeu de données ``` ```{r} tail(data) # affichage de la fin du jeu de données ``` # Rechercher les données manquantes éventuelles Lancer une fonction d'analyse des données, ligne par ligne, qui sélectionne celles dont la valeur est manquante. ```{r} lignes_na = apply(data, 1, function(x) any(is.na(x))) # is.na "not available" / traverser le jeu de données (data) ligne par ligne et appliquer à chaque ligne la fonction (qui ) data[lignes_na,] # afficher le contenu des lignes sélectionnées ``` Vérifier également le type de données : - pour la colonne "week" ```{r} class(data$week) ``` - pour la colonne "inc" ```{r} class(data$inc) ``` Ce résultat est douteux car R interprète "-" comme un type `caractère`, ce qui perturbe son analyse du type de données pour l'ensemble de la colonne. Dans ce cas, relire le fichier de données en aidant R à interpréter "-" comme une donnée manquante : ```{r} data = read.csv(data_url, skip=1, na.strings = "-") # na.strings = "-" : la donnée "-" est une donnée manquante class(data$inc) ``` # Vérification et inspection ## Pré-traitement des données Enjeu = adapter les formats de dates aux conventions des logiciels & faciliter l'analyse Préparation du format date : ```{r} library(parsedate) # chargement de la librairie date = 199501 #dates du format du CSV : 1995=année 01=semaine ws = paste(date) #convertir cet entier en chaîne de caractère iso = paste0(substring(ws, 1, 4), "-W", substring(ws, 5, 6)) # transformation des 2 éléments composant la date iso parse_iso_8601(iso) # date correspondant au lundi de la semaine de la date du jeu de données ``` Utiliser une fonction pour appliquer cette transformation de format date à l'ensemble des dates du jeu de données : ```{r} convert_week = function(date) { # entrée des dates du format du CSV : 1995=année 01=semaine ws = paste(date) #convertir cet entier en chaîne de caractère iso = paste0(substring(ws, 1, 4), "-W", substring(ws, 5, 6)) # transformation des 2 éléments composant la date as.character(parse_iso_8601(iso)) # parse_iso_8601(iso) retourne via sapply() un format integer => contournement = résultats en chaîne de caractères, puis convertir résultat en date } ``` Ajouter une nouvelle colonne "Date" dans le CSV avec les dates formatées : ```{r} data$date = as.Date(sapply(data$week, convert_week)) ``` ```{r} class(data$date) ``` ## Trier les données dans l'ordre chronologique ```{r} data = data[order(data$date),] head(data) tail(data) ``` Vérifier que la distance entre 2 "date" = 7 jours : ```{r} all(diff(data$date) == 7) ``` Vérification visuelle grâce à un affichage graphique : ```{r} with(data, plot(date, inc, type="l")) # plot(abscisse, ordonnée, type) ``` Zoom sur les 200 dernières données : ```{r} with(tail(data, 200), plot(date, inc, type="l")) ``` # Questions & réponses ## Dans quelles années y avait-il des épidémies les plus fortes ? Sachant que les pics annuels se situent en hiver, il ne serait pas scientifiquement correct de tronquer en années civiles. Nous décidons donc de tronquer au 1er août (comme 1er jour de l'année). ```{r} pic_annuel = function(annee) { debut = paste0(annee-1, "-08-01") fin = paste0(annee, "-07-31") semaines = data$date >= debut & data$date <= fin sum(data$inc[semaines], na.rm=TRUE) # somme des semaines pour chaque année // na.rm=TRUE : ignorer les cellules qui ne contiennent pas de données } ``` La première et la dernière année du jeu de données ne sont pas complètes : - 1ère année commence le 29/10/1984 - dernière année se termine le 28/07/2025 Création d'un nouveau tableau : ```{r} annees = 1985:2025 #nouvel intervalle d'années incidence_annuelle = data.frame(annee = annees, incidence = sapply(annees, pic_annuel)) head(incidence_annuelle) ``` Vérification graphique et repérage des valeurs élevées / basses : ```{r} plot(incidence_annuelle, type = "p") ``` On repère un pic dans les premières années. Vérification en triant le tableau par incidence décroissante : ```{r} head(incidence_annuelle[order(-incidence_annuelle$incidence),]) # order(-) : tri décroissant ``` => épidémie la plus forte = 1985 ## Quelle est la fréquence d'épidémies faibles, moyennes, et fortes, au cours des années ? Affichage graphique en 10 catégories : ```{r} hist(incidence_annuelle$incidence, breaks = 10) ``` Abscisses : plus à droite se situent les épidémies les plus fortes Ordonnées : fréquence de ces épidémies Formatage du graphique : ```{r} hist(incidence_annuelle$incidence, breaks = 10, main = "Fréquence des épidémies", xlab = "Incidence", ylab= "Fréquence", col = "blue") ```