ajout solution exo eval par les pairs sujet 1

parent b1817b1b
--- ---
title: "Votre titre" title: "Sujet 1 : Concentration de CO2 dans l'atmosphère depuis 1958"
author: "Votre nom" author: "LL"
date: "La date du jour" output:
output: html_document pdf_document:
toc: true
html_document:
toc: true
theme: journal
documentclass: article
classoption: a4paper
header-includes:
- \usepackage[french]{babel}
- \usepackage[upright]{fourier}
- \hypersetup{colorlinks=true,pagebackref=true}
--- ---
{r setup, include=FALSE}
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE) knitr::opts_chunk$set(echo = TRUE)
```
## Quelques explications Préparation des données
Les données de la concentration de CO2 dans l'atmosphère à l'observatoire de Mauna Loa, Hawaii, États-Unis, initié par Charles David Keeling en 1958, sont disponibles depuis le site Web de l'institut Scripps. Les observations hebdomadaires sont récupérées sous la forme d'un fichier au format CSV. Le téléchargement a été effectué le 25 novembre 2024. L'URL est:
{r}
data_url = "https://scrippsco2.ucsd.edu/assets/data/atmospheric/stations/in_situ_co2/monthly/monthly_in_situ_co2_mlo.csv"
Nous faisons une copie locale de ce jeu de données car ce fichier est régulièrement mis à jour, nous téléchargeons les données seulement si la copie locale n'existe pas.
{r}
data_file = "co2.csv"
if (!file.exists(data_file)) {
download.file(data_url, data_file, method="auto")
}
Voici l'explication des colonnes incluse dans le jeu de données :
Nom de colonne
Libellé de colonne
Yr, Mn, Date, Date.1
donnent la date dans des formats différents
CO2
concentration mensuelle de CO2 à Mauna Loa en micro-mol de CO2 par mole (ppm), ajustée sur 24:00 heures pour le 15ème jour de chaque mois
seasonally
même donnée que la colonne CO2 mais avec le cycle saisonnier retiré
fit
données lissées
seasonally.1
données lissées avec saisonnalité retirée
CO2.1
même donnée que colonne CO2 mais avec les valeurs manquantes remplacées par les données de la colonne fit
seasonnally.2
même données que seasonnallyavec valeurs manquantes remplacées par valeurs de seasonnally.1, les valeurs manquantes sont notées -99.99
Sta
identifiant en 3 lettres de la station d'échantillonnage, MLO pour l'observatoire de Mauna Loa et MKO pour le sommet du Maunakea dont les données ont été utilisées pour combler les trous laissés entre décembre 2022 et février 2023 par l'éruption de Mauna Loa.
Les 61 premières lignes du fichier CSV sont des commentaires sur le contenu du fichier, la manière de citer, etc... que nous ignorons en précisant skip=61.
Lecture
{r}
data = read.csv(data_file, skip=61)
Regardons ce que nous avons obtenu:
{r}
head(data)
tail(data)
Modification des noms de colonnes
Les deux premières lignes correspondent à la suite des noms de colonnes qui ont été interprétées comme observations. Nous devons donc ramener les éléments de ces deux lignes dans les noms de colonnes. Pour cela nous créons un vecteur vide new_colnamesqui permettra de stocker nos nouveaux noms de variables. Nous pouvons remarquer que certaines cases contiennent des NA, si c'est le cas il ne sert à rien de les coller au nom de colonne d'origine et nous passons ces cases. Certaines cases sont remplies d'espaces mais ne contiennent pas de NA donc nous passons également ces cases. Nous fonctionnons de manière itérative en collant les cases à chaque nom de colonne puis nous ajoutons le nouveau nom de la colonne au vecteur new_colnames. Nous vérifions les nouveaux noms de colonne en affichant le vecteur final.
{r}
new_colnames <- vector()
for (j in 1:length(colnames(data))){
x <- colnames(data)[[j]]
for (i in 1:2){
if (is.na(data[i,j])){
next
}else if(data[i,j] == " "){
next
}else{
x <- gsub("\\s+", " ", paste(x, data[i,j]))
}
}
new_colnames <- c(new_colnames, x)
}
print(new_colnames)
Les nouveaux noms semblent corrects, nous allons à présent les indiquer comme nouveaux noms de colonnes puis nous supprimerons les deux premières lignes car elles ne sont plus utiles.
{r}
colnames(data) <- new_colnames
data <- data[-c(1:2),]
Nous pouvons vérifier l'apparence du début de notre jeu de données, les noms ont bien été modifié et les 2 premières lignes retirées.
{r}
head(data)
Types des colonnes
L'observation des premières lignes de données mettent en évidence que les colonnes de concentration de CO2 (colonnes 5 à 10) sont toutes considérées comme de type characterce qui est probablement dû aux deux premières lignes qui ont été retirées et qui contenaient des mots. Nous devons donc changer le type de ces colonnes pour le type numeric.
{r}
data[,5:10] <- lapply(data[,5:10], as.numeric)
Valeurs manquantes
De plus, nous voyons dans les premières lignes de données des observations avec des valeurs de CO2 de -99.99. Les commentaires du fichier indiquent que les valeurs manquantes sont indiquées par cette valeur. Il faudrait donc convertir tous les -99.99 en NA afin de les traiter comme tels.
{r}
data[data == -99.99] <- NA
Maintenant, nous pouvons mesurer la quantité de NAdans nos données.
{r}
na_records = apply(data, 1, function (x) any(is.na(x)))
data[na_records,]
Nous avons ainsi 9 lignes contenant des NA avec deux cas précis : - soit toutes les cases des colonnes de valeurs numériques sont des NA, c'est le cas des observations de janvier et février 1958 (les mesures ont commencées en mars 1958) et de novembre et décembre 2024 (pas encore écoulés au moment de l'analyse) - soit les deux premières colonnes présentent effectivement des NA mais les autres contiennent des valeurs calculées à partir du lissage des données permettant de remplir les cases de ces observations à l'origine manquantes. (infomation donnée dans les commentaires du fichier)
Nous savons donc à présent que 4 mois (janvier et février 1958, novembre et décembre 2024) ne pourront pas être utilisés, pour les autres il sera possible d'utiliser une valeur approximée par lissage. Nous allons donc retirer les deux premières (janvier et février 1958) et les deux dernières (novembre et décembre 2024) lignes.
{r}
data <- data[-c(1,2,803,804),]
Conversion des dates
Les deux colonnes de dates qui nous intéressent sont Yr pour l'année et Mn pour le mois. Nous pouvons vérifier leurs classes:
{r}
class(data$Yr)
class(data$Mn)
Puisque nous travaillons sur une série temporelle, il est possible de créer un objet de type ts pour "time series" avec lequel il sera simple d'effectuer des analyses. Pour cela, il suffit d'utiliser la fonction ts avec la colonne 9, qui contient les valeurs de la colonne 5 mais avec les valeurs manquantes replies par lissage. L'argument frequency prend la valeur 12 car c'est une série mensuelle, l'argument start commence à la première ligne du tableau avec l'année contenue dans la colonne Yr et le mois dans la colonne Mn.
{r}
TS_CO2 <- ts(data = data$`CO2.1 filled [ppm]`, frequency = 12, start = c(data[1, "Yr"],
data[1, "Mn"]))
class(TS_CO2)
Inspection
Nous pouvons à présent regarder à quoi ressemblent nos données en visualisant notre objet de type série temporelle, c'est à dire la concentration de CO2 en fonction du temps.
{r}
plot(TS_CO2, type="l", xlab="Date", ylab="Concentration en CO2 (ppm)", main = "Evolution de la concentration en CO2 (ppm) à Mauna Loa depuis 1958 \n (valeurs manquantes remplies)", lwd = 1.6, bty = "l")
Nous retrouvons la fameuse courbe mettant en évidence l'évolution systématique et l'oscillation périodique de la concentration en CO2 à Mauna Loa depuis 1958.
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>. La fonction decompose permet de décomposer une série temporelle en séparant la tendance, la saisonnalité/périodicité et les éléments de variation aléatoire. L'objet décomposé peut ensuite être visualisé.
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}
TS_CO2_decomp <- decompose(TS_CO2)
plot(TS_CO2_decomp, xlab="Date", lwd = 1.6, bty = "l")
```{r cars} Nous pouvons visualiser la tendance et la périodicité séparément :
summary(cars)
```
Et on peut aussi aisément inclure des figures. Par exemple: {r}
plot(TS_CO2_decomp$trend, xlab="Date", ylab="Concentration en CO2 (ppm)", main = "Tendance de l'évolution de la concentration en CO2 (ppm) \n à Mauna Loa depuis 1958 \n (valeurs manquantes remplies)", lwd = 1.6, bty = "l")
```{r pressure, echo=FALSE} plot(TS_CO2_decomp$seasonal, xlab="Date", ylab = "", main = "Périodicité de la concentration en CO2 (ppm) \n à Mauna Loa depuis 1958 \n (valeurs manquantes remplies)", lwd = 1.6, bty = "l")
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. Nous pouvons sélectionner un sous-ensemble des 5 dernières années (complètes) pour mieux visualiser la périodicité de la concentration en CO2.
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. {r}
plot(window(TS_CO2_decomp$seasonal, start = 2019, end = 2024), xlab="Date", ylab="", main = "Périodicité de la concentration en CO2 (ppm) \n à Mauna Loa de 2019 à 2024 \n (valeurs manquantes remplies)", lwd = 1.6, bty = "l")
Maintenant, à vous de jouer! Vous pouvez effacer toutes ces informations et les remplacer par votre document computationnel. Nous pouvons observer que les pics semblent se produire à la fin de l'hiver/ au printemps et les creux à la fin de l'été/à l'automne.
\ No newline at end of file
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