Get started

import library

# ETL
library(tidyverse)
## Warning: le package 'ggplot2' a été compilé avec la version R 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.0     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── 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
library(data.table)
## 
## Attachement du package : 'data.table'
## 
## Les objets suivants sont masqués depuis 'package:lubridate':
## 
##     hour, isoweek, mday, minute, month, quarter, second, wday, week,
##     yday, year
## 
## Les objets suivants sont masqués depuis 'package:dplyr':
## 
##     between, first, last
## 
## L'objet suivant est masqué depuis 'package:purrr':
## 
##     transpose
library(readr)
library(DT)
## Warning: le package 'DT' a été compilé avec la version R 4.3.3
library(janitor)
## 
## Attachement du package : 'janitor'
## 
## Les objets suivants sont masqués depuis 'package:stats':
## 
##     chisq.test, fisher.test
library(lubridate)
library(magrittr)
## 
## Attachement du package : 'magrittr'
## 
## L'objet suivant est masqué depuis 'package:purrr':
## 
##     set_names
## 
## L'objet suivant est masqué depuis 'package:tidyr':
## 
##     extract
library(purrr)
library(here)
## Warning: le package 'here' a été compilé avec la version R 4.3.3
## here() starts at C:/Users/adfau/OneDrive/Documents/EIGSI/proj VDD
library(stringr)
library(dplyr)
library(tidyr)
library(ggplot2)
library(shiny)
## Warning: le package 'shiny' a été compilé avec la version R 4.3.3
## 
## Attachement du package : 'shiny'
## 
## Les objets suivants sont masqués depuis 'package:DT':
## 
##     dataTableOutput, renderDataTable
library(geojsonio)
## Warning: le package 'geojsonio' a été compilé avec la version R 4.3.3
## Registered S3 method overwritten by 'geojsonsf':
##   method        from   
##   print.geojson geojson
## 
## Attachement du package : 'geojsonio'
## 
## L'objet suivant est masqué depuis 'package:base':
## 
##     pretty
library(RColorBrewer)
library(sf)
## Warning: le package 'sf' a été compilé avec la version R 4.3.3
## Linking to GEOS 3.11.2, GDAL 3.8.2, PROJ 9.3.1; sf_use_s2() is TRUE
library(ggplot2)
library(sf)
library(tidyr)
library(shiny)
library(ggplot2)
library(sf)
library(dplyr)
library(tidyr)
library(yaml)
library(rmarkdown)
## Warning: le package 'rmarkdown' a été compilé avec la version R 4.3.3
library(knitr)
## Warning: le package 'knitr' a été compilé avec la version R 4.3.3
# Charts
library(highcharter)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo 
## Highcharts (www.highcharts.com) is a Highsoft software product which is
## not free for commercial and Governmental use
library(plotly)
## 
## Attachement du package : 'plotly'
## 
## L'objet suivant est masqué depuis 'package:ggplot2':
## 
##     last_plot
## 
## L'objet suivant est masqué depuis 'package:stats':
## 
##     filter
## 
## L'objet suivant est masqué depuis 'package:graphics':
## 
##     layout
library(ggplot2)

library(RColorBrewer)
library(networkD3)
## Warning: le package 'networkD3' a été compilé avec la version R 4.3.3
## 
## Attachement du package : 'networkD3'
## 
## L'objet suivant est masqué depuis 'package:highcharter':
## 
##     JS
## 
## L'objet suivant est masqué depuis 'package:DT':
## 
##     JS
library(data.tree)
## Warning: le package 'data.tree' a été compilé avec la version R 4.3.3
library(treemap)
## Warning: le package 'treemap' a été compilé avec la version R 4.3.3
library(leaflet)
## Warning: le package 'leaflet' a été compilé avec la version R 4.3.3
## 
## Attachement du package : 'leaflet'
## 
## L'objet suivant est masqué depuis 'package:networkD3':
## 
##     JS
library(car)
## Warning: le package 'car' a été compilé avec la version R 4.3.3
## Le chargement a nécessité le package : carData
## Warning: le package 'carData' a été compilé avec la version R 4.3.3
## 
## Attachement du package : 'car'
## 
## L'objet suivant est masqué depuis 'package:dplyr':
## 
##     recode
## 
## L'objet suivant est masqué depuis 'package:purrr':
## 
##     some
#setwd("~ \Users\adfau\OneDrive\Documents\EIGSI\proj VDD")

entete = NULL
data = NULL

files_names <- list.files(here("SH_TX_metropole"))
for (i in files_names) {
      file= paste0("SH_TX_metropole/",i)
      tmp = read.csv2(file,skip =12)
      
      tmp_entete= read.csv2(file, sep = "=")
      tmp_entete= tmp_entete[c(1,2,3,4,5),1]
      tmp_entete[1] = gsub(" ", "", tmp_entete[1])
      entete = rbind(entete, c(tmp_entete, substring(i,8,9)))
      
      tmp$code = tmp_entete[1]
      data = rbind(data, tmp)
      
}
      
entete = data.frame(entete)
names(entete) = c("code","nom", "latitude","longitude","altitude", "dep")
entete$latitude = as.numeric(entete$latitude)


#data <- data %>% separate(YYYYMM, c('YYYY', 'MM'))
data <- transform(data, Year = substr(YYYYMM, 1, 4), Month = substr(YYYYMM, 5, 6))
data <- data[,-1] # On supprime la 1eme colonne
data$Year = as.numeric(data$Year)
data$VALEUR = as.numeric(data$VALEUR) 

val_moy = NULL
val_moy <- data %>% group_by(Year, code) %>%    summarize(MOY_AN = mean(VALEUR, na.rm=TRUE))
## `summarise()` has grouped output by 'Year'. You can override using the
## `.groups` argument.
val_moy <- left_join(val_moy,entete,by=c("code"))

val_moy2 = NULL
val_moy2 <- val_moy %>% group_by(Year) %>%  summarize(MOY_AN2= mean(MOY_AN, na.rm = TRUE))

scatterplot(MOY_AN2~Year, data=val_moy2) 

val_moy3 = NULL
val_moy3 <- val_moy %>% group_by(dep,Year) %>%  summarize(MOY_AN3= mean(MOY_AN, na.rm = TRUE))
## `summarise()` has grouped output by 'dep'. You can override using the `.groups`
## argument.
#dep

ggplot(val_moy3, aes(Year,MOY_AN3)) + 
    geom_line(aes(color=dep, group=dep)) 

ui <- fluidPage(
  titlePanel("Moyenne Annuelle par Département"),
  sidebarLayout(
    sidebarPanel(
      selectInput("dep", "Choisissez un département :", choices = unique(val_moy3$dep))
    ),
    mainPanel(
      plotOutput("line_plot")
    )
  )
)

server <- function(input, output) {
  filtered_data <- reactive({
    val_moy3 %>%
      filter(dep == input$dep)
  })
 
  output$line_plot <- renderPlot({
    ggplot(filtered_data(), aes(Year, MOY_AN3)) +
      geom_line() +
      labs(title = paste("Moyenne Annuelle pour le Département", input$dep))
  })
}

shinyApp(ui = ui, server = server)
## 
## Listening on http://127.0.0.1:8599

#_________________________________________________






# Read the GeoJSON file
map_data <- st_read("C:/Users/adfau/OneDrive/Documents/EIGSI/proj VDD/georef-france-departement-millesime.geojson")
## Reading layer `georef-france-departement-millesime' from data source 
##   `C:\Users\adfau\OneDrive\Documents\EIGSI\proj VDD\georef-france-departement-millesime.geojson' 
##   using driver `GeoJSON'
## Simple feature collection with 941 features and 14 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -178.1857 ymin: -49.72161 xmax: 168.1442 ymax: 51.08899
## Geodetic CRS:  WGS 84
# Rename "dep" column in val_moy3 to "dep_code"
names(val_moy3)[names(val_moy3) == "dep"] <- "dep_code"

# Check column names of map_data
names(map_data)
##  [1] "geo_point_2d"     "year"             "dep_name_upper"   "dep_name_lower"  
##  [5] "dep_area_code"    "dep_type"         "dep_siren_code"   "dep_is_ctu"      
##  [9] "reg_code"         "reg_name"         "dep_code"         "dep_current_code"
## [13] "dep_name"         "dep_status"       "geometry"
# Check column names of val_moy3
names(val_moy3)
## [1] "dep_code" "Year"     "MOY_AN3"
# Check data types of columns in map_data
sapply(map_data, class)
## $geo_point_2d
## [1] "character"
## 
## $year
## [1] "character"
## 
## $dep_name_upper
## [1] "character"
## 
## $dep_name_lower
## [1] "character"
## 
## $dep_area_code
## [1] "character"
## 
## $dep_type
## [1] "character"
## 
## $dep_siren_code
## [1] "character"
## 
## $dep_is_ctu
## [1] "character"
## 
## $reg_code
## [1] "list"
## 
## $reg_name
## [1] "list"
## 
## $dep_code
## [1] "list"
## 
## $dep_current_code
## [1] "list"
## 
## $dep_name
## [1] "list"
## 
## $dep_status
## [1] "list"
## 
## $geometry
## [1] "sfc_MULTIPOLYGON" "sfc"
# Check data types of columns in val_moy3
sapply(val_moy3, class)
##    dep_code        Year     MOY_AN3 
## "character"   "numeric"   "numeric"
# Flatten list columns in map_data
map_data <- map_data %>%
  unnest(cols = c(reg_code, reg_name, dep_code, dep_current_code, dep_name, dep_status))

filtered_data2 <- ({ val_moy3 %>% filter(Year == 1960) })

# Join val_moy3 data with map_data
map_data <- merge(map_data, filtered_data2, by.x = "dep_code", by.y = "dep_code")


#



# Plot the map
ggplot() +
  geom_sf(data = map_data, aes(fill = MOY_AN3)) +
  scale_fill_gradient(low = "blue", high = "red", name = "T° en °C")

#__________________________________________



# Read the GeoJSON file
map_data2 <- st_read("C:/Users/adfau/OneDrive/Documents/EIGSI/proj VDD/georef-france-departement-millesime.geojson")
## Reading layer `georef-france-departement-millesime' from data source 
##   `C:\Users\adfau\OneDrive\Documents\EIGSI\proj VDD\georef-france-departement-millesime.geojson' 
##   using driver `GeoJSON'
## Simple feature collection with 941 features and 14 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -178.1857 ymin: -49.72161 xmax: 168.1442 ymax: 51.08899
## Geodetic CRS:  WGS 84
# Rename "dep" column in val_moy3 to "dep_code"
names(val_moy3)[names(val_moy3) == "dep"] <- "dep_code"

# Check column names of map_data
names(map_data2)
##  [1] "geo_point_2d"     "year"             "dep_name_upper"   "dep_name_lower"  
##  [5] "dep_area_code"    "dep_type"         "dep_siren_code"   "dep_is_ctu"      
##  [9] "reg_code"         "reg_name"         "dep_code"         "dep_current_code"
## [13] "dep_name"         "dep_status"       "geometry"
# Check column names of val_moy3
names(val_moy3)
## [1] "dep_code" "Year"     "MOY_AN3"
# Check data types of columns in map_data
sapply(map_data2, class)
## $geo_point_2d
## [1] "character"
## 
## $year
## [1] "character"
## 
## $dep_name_upper
## [1] "character"
## 
## $dep_name_lower
## [1] "character"
## 
## $dep_area_code
## [1] "character"
## 
## $dep_type
## [1] "character"
## 
## $dep_siren_code
## [1] "character"
## 
## $dep_is_ctu
## [1] "character"
## 
## $reg_code
## [1] "list"
## 
## $reg_name
## [1] "list"
## 
## $dep_code
## [1] "list"
## 
## $dep_current_code
## [1] "list"
## 
## $dep_name
## [1] "list"
## 
## $dep_status
## [1] "list"
## 
## $geometry
## [1] "sfc_MULTIPOLYGON" "sfc"
# Check data types of columns in val_moy3
sapply(val_moy3, class)
##    dep_code        Year     MOY_AN3 
## "character"   "numeric"   "numeric"
# Flatten list columns in map_data
map_data2 <- map_data2 %>%
  unnest(cols = c(reg_code, reg_name, dep_code, dep_current_code, dep_name, dep_status))

# Définir l'interface utilisateur Shiny
ui <- fluidPage(
  titlePanel("Visualisation de la température moyenne par département"),
  
  # Créer un curseur pour sélectionner l'année
 
  sidebarLayout(
    sidebarPanel(
      # Filtre interactif pour l'année
       year_slider <- sliderInput("year_filter", "Sélectionnez une année", min = min(val_moy3$Year), max = max(val_moy3$Year), value = min(val_moy3$Year), step = 5, sep = "")
      #selectInput("year_filter", "Choisir une année :", choices = unique(val_moy3$Year))
    ),
    mainPanel(
      plotOutput("map_plot")
    )
  )
)

# Définir le serveur Shiny
server <- function(input, output) {
  # Sous-ensemble des données en fonction de l'année sélectionnée
  filtered_data <- reactive({
    val_moy3 %>%
      filter(Year == input$year_filter) 
  })
  
  observe({
    # Flatten list columns in map_data
    map_data2 <- map_data2 %>%
      unnest(cols = c(reg_code, reg_name, dep_code, dep_current_code, dep_name, dep_status))
    
    # Join val_moy3 data with map_data
    map_data2 <- merge(map_data2, filtered_data(), by.x = "dep_code", by.y = "dep_code")
  })
  
  
  
 
     

  # Créer la carte
  output$map_plot <- renderPlot({
    map_data2 <- merge(map_data2, filtered_data(), by.x = "dep_code", by.y = "dep_code")
      
    
    ggplot() +
      geom_sf(data = map_data2, aes(fill = MOY_AN3)) +
      scale_fill_gradient(low = "white", high = "#4f0e1a", name = "T° en °C",limits = c(10, 24) )
      
  })
}

# Lancer l'application Shiny
shinyApp(ui = ui, server = server)
## 
## Listening on http://127.0.0.1:8125