filtrer la base car elle est enorme pou bien la manipuler
# Charger les packages nécessaires
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
library(lubridate)
##
## Attachement du package : 'lubridate'
## Les objets suivants sont masqués depuis 'package:base':
##
## date, intersect, setdiff, union
# Charger le fichier CSV
df <- read.csv("C:/Users/ferdaws/Downloads/global_temperature_from_1900.csv", stringsAsFactors = FALSE)
# Extraire l'année depuis la colonne date (supposons qu'elle s'appelle dt)
df$Year <- year(as.Date(df$dt))
# Filtrer uniquement les années 1900, 1950, 2000 et 2013
df_filtered <- df %>%
filter(Year %in% c(1900, 1950, 2000, 2013))
# Vérifier le résultat
head(df_filtered)
## dt AverageTemperature AverageTemperatureUncertainty City
## 1 1900-01-01 3.789 0.627 Ipswich
## 2 1900-01-01 4.292 0.478 Le Havre
## 3 1900-01-01 3.789 0.627 Watford
## 4 1900-01-01 5.645 2.015 Panzhihua
## 5 1900-01-01 -2.065 1.849 Chengdu
## 6 1900-01-01 25.587 0.598 Kluang
## Country Latitude Longitude Year
## 1 United Kingdom 52.24N 0.00W 1900
## 2 France 49.03N 0.00W 1900
## 3 United Kingdom 52.24N 0.00W 1900
## 4 China 26.52N 102.09E 1900
## 5 China 31.35N 103.66E 1900
## 6 Malaysia 2.41N 103.66E 1900
library(dplyr)
library(ggplot2)
library(lubridate)
# Charger le fichier CSV
df <- read.csv("C:/Users/ferdaws/Downloads/global_temperature_from_1900.csv", stringsAsFactors = FALSE)
# Extraire l'année depuis la colonne dt
df$Year <- year(as.Date(df$dt))
# Filtrer uniquement les années souhaitées
df_filtered <- df %>%
filter(Year %in% c(1900, 1950, 2000, 2013))
# Filtrer uniquement les pays choisis
pays_choisis <- c("Russia", "Tunisia", "Turkey", "Egypt", "Saudi Arabia")
df_selected <- df_filtered %>%
filter(Country %in% pays_choisis)
# Calculer la température moyenne par pays et par année
df_country <- df_selected %>% # pour chaque pays et chaque année on calcule la temperature moyennes sur toutes les villes disponibles
group_by(Country, Year) %>%
summarise(AverageTemperature = mean(AverageTemperature, na.rm = TRUE)) %>%
ungroup()
## `summarise()` has grouped output by 'Country'. You can override using the
## `.groups` argument.
# Graphique : évolution de la température pour ces pays
ggplot(df_country, aes(x = factor(Year), y = AverageTemperature, group = Country, color = Country)) +
geom_line(size = 1) +
geom_point(size = 2) +
theme_minimal() +
labs(
x = "Année",
y = "Température moyenne",
title = "Évolution de la température pour 6 pays sélectionnés"
)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
on peut voir ici que la temperature moyennes des pays choisis augements
avec le temps ==> ce graphique permet de visualiser et comparer le
réchauffement climatique sur plus d’un siécle pours ces 5 pays choisis ,
en mettant en evidence à la fois les différences de climat et la
tendance globale à la hausse
library(dplyr)
library(ggplot2)
library(lubridate)
library(sf)
## Linking to GEOS 3.13.1, GDAL 3.11.4, PROJ 9.7.0; sf_use_s2() is TRUE
library(rnaturalearth)
library(rnaturalearthdata)
##
## Attachement du package : 'rnaturalearthdata'
## L'objet suivant est masqué depuis 'package:rnaturalearth':
##
## countries110
# Charger le fichier CSV
df <- read.csv("C:/Users/ferdaws/Downloads/global_temperature_from_1900.csv", stringsAsFactors = FALSE)
# Extraire l'année depuis la colonne dt
df$Year <- year(as.Date(df$dt))
# Filtrer uniquement l'année 1900
df_1900 <- df %>% filter(Year == 1900)
# Calculer la température moyenne par pays
df_country <- df_1900 %>%
group_by(Country) %>%
summarise(AverageTemperature = mean(AverageTemperature, na.rm = TRUE)) %>%
ungroup()
# Charger les données géographiques du monde
world <- ne_countries(scale = "medium", returnclass = "sf")
# Fusionner avec les températures
world_temp <- world %>%
left_join(df_country, by = c("name" = "Country"))
# Carte (heatmap)
p <- ggplot(data = world_temp) +
geom_sf(aes(fill = AverageTemperature), color = "black") +
scale_fill_gradient(low = "yellow", high = "red", na.value = "lightgrey") +
theme_minimal() +
labs(fill = "Température",
title = "Carte des températures moyennes pour l'année 1900 (tous les pays de la base)")
# Afficher la carte
print(p)
interpretation : les zones équartoriales (afrique centrale ,amerique
latine proche de l’equateur , asie du sud-est ) affichent les
temperatures les plus élevees representent en rouge (cela confirment la
logique géographique les regions proches de l’équateur reçoivent plus de
rayonnement solaire et sont donc plus chaudes )
library(dplyr)
library(ggplot2)
library(lubridate)
library(sf)
library(rnaturalearth)
library(rnaturalearthdata)
# Charger le fichier CSV
df <- read.csv("C:/Users/ferdaws/Downloads/global_temperatures_by_city.csv", stringsAsFactors = FALSE)
# Extraire l'année depuis la colonne dt
df$Year <- year(as.Date(df$dt))
# Filtrer uniquement l'année 2013
df_2013 <- df %>% filter(Year == 2013)
# Calculer la température moyenne par pays
df_country <- df_2013 %>%
group_by(Country) %>%
summarise(AverageTemperature = mean(AverageTemperature, na.rm = TRUE)) %>%
ungroup()
# Charger les données géographiques du monde
world <- ne_countries(scale = "medium", returnclass = "sf")
# Fusionner avec les températures
world_temp <- world %>%
left_join(df_country, by = c("name" = "Country"))
# Carte (heatmap)
p <- ggplot(data = world_temp) +
geom_sf(aes(fill = AverageTemperature), color = "black") +
scale_fill_gradient(low = "yellow", high = "red", na.value = "lightgrey") +
theme_minimal() +
labs(fill = "Température",
title = "Carte des températures moyennes pour l'année 2013 (tous les pays de la base)")
# Afficher la carte
print(p)
comparée a la carte de 1900 , on observe que les couleurs globales sont plus chaudes ==> réchauffement climatique globale est trés visible
on observe aussi que les régions les plus fraiches mais moins froides (exp le canada ,Russie apparaissent plus jaunes et moins claires que 1900)==>rechauffement climatique globale visible
# nettoyage de mon data set
library(dplyr)
library(stringr)
# 1️⃣ Charger le dataset
df <- read.csv("C:/Users/ferdaws/Downloads/global_temperatures_by_city.csv", stringsAsFactors = FALSE)
# 2️⃣ Convertir Latitude et Longitude en numérique
# Gestion des N/S/E/W
convert_coord <- function(coord) {
# Retirer espaces
coord <- str_trim(coord)
# Extraire le nombre
num <- as.numeric(str_extract(coord, "[0-9.]+"))
# Multiplier par -1 si S ou W
ifelse(str_detect(coord, "S|W"), -num, num)
}
df$Latitude <- convert_coord(df$Latitude)
df$Longitude <- convert_coord(df$Longitude)
df$AverageTemperature <- as.numeric(df$AverageTemperature)
# 3️⃣ Supprimer les lignes avec NA ou Inf
df_clean <- df %>%
filter(!is.na(Latitude) & !is.na(Longitude) & !is.na(AverageTemperature)) %>%
filter(is.finite(Latitude) & is.finite(Longitude) & is.finite(AverageTemperature))
# 4️⃣ Vérifier combien de lignes valides par pays
pays_valide <- df_clean %>%
group_by(Country) %>%
summarise(n_lignes = n()) %>%
arrange(desc(n_lignes))
print(pays_valide)
## # A tibble: 159 × 2
## Country n_lignes
## <chr> <int>
## 1 India 960548
## 2 China 819132
## 3 United States 661524
## 4 Brazil 451645
## 5 Russia 448663
## 6 Japan 356467
## 7 Indonesia 273295
## 8 Germany 256446
## 9 United Kingdom 215288
## 10 Mexico 208020
## # ℹ 149 more rows
# 5️⃣ Sauvegarder le dataset nettoyé
write.csv(df_clean, "C:/Users/ferdaws/Downloads/global_temperatures_clean.csv", row.names = FALSE)
head(df_clean)
## dt AverageTemperature AverageTemperatureUncertainty City Country
## 1 1951-07-01 25.123 0.231 Accra Ghana
## 2 1922-06-01 26.087 0.649 Accra Ghana
## 3 2011-02-01 27.831 0.407 Accra Ghana
## 4 1922-02-01 27.558 0.416 Accra Ghana
## 5 1973-07-01 25.412 0.204 Accra Ghana
## 6 1898-11-01 26.579 0.842 Accra Ghana
## Latitude Longitude
## 1 5.63 0
## 2 5.63 0
## 3 5.63 0
## 4 5.63 0
## 5 5.63 0
## 6 5.63 0
library(tidyverse) # utulisé pour nettoyer les données +faire des graphiques
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.1 ✔ tibble 3.3.0
## ✔ purrr 1.2.0 ✔ tidyr 1.3.1
## ✔ readr 2.1.6
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
df <- read_csv("C:/Users/ferdaws/Downloads/global_temperatures_by_city.csv") # lecture des fichier csv
## Rows: 8599212 Columns: 7
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (4): City, Country, Latitude, Longitude
## dbl (2): AverageTemperature, AverageTemperatureUncertainty
## date (1): dt
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
df <- read_csv(
"C:/Users/ferdaws/Downloads/global_temperatures_by_city.csv",
col_types = cols( # on impose les types des colonnes
dt = col_date(format="%Y-%m-%d"),# dt = date
AverageTemperature = col_double(),# tepertaure = valeurs numériques
AverageTemperatureUncertainty = col_double(),
City = col_character(),
Country = col_character(),# tesxte car il y'a N,S,E,W
Latitude = col_character(),
Longitude = col_character()
)
)
df <- df %>%
mutate( # conversion des coordonées (40N==>40/20S==>-20)
lat = as.numeric(str_replace(Latitude, "N|S", "")) * ifelse(str_detect(Latitude, "S"), -1, 1),
lon = as.numeric(str_replace(Longitude, "E|W", "")) * ifelse(str_detect(Longitude, "W"), -1, 1)
) # maintenant latitude / longitude peuvent étre utulisées sur une carte
df %>%
mutate(decade = floor(lubridate::year(dt)/10)*10) %>% # creation d'une colonne décennie (1901 ==> 1900/1983==>1980)
ggplot(aes(x = factor(decade), y = AverageTemperature)) +
geom_boxplot(fill="lightblue") +
labs(
title = "Distribution des températures par décennie",
x = "Décennie",
y = "Température moyenne (°C)"
) +
theme_minimal() # la fiqure des boxplot des temperatures pour chaque décennie
## Warning: Removed 364130 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
mon boxplot montre la repartition des temperatures moyennes observeés dans un tres grang nombre de villes du mondes ,regroupées par décennie (1740->2020) Augmentation globale des températures au fil du temps: en regardant les médianes (la ligne au centre du chaque boite) on voit clairement : avant 1850 les temperatures médianes autour de 5-10C a partir du 20éme siécle les temperatures commencent a monter (en 1980 les medianes dépassent souvent 15C) Vaiabilité des temperatures trés grandes :chaque boite est tres “haute” cela montre que dans la méme decennie il éxiste des régions tres froides et des regions tres chaudes
#pour observer la forme de la distribution (centré ou bien étalé )
ggplot(df, aes(x = AverageTemperature)) +
geom_histogram(bins = 30, fill="orange") +
labs(
title = "Distribution des températures",
x = "Température moyenne (°C)",
y = "Fréquence"
) +
theme_minimal()
## Warning: Removed 364130 rows containing non-finite outside the scale range
## (`stat_bin()`).
le graphique represente un histogramme de la temperature moyenne et montre comment ces temperatures sont réparties dans l’ensemble du jeu de données 1/la distribution est asymetrique avec un pic tres prononcé autour de 25C 2/ les temperatures semblent se connecter majoritairement entre 10C et 30C 3/ aux valeurs plus basses (en dessous de 0C) les frequences deviennet beaucoup plus faibles 4/ presence d’un pic tres élevé : le pic autour de 25C indique qu’il y a un nombre trés important d’observations dans cette plage (cela peut indiquer une saison ou une région majoritairement tres chaude )
library(dplyr)
library(ggplot2)
library(akima)
library(stringr)
library(lubridate)
library(maps)
##
## Attachement du package : 'maps'
## L'objet suivant est masqué depuis 'package:purrr':
##
## map
df <- readr::read_csv("C:/Users/ferdaws/Downloads/global_temperatures_by_city.csv",
show_col_types = FALSE)
# Convertir la date
df$dt <- as.Date(df$dt)
# Convertir lat / lon en valeurs numériques
df <- df %>%
mutate(
lat = as.numeric(str_replace(Latitude, "N|S", "")) *
ifelse(str_detect(Latitude, "S"), -1, 1),
lon = as.numeric(str_replace(Longitude, "E|W", "")) *
ifelse(str_detect(Longitude, "W"), -1, 1)
)
# Filtrer l'année 2013
df_2013 <- df %>%
filter(year(dt) == 2013)
# Moyenne annuelle par ville (2013)
df_city_2013 <- df_2013 %>%
group_by(City, Country, lat, lon) %>%
summarize(temp = mean(AverageTemperature, na.rm = TRUE), .groups = "drop")
world <- map_data("world")
# Fonction de carte interpolée
plot_country_interpol <- function(country_name) {
df_c <- df_city_2013 %>% filter(Country == country_name)
if(nrow(df_c) < 3) return(NULL) # il faut au moins 3 points pour interpoler
interp_data <- akima::interp(df_c$lon, df_c$lat, df_c$temp, duplicate = "mean")
interp_df <- data.frame(
lon = rep(interp_data$x, each = length(interp_data$y)),
lat = rep(interp_data$y, length(interp_data$x)),
temp = as.vector(interp_data$z)
)
# Extraire uniquement la carte du pays
world_country <- map_data("world") %>% filter(region == country_name)
ggplot() +
geom_raster(data = interp_df, aes(lon, lat, fill = temp), alpha = 0.9) +
geom_contour(data = interp_df, aes(lon, lat, z = temp), color = "white", alpha = 0.4) +
geom_polygon(data = world_country, aes(long, lat, group = group),
fill = NA, color = "black", size = 0.7) +
# Dégradé bleu (froid) → rouge (chaud)
scale_fill_gradient(name = "Température (°C)", low = "orange", high = "red") +
labs(title = paste("Carte de chaleur -", country_name, "(2013)"),
x = "Longitude", y = "Latitude") +
coord_fixed(xlim = range(world_country$long),
ylim = range(world_country$lat)) +
theme_minimal(base_size = 14)
}
# Exemple")
plot_country_interpol("France")#europe
## Warning: Removed 614 rows containing non-finite outside the scale range
## (`stat_contour()`).
plot_country_interpol("Brazil")#amerique du sud
## Warning: Removed 621 rows containing non-finite outside the scale range
## (`stat_contour()`).
plot_country_interpol("Mexico")#amerique du nord
## Warning: Removed 862 rows containing non-finite outside the scale range
## (`stat_contour()`).