# Jeux de données 'regions_cas18-08-2020' : 
# Nbre de cas confirmés du covid selon la région
region <- read.csv("C:/Users/douwo/OneDrive/Bureau/Cartographie sur R(ISE)/Cartographie sur R/Comment-realiser-une-cartographie-avec-R-master/Partage_Youtube/regions_cas_30-08-2020.csv", header = T, sep = ",") 

# Structure des variables
str(region)
## 'data.frame':    138 obs. of  15 variables:
##  $ DATE       : chr  "2020-03-29" "2020-03-31" "2020-04-01" "2020-04-02" ...
##  $ DAKAR      : int  85 117 131 136 140 150 153 156 167 173 ...
##  $ DIOURBEL   : int  26 26 26 26 26 26 26 26 26 26 ...
##  $ FATICK     : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ KAFFRINE   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ KAOLACK    : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ KÉDOUGOU   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ KOLDA      : int  0 0 0 0 7 7 7 7 7 7 ...
##  $ LOUGA      : int  0 0 0 0 0 0 0 1 1 2 ...
##  $ MATAM      : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ SAINT.LOUIS: int  2 2 3 3 3 5 5 5 5 5 ...
##  $ SÉDHIOU    : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ TAMBACOUNDA: int  0 0 0 0 1 1 1 1 1 1 ...
##  $ THIÈS      : int  24 26 26 26 26 26 26 26 26 26 ...
##  $ ZIGUINCHOR : int  3 3 3 3 3 3 3 3 3 3 ...
# Renommer le nom des régions en format 'nom de famille'
# Càd la première lettre en Majuscule et le reste en minuscule
names(region) <- str_to_title(names(region))   

# Consultons la structure des variables
str(region)
## 'data.frame':    138 obs. of  15 variables:
##  $ Date       : chr  "2020-03-29" "2020-03-31" "2020-04-01" "2020-04-02" ...
##  $ Dakar      : int  85 117 131 136 140 150 153 156 167 173 ...
##  $ Diourbel   : int  26 26 26 26 26 26 26 26 26 26 ...
##  $ Fatick     : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ Kaffrine   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Kaolack    : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Kédougou   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Kolda      : int  0 0 0 0 7 7 7 7 7 7 ...
##  $ Louga      : int  0 0 0 0 0 0 0 1 1 2 ...
##  $ Matam      : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Saint.louis: int  2 2 3 3 3 5 5 5 5 5 ...
##  $ Sédhiou    : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Tambacounda: int  0 0 0 0 1 1 1 1 1 1 ...
##  $ Thiès      : int  24 26 26 26 26 26 26 26 26 26 ...
##  $ Ziguinchor : int  3 3 3 3 3 3 3 3 3 3 ...
#*** Renommer les noms de région avec un accent
names(region)[7] <- "Kédougou"
names(region)[11] <- "Saint-Louis"
names(region)[12] <- "Sédhiou"
names(region)[14] <- "Thiès"

# Consultons la structure des variables
#*** Conversion en type date 'POSIXct()'
region <- region %>%
  mutate(Date = as.POSIXct(Date)) %>%
  arrange(Date)

# Vérification de la structure de date
str(region) 
## 'data.frame':    138 obs. of  15 variables:
##  $ Date       : POSIXct, format: "2020-03-29" "2020-03-31" ...
##  $ Dakar      : int  85 117 131 136 140 150 153 156 167 173 ...
##  $ Diourbel   : int  26 26 26 26 26 26 26 26 26 26 ...
##  $ Fatick     : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ Kaffrine   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Kaolack    : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Kédougou   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Kolda      : int  0 0 0 0 7 7 7 7 7 7 ...
##  $ Louga      : int  0 0 0 0 0 0 0 1 1 2 ...
##  $ Matam      : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Saint-Louis: int  2 2 3 3 3 5 5 5 5 5 ...
##  $ Sédhiou    : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Tambacounda: int  0 0 0 0 1 1 1 1 1 1 ...
##  $ Thiès      : int  24 26 26 26 26 26 26 26 26 26 ...
##  $ Ziguinchor : int  3 3 3 3 3 3 3 3 3 3 ...
#*** Extraction du nbre cummulé de cas confirmés

# le Nre cumulés de cas 'confirmés' du covid
confirmes <- region[region$Date == max(region$Date),][-1]

# Convertissons ce vecteur en valeur entières
confirmes2 <- as.integer(confirmes)
#Regroupons le vecteur 'Regions' et ' confirmes' dans une seule base en colonnes

covid19_region <- data.frame(Regions = as.character(names(confirmes)), confirmes = confirmes2)
library(sf)
senegal <- st_read("C:/Users/douwo/OneDrive/Bureau/Cartographie sur R(ISE)/Cartographie sur R/COVID-19-master/data/SEN/gadm41_SEN_1.shp", layer = "gadm41_SEN_1", stringsAsFactors = F)
## Reading layer `gadm41_SEN_1' from data source 
##   `C:\Users\douwo\OneDrive\Bureau\Cartographie sur R(ISE)\Cartographie sur R\COVID-19-master\data\SEN\gadm41_SEN_1.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 14 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -17.54319 ymin: 12.30786 xmax: -11.34247 ymax: 16.69207
## Geodetic CRS:  WGS 84
# On crée une nouvelle variable
# qui va contenir le nom des régions
senegal$ID <- senegal$NAME_1

# Restreindre le jeux de données 'senegal' à deux variables
# les régions et les données géométriques
senegal <- senegal[c(12, 13)]
#********** Fusion entre les données Géographiques 'senegal' 
# et le jeux de données 'covid19_region'
MapDataCovid <- inner_join(senegal, covid19_region, by = c("ID" = "Regions")) 


# Attention!!! car les commandes qui générent la carte
# ne prennent que les objets 'sf'
# Vérifions la classe
class(MapDataCovid)
## [1] "sf"         "data.frame"
# Librairie
library(ggplot2)

# Etape 1 : Première carte basique
ggplot(MapDataCovid) +
  geom_sf(aes(fill = confirmes))

# Etape 2 : Ajout des cercles proportionels aux nbre de cas confirmés
ggplot(MapDataCovid) +
  geom_sf(aes(fill = confirmes)) +
  stat_sf_coordinates(aes(size = confirmes, fill = confirmes), color = "red", 
                      shape = 20, alpha = 0.6)
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data

# Etape 4 : Modification de la taille des cercles proportionnelles
ggplot(MapDataCovid) +
  geom_sf(aes(fill = confirmes)) +
  stat_sf_coordinates(aes(size = confirmes, fill = confirmes), color = "red",
                      shape = 20, alpha = 0.6) +
  scale_fill_gradient2(name = "Nbre de cas confirmés", low = "lightcyan",
                       mid = "slategray1", high = "darkred") +
  scale_size_area(name = "confirmés", max_size = 25)
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data

# Etape 5 : Ajout de titre + changement de theme
ggplot(MapDataCovid) +
  geom_sf(aes(fill = confirmes)) +
  stat_sf_coordinates(aes(size = confirmes, fill = confirmes), color = "red",
                      shape = 20, alpha = 0.6) +
  scale_fill_gradient2(name = "Nbre de cas confirmés", low = "lightcyan",
                       mid = "slategray1", high = "darkred") +
  scale_size_area(name = "confirmés", max_size = 25) +
  ggtitle("Nombre de cas Confirmés au Sénégal\n jusqu'à ce jour 30 Août 2020") +
  theme_minimal() # theme du fond
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data

# Etape 6 : Ajout de l'étiquette des différentes régions administratives
ggplot(MapDataCovid) +
  geom_sf(aes(fill = confirmes)) +
  stat_sf_coordinates(aes(size = confirmes, fill = confirmes), color = "red",
                      shape = 20, alpha = 0.6) +
  scale_fill_gradient2(name = "confirmés", low = "lightcyan",
                       mid = "slategray1", high = "darkred") +
  scale_size_area(name = "confirmés", max_size = 25) +
  ggtitle("Nombre de cas Confirmés au Sénégal\n jusqu'à ce jour 30 Août 2020") +
  theme_minimal() +
  geom_sf_text(aes(label = ID), vjust = -0.5, check_overlap = T,
               fontface = "italic", colour = "black")
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data

# Etape 7 :

#------- Ajoutons le Nbre de cas confirmés au nom des régions
# Région + Nbre de cas

MapDataCovid <- MapDataCovid %>%
  mutate(char1 = as.character(ID),
         char2=  as.character(confirmes), 
         ID2 = paste(char1, char2, sep = "\n"))

# Affichage
ggplot(MapDataCovid) +
  geom_sf(aes(fill = confirmes)) +
  stat_sf_coordinates(aes(size = confirmes, fill = confirmes), color = "red",
                      shape = 20, alpha = 0.6) +
  scale_fill_gradient2(name = "confirmés", low = "lightcyan",
                       mid = "slategray1", high = "darkred") +
  scale_size_area(name = "confirmés", max_size = 25) +
  ggtitle("Nombre de cas Confirmés au Sénégal\n jusqu'à ce jour 18 Août 2020") +
  theme_minimal() +
  geom_sf_text(aes(label = ID2), vjust = -0.5, check_overlap = T,
               fontface = "italic", colour = "black")
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data

# Etape 8 : Elimination des axes et de leurs étiquettes
ggplot(MapDataCovid) +
  geom_sf(aes(fill = confirmes)) +
  stat_sf_coordinates(aes(size = confirmes, fill = confirmes), color = "red",
                      shape = 20, alpha = 0.6) +
  scale_fill_gradient2(name = "confirmés", low = "lightcyan",
                       mid = "slategray1", high = "darkred") +
  scale_size_area(name = "confirmés", max_size = 25) +
  ggtitle("Nombre de cas Confirmés au Sénégal\n jusqu'à ce jour 30 Août 2020") +
  theme_minimal() +
  geom_sf_text(aes(label = ID2), vjust = -0.5, check_overlap = T,
               fontface = "italic", colour = "black") +
  theme(axis.title.x = element_blank(), # Supprimer l'étiquette de l'axe des X
        axis.title.y = element_blank(), # Supprimer l'étiquette de l'axe des Y
        axis.text = element_blank(),    # Supprimer les axes des X et Y
        legend.position = "bottom")     # Position de la légende en bas
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data

#*****-------------------------- Deuxième Catre (Interactive) avec 'tm_shape()' --------------------------------

# Avec la librairie tmap
library(tmap) # for static and interactive maps

#*******------- Carte Interractive 



# Etape 1 : Importation de la carte du Sénégal
tm_shape(MapDataCovid) + 
  tm_polygons()

# Etape 2 : Remplissage des régions selon le nbr de cas confirmés
tm_shape(MapDataCovid) + 
  tm_polygons("confirmes")

# Rendre interractive la Carte
tmap_mode("view")
## tmap mode set to interactive viewing
tmap_last()
# Etape 3 : Ajout de paramètres (arguments)
tm_shape(MapDataCovid) + 
  tm_polygons("confirmes", id = "ID2",
              title="Nombre de cas Confirmés") 
# Etape 4 : Modification de l'echelle de remplissage des couleurs

# Notre propre échelle
breaks = c(0, 0.5, 1, 2, 4, 5, 10, 20, 80, 90) * 100
# Carte
tm_shape(MapDataCovid) + 
  tm_polygons("confirmes", id = "ID2",
              title="Nombre de cas Confirmés", 
              breaks = breaks)
## Warning: Values have found that are higher than the highest break
# breaks : permet de changer l'echelle de remplissage des couleurs
# Etape 5 : Ajout de l'étiquette des noms de régions
tm_shape(MapDataCovid) + 
  tm_polygons("confirmes", id = "ID2",
              title="Nombre de cas Confirmés", 
              breaks = breaks) +
  tm_text("ID2", scale = 1.3, shadow = T)  # ajout des noms de région
## Warning: Values have found that are higher than the highest break
# scale : taille de la police de caratères
#Etape 6 : Ajout de cercles à rond proportionnel aux nbr de cas confirmés
tm_shape(MapDataCovid) + 
  tm_polygons("confirmes", id = "ID2",
              title="Nombre de cas Confirmés", 
              breaks = breaks) +
  tm_text("ID2", scale = 1.3, shadow = T) +
  tm_bubbles(size = "confirmes", col = "red", alpha = .5, scale = 5, shape = 20)
## Warning: Values have found that are higher than the highest break
## Legend for symbol sizes not available in view mode.
# size : taille suivant le nbr de cas confirmés
# alpha : la transparence ou saturation
# shape = 20 : pour la forme ciculaire