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()`).