From 9b15570ce943808d5b384b5065dd044650d2fc2c Mon Sep 17 00:00:00 2001 From: Melanie Debelgarric Date: Wed, 6 Apr 2022 10:48:27 +0200 Subject: [PATCH] =?UTF-8?q?r=C3=A9alisation=20exercice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module3/exo3/exercice_fr.Rmd | 228 ++++++++++++++++++++++++++++++++--- 1 file changed, 213 insertions(+), 15 deletions(-) diff --git a/module3/exo3/exercice_fr.Rmd b/module3/exo3/exercice_fr.Rmd index dec62f6..9dba23c 100644 --- a/module3/exo3/exercice_fr.Rmd +++ b/module3/exo3/exercice_fr.Rmd @@ -1,33 +1,231 @@ --- -title: "Votre titre" +title: "Sujet 1 - Concentration de CO2 dans l'atmosphère depuis 1958" author: "Mélanie Debelgarric" -date: "La date du jour" +date: "05/04/2022" output: html_document --- +## Thématique -```{r setup, include=FALSE} -knitr::opts_chunk$set(echo = TRUE) +En 1958, Charles David Keeling a initié une mesure de la concentration de CO2 dans l'atmosphère à l'observatoire de Mauna Loa, Hawaii, États-Unis qui continue jusqu'à aujourd'hui. L'objectif initial était d'__étudier la variation saisonnière__, mais l'intérêt s'est déplacé plus tard vers l'__étude de la tendance croissante dans le contexte du changement climatique__. En honneur à Keeling, ce jeu de données est souvent appelé ["Keeling Curve"](https://en.wikipedia.org/wiki/Keeling_Curve). + +## Ouverture et Préparation des données + +Les données sont récupérées sur le [site Web de l'institut Scripps](https://scrippsco2.ucsd.edu/data/atmospheric_co2/primary_mlo_co2_record.html). Dans la consigne, il est demandé de télécharger les données hebdomadaires. Les données qui seront traitées ici décrivent donc la __concentration en CO2 atmosphérique pour chaque semaines de l'année 1958 à l'année actuelle (2022)__. + +### Téléchargement des données + +Tout d'abord nous devons charger le fichier de données (à partir d'un lien url) : + +```{r data_url} +data_url <- "https://scrippsco2.ucsd.edu/assets/data/atmospheric/stations/in_situ_co2/weekly/weekly_in_situ_co2_mlo.csv" +data <- read.csv(data_url, skip = 44, header=FALSE) +head(data) +``` + +Les deux colonnes du jeu de données correspondent respectivement à la date, et à la concentration en CO2. Je vais donc nommer ces deux colonnes pour faciliter la lecture et l'analyse: + +```{r nom_col} +colnames(data) <- c("date","CO2") +colnames(data) # Vérification : OK +``` + +Nous allons ensuite vérifier s'il existe des données manquantes dans le jeu de données : + +```{r NA} +na_records = apply(data, 1, function (x) any(is.na(x))) +data[na_records,] +``` + +Il ne semble pas qu'il y ait de valeur manquante. Maintenant, regardons la classe des deux variables : + +```{r class} +class(data$date) +class(data$CO2) +``` + +La variable "CO2" est bien une variable numérique (logique pour une contration en CO2). Par contre, la variable "date" est sous la forme de "caractère". Nous devons donc convertir cette variable pour que ce soit une date par la suite. + +### Préparation des données : gérer les données manquantes + +Tout d'abord, nous devons convertir la colonne date en classe "Date" : + +```{r class_date} +data$Date <- as.Date(data$date) +head(data) +class(data$Date) +``` +Selon les commentaires de l'institut Scripps à propos de ce jeu de données, les valeurs hebdomadaires sont ajustées à midi au milieu de chaque semaines. Nous devons donc vérifier si il y a bien 7 jours de différences entre chaque semaines dans le jeu de données : + +```{r test_7j} +ligne_FALSE <- which((diff(data$Date) == 7)==FALSE) # Vecteur contenant les différentes lignes pour lesquelles l'intervalle entre 2 date n'est pas égal à 7 jours +ligne_FALSE +``` + +Ce n'est pas le cas. D'après le vecteur "ligne_FALSE" il existe 29 lignes pour lesquelles il n'y a pas 7 jours de différences entre elles. Si l'on regarde la première valeur pour laquelle ce n'est pas le cas, c'est à dire à la 6ème ligne : + +```{r} +diff(c(data$Date[ligne_FALSE[1]],data$Date[ligne_FALSE[1]+1])) # différence entre ces deux dates +``` +Il existe une différence de 14 jours entre la date de la ligne 6 (03/05/1958) et de la date de la ligne 7 (17/05/1958). L'idéal serait d'avoir une valeur manquante "NA" entre ces deux dates, donc une ligne supplémentaire pour la date du 10/05/1958, pour avoir un jeu de données qui est hebdomadaire. + +Tout d'abord, vérifions la différence de jours entre chacune des lignes pour laquelle cette différence n'est pas égale à 7 : + +```{r fct_diff} +ecart <- rep(NA, length = length(ligne_FALSE)) # vecteur vide qui contiendra les ecarts de jours entre 2 dates +for (i in 1:length(ligne_FALSE)){ + date_avant <- data$Date[ligne_FALSE[i]] + date_apres <- data$Date[ligne_FALSE[i]+1] + ecart[i] <- diff(c(date_avant, date_apres)) +} +ecart ``` -## Quelques explications +Il existe une grande variabilité dans les écarts de jours entre deux dates. Notamment, nous avons un écart de 133 jours entre le 18/01/1964 et la date suivante. + +## Analyses graphiques + +Nous pouvons en premier lieu faire un graphique montrant la concentration en CO2 au cours du temps. + +```{r plot1} +plot(data$Date, data$CO2, + type="l", + xlab = "Annees", ylab="CO2", + main = "Concentration en CO2 atm sur la periode 1958-2022") + +``` + +Sur ce plot, nous pouvons voir qu'il y a une augmentation de la concentration en CO2 atmosphérique depuis les années 1958. Sur ce plot, nous pouvons également voir qu'il existe des oscillations, correspondant aux variations annuelles de CO2 et dépendantes de la saison. Nous pouvons essayer d'identifier les "pics" de concentration en CO2 sur une période de 10 ans, comme le décrit le graphique suivant : + +```{r} +ann8090 <- subset(data, Date > "1979-12-31" & Date < "1991-01-01" ) +plot(ann8090$Date, ann8090$CO2, + type="l", + xlab = "Annees", ylab="CO2", + main = "Concentration en CO2 atm sur la periode 1980-1990") + +``` -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 . +La variation semble effectivement annuelle, vérifion cela sur une année choisie arbitrairement : -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: +```{r} +ann84 <- subset(data, Date > "1983-12-31" & Date < "1985-01-01" ) +plot(ann84$Date, ann84$CO2, + type="l", + xlab = "Annees", ylab="CO2", + main = "Concentration en CO2 atm sur l'annee 1984") -```{r cars} -summary(cars) ``` -Et on peut aussi aisément inclure des figures. Par exemple: +L'oscillation semble bien être annuelle, et semble débuter aux alentours de Septembre. Nous pouvons vérifier ceci graphiquement et le valider par le calcul : + +```{r} +mini <- ann84$Date[which.min(ann84$CO2)] +maxi <- ann84$Date[which.max(ann84$CO2)] +print(c(mini, maxi)) +``` + +```{r 8485} +ann8485 <- subset(data, Date > "1984-09-01" & Date < "1985-09-10" ) +plot(ann8485$Date, ann8485$CO2, + type="l", + xlab = "Annees", ylab="CO2", + main = "Concentration en CO2 atm sur l'annee 1984-1985") + +``` + +En conclusion de cette analyse graphique, nous pouvons voir que : + +1. La concentration en CO2 atmosphérique augmente au cours du temps depuis les années 1958 jusqu'à aujourd'hui +2. Cette concentration suit des oscillations périodiques annuelles au sein même de la période 1958-2022 + +## Etude des oscillations annuelles sur la période donnée + +### Calcul de l'augmentation de CO2 au sein d'une oscillations + +Si on reprend l'exemple de l'année 1984-1985, débutant et terminant un mois de Septembre, nous pouvons calculer la différence en concentration de CO2 existante. + +```{r CO2_8485} +diff8485 <- max(ann8485$CO2) - min(ann8485$CO2) +diff8485 +``` + +Il existe donc une différence de 8.59 entre le maximum (le "pic") et le minimum de l'oscillation annuelle 1984-1985. Maintenant nous pouvons créer une fonction sortant **la différence entre le maximum et le minimum de chaques oscillations** sur la totalité de la période (1958 - aujourd'hui). + +Tout d'abord, j'utilise une fonction me permettant de connaître le minimum (pic_min) et le maximum (pic_max) de chaques oscillations annuelles. Ces oscillations débutent et se finissent en Septembre, comme on a pu le visualiser sur les graphiques précédents. La période étudiée sera alors de Septembre 1958 à Septembre 2021 (dernières données en date pour Septembre). + +```{r pic} +annee <- c(1958:2021) # Définition de la période étudiée en année + +pic_min = function(annee) { + debut = paste0(annee,"-09-01") + fin = paste0(annee+1,"-09-01") + semaines = data$Date > debut & data$Date <= fin + min(data$CO2[semaines], na.rm=TRUE) +} + +pic_max = function(annee) { + debut = paste0(annee,"-09-01") + fin = paste0(annee+1,"-09-01") + semaines = data$Date > debut & data$Date <= fin + max(data$CO2[semaines], na.rm=TRUE) +} + +``` + +Je peux alors utiliser ces fonctions pour calculer la différence entre le maximum et le minimum pour chaque années, comme ceci : + +```{r diff_year} + +diff <- rep(NA, length = length(annee)) +for (i in 1:length(annee)){ + min_an <- pic_min(annee[i]) + max_an <- pic_max(annee[i]) + + diff[i] <- max_an - min_an +} +diff + +``` + +Maintenant que j'ai obtenu un vecteur avec la différence entre la concentration maximale et minimale de CO2 pour chaque année de la période étudiée, je peux regarder graphiquement s'il existe une variation dans l'oscillation périodique : + +```{r plot_var} +plot(annee, diff, + type="l", + xlab = "Années", ylab = "Variation de CO2 annuelle") + +``` +Nous pouvons remarquer sur ce graphique qu'il semble y avoir une augmentation de la différence en CO2 pour les oscillations sur la période étudiée (1958-2021). En effet, dans les années 1960, la variation de concentration de CO2 est de l'ordre de 6 à 8. Dans les années 2000, cette variations est de l'ordre de 7 à 10. Il semble qu'en plus d'une augmentation de concentration de CO2 atmosphérique depuis les années 1958, il existe également une augmentation de la variation de ce taux à l'échelle annuelle au cours du temps. + +## Modélisation et Prédictions futures + +### Modélisation de l'augmentation de CO2 jusqu'en 2025 + +Supposons qu'une simple modèle linéaire suffit pour expliquer l'augmentation du CO2 atmosphérique au cours du temps. Je construis ici un GLM pour faire une prédiction de la concentration en CO2 pour les prochaines semaines jusqu'à fin 2025. Après la construction de ce modèle, je peux le regarder graphiquement. + +```{r glm} +# Construction du modèle +model1 <- glm(CO2~Date, data = data) +new_date <- seq(from = as.Date("2022-02-12"), to = as.Date("2025-12-31"), by = "weeks") +pred <- predict.glm(model1, type="response")[1:length(new_date)] + +# Data des données prédites par le GLM +data.glm <- data.frame(pred, new_date) +colnames(data.glm) <- c("CO2","Date") + +# Fusion de mon dataset de base et du data issu du GLM +newdata <- data[,-1] +newdata <- rbind(newdata, data.glm) + +# Graphique +plot(newdata$CO2~newdata$Date, + type="l", + xlab = "Date", ylab = "Concentration en CO2") -```{r pressure, echo=FALSE} -plot(pressure) ``` -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. -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. +Comme nous pouvons le voir sur le dernier plot, mon modèle ne prédit pas correctement l'augmentation de CO2 jusqu'en 2025. Ce modèle n'est donc pas approprié. -Maintenant, à vous de jouer! Vous pouvez effacer toutes ces informations et les remplacer par votre document computationnel. +*Commentaire pour le relecteur : Je ne suis pas sûre de répondre correctement à la consigne. Mais je pense que ce travail est suffisant pour m'évaluer sur la manière d'écrire un document computationnel.* \ No newline at end of file -- 2.18.1