diff --git a/module3/exo3/concentration-en-CO2.html b/module3/exo3/concentration-en-CO2.html new file mode 100644 index 0000000000000000000000000000000000000000..d7c95b9accbf414cd5544ee9505633f10c988705 --- /dev/null +++ b/module3/exo3/concentration-en-CO2.html @@ -0,0 +1,574 @@ + + + + + + + + + + + + + + + +Concentration de CO2 dans l’atmosphère depuis 1958 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+

Introduction

+

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” (voir pour +l’histoire et l’importance de ces données).

+

Les données sont disponibles sur le site Web de l’institut Scripps. +Utilisez le fichier avec les observations hebdomadaires. Attention, ce +fichier est mis à jour régulièrement avec de nouvelles observations. +Notez donc bien la date du téléchargement, et gardez une copie locale de +la version précise que vous analysez. Faites aussi attention aux données +manquantes.

+

Le fichier a été téléchargé le 08/12/2023. On télécharge le document +via le site Scrippsco2 +On observe le fichier et on voir que les 44 premières lignes sont des +commentaires. On va donc retirer les 43 premières lignes.

+
knitr::opts_chunk$set(eval = TRUE)
+data_url = "https://scrippsco2.ucsd.edu/assets/data/atmospheric/stations/in_situ_co2/weekly/weekly_in_situ_co2_mlo.csv"
+data = read.csv2(data_url, header= TRUE, sep= ",", skip=43, row.names = NULL)
+

Une copie locale du fichier a été sauvegarder au cas où les donnée +soient modifiées ou supprimées. Il est possible d’ouvrir le fichier soit +avec la version en ligne, soit via la copie locale.

+
data_file = "weekly_in_situ_co2_mlo.csv"
+if (!file.exists(data_file)) {
+    download.file(data_url, data_file, method="auto")
+}
+data <- weekly_in_situ_co2_mlo
+
## Error in eval(expr, envir, enclos): objet 'weekly_in_situ_co2_mlo' introuvable
+
+
+

Préparation et inspection des données

+

On regarde la base de données et comment sont codées les +variables.

+
head(data)
+
##    row.names
+## 1 1958-03-29
+## 2 1958-04-05
+## 3 1958-04-12
+## 4 1958-04-19
+## 5 1958-04-26
+## 6 1958-05-03
+##   X.indicated.by.the.date.in.the.first.column..............................
+## 1                                                                    316.19
+## 2                                                                    317.31
+## 3                                                                    317.69
+## 4                                                                    317.58
+## 5                                                                    316.48
+## 6                                                                    316.95
+
tail(data)
+
##       row.names
+## 3342 2023-09-09
+## 3343 2023-09-16
+## 3344 2023-09-23
+## 3345 2023-09-30
+## 3346 2023-10-07
+## 3347 2023-10-14
+##      X.indicated.by.the.date.in.the.first.column..............................
+## 3342                                                                    418.28
+## 3343                                                                    418.52
+## 3344                                                                    417.77
+## 3345                                                                    417.89
+## 3346                                                                    418.10
+## 3347                                                                    418.82
+

Les données vont de 1958 à 2023, et la concentration en CO2 est +représenté par un indice chaque semaine.

+

On regarde s’il y a des données manquantes

+
na_records = apply(data, 1, function (x) any(is.na(x)))
+data[na_records,]
+
## [1] row.names                                                                
+## [2] X.indicated.by.the.date.in.the.first.column..............................
+## <0 lignes> (ou 'row.names' de longueur nulle)
+

Aucune données n’est manquantes dans la base de données.

+

On va renommer les colonnes pour pouvoir mieux analyser les +données

+
colnames(data) <- c("Date", "CO2")
+data<-data[-1,]
+

On regarde ensuite comment sont codés les variables.

+
class(data$Date) #character
+
## [1] "character"
+
class(data$CO2) #numeric
+
## [1] "character"
+

La variable Date est codé comme un character et la variable CO2 comme +un numérique. On va transformer la variable Date en format date. Les +données date sont sous le format Année-mois-jour.

+
data$Date = as.Date(data$Date)
+class(data$Date)
+
## [1] "Date"
+

La vairable “Date” est maintenant codé comme une date.

+

On vérifie bien qu’il y est 7 jours entre chaque semaine

+
data = data[order(data$Date),]
+all(diff(data$Date) == 7)
+
## [1] FALSE
+

chaque semaine commence un samedi.

+

On crée une variable année et une variable mois, pour regarder +l’évolution annuelle et mensuelle de la concentration en CO2

+
data$Année <- format(as.Date(data$Date, format= "%Y-%m-%d"), "%Y")
+data$Mois<- format(as.Date(data$Date, format= "%Y-%m-%d"), "%Y-%m")
+
+
+

Observation des données

+

On regarde ensuite la distibution de la moyenne de la concentration +anuuelle de 1958 à 2023

+
class(data$Année)
+
## [1] "character"
+
data$Année = as.numeric(data$Année)
+
+library(dplyr)
+
## 
+## Attachement du package : 'dplyr'
+
## Les objets suivants sont masqués depuis 'package:stats':
+## 
+##     filter, lag
+
## Les objets suivants sont masqués depuis 'package:base':
+## 
+##     intersect, setdiff, setequal, union
+
data_annual_mean <- data %>%
+  group_by(Année) %>%
+  summarise(mean_CO2 = mean(CO2, na.rm= TRUE))
+  
+plot(data_annual_mean, type="l", xlab="Année", ylab="Concentratin moyenne annuelle en CO2")
+
## Error in plot.window(...): valeurs finies requises pour 'ylim'
+

+Interprétation: on observe une augmentation de la +concentration moyenne en CO2 de 1958 à 2023.

+

On cherche maintenant à montrer une oscillation périodique et +l’évolution systématique plus lente. Pour cela nous avons utilisé la +sinusoide avec le package ggplot2

+
library(ggplot2)
+
## Warning: le package 'ggplot2' a été compilé avec la version R 4.2.3
+
x <- data$Date
+y <- sin(data$CO2)
+
## Error in sin(data$CO2): argument non numérique pour une fonction mathématique
+
data_periodique <-data.frame(x, y, data$CO2)
+
## Error in data.frame(x, y, data$CO2): objet 'y' introuvable
+
ggplot(data_periodique, aes(x, y)) + geom_line(aes(y= y), color = "blue") + geom_line(aes(y= data.CO2), color = "red")
+
## Error in ggplot(data_periodique, aes(x, y)): objet 'data_periodique' introuvable
+

On regarde l’oscillation seule des années 2000 à 2023:

+
year_2000 <- subset(data, Année >= 2000)
+evolution <- sin(year_2000$CO2)
+
## Error in sin(year_2000$CO2): argument non numérique pour une fonction mathématique
+
data_periodique_2000 <-data.frame(year_2000$Date, year_2000$CO2)
+ggplot(data_periodique_2000, aes(year_2000.Date, year_2000.CO2)) + geom_line()
+

+Sur le graphique on voit bien que l’on a une oscillation chaque année et +que ces oscillations augmentent chaque année. On regarde ensuite en +détaille une année. Nous avons chois l’année 2000 comme exemple.

+
year_2000_2 <- subset(data, Année == 2000)
+evolution <- sin(year_2000_2$CO2)
+
## Error in sin(year_2000_2$CO2): argument non numérique pour une fonction mathématique
+
data_periodique_2000_2 <-data.frame(year_2000_2$Date, year_2000_2$CO2)
+ggplot(data_periodique_2000_2, aes(year_2000_2.Date, year_2000_2.CO2)) + geom_line()
+

+Nous pouvons observer que le pique de l’oscillation se trouve vers le +mois de juin, là où nous avons la concentration la plus haute en CO2. La +concentration la plus base se situe vers le mois d’octobre.

+

Nous regardons ensuite la modélisation de l’évolution de la +concentration en CO2. Ici, nous allons utiliser une régression linéaire +siple.

+
model <- lm(Date ~ CO2, data)
+summary(model)
+
## Error in Ops.difftime((f - mean(f)), 2): '^' non defini pour des objets "difftime"
+
+ + + + +
+ + + + + + + + + + + + + + +