Cartographier le second tour français avec R

2 minute(s) read

Aperçu du vote au second tour en France, via des cartes réalisées avec R.

Le jeu de données

Le dataset utilisé ici est disponible sur data.gouv : Election présidentielle des 23 avril et 7 mai 2017 - Résultats du 2ème tour. Pour une meilleur compatibilité, j’ai manuellement converti le fichier xls en csv.

Charger les librairies et les données

Chargeons ce jeu de données, ainsi que la carte de France disponible nativement avec ggplot2.

library(tidyverse)
library(stringr)
library(stringi)
result <- read_csv2("Presidentielle_2017_Resultats_Communes_Tour_2.csv")
map <- map_data("france")

Nettoyage des données

Avant de représenter les résultats sur une carte, nous devons commencer par transformer et nettoyer le data.frame.

result <- result %>%
  group_by(`Libellé du département`) %>%
  summarise(tot_vot = sum(Exprimés), 
            tot_blanc = sum(Blancs),
            pourcentage_blanc = tot_blanc / sum(Votants) * 100, 
            tot_abs = sum(Abstentions), 
            pourcentage_abs = tot_abs / sum(Inscrits)* 100,
            tot_macron = sum(Voix), 
            tot_lepen = sum(Voix_1), 
            pourcentage_macron = tot_macron / tot_vot * 100, 
            pourcentage_lepen = tot_lepen / tot_vot * 100) 
names(result)[1] <- "region"
result$region <- stri_trans_general(result$region, "Latin-ASCII") %>%
  str_replace_all("Cote-d'Or", "Cote-Dor") %>%
  str_replace_all("Cotes-d'Armor", "Cotes-Darmor") %>%
  str_replace_all("Corse-du-Sud", "Corse du Sud") %>%
  str_replace_all("Val-d'Oise", "Val-Doise") %>%
  str_replace_all("Corse-du-Sud", "Corse du Sud")

Nous voici avec un tableau contenant les chiffres clés par département, obtenu à partir des résultats par commune. Le nom de la première colonne a été modifié, afin de coller à l’étiquetage region du tableau map. La suite de remplacement de caractères est due à la notation anglaise de map — une transformation a été indispensable pour effectuer la jointure correctement.

result_map <- left_join(x = map[,-6], y = result)

Visualisation

Projetons maintenant nos différentes variables avec R. Ici, c’est l’argument scale_fill_ qui va gérer l’échelle de couleurs utilisée pour chaque carte.

map_theme <- theme(title=element_text(),
                   plot.title=element_text(margin=margin(20,20,20,20), size=18, hjust = 0.5),
                   axis.text.x=element_blank(),
                   axis.text.y=element_blank(),
                   axis.ticks=element_blank(),
                   axis.title.x=element_blank(),
                   axis.title.y=element_blank(),
                   panel.grid.major= element_blank(), 
                   panel.background= element_blank()) 

ggplot(result_map, aes(long,lat, group = group, fill = pourcentage_blanc)) +
  geom_polygon() +
  coord_map() +
  scale_fill_gradient(name = "Pourcentage votes blancs") +
  labs(x = "", 
       y = "", 
       title = "Pourcentage de votes blancs au second tour des présidentielles 2017", 
       subtitle = "Données via data.gouv",
       caption = "http://colinfay.me") +
  map_theme

blancs du second tour

ggplot(result_map, aes(long,lat, group = group, fill = pourcentage_abs)) +
  geom_polygon() +
  coord_map() +
  scale_fill_gradient2(name = "Pourcentage Abstention") +
  labs(x = "", 
       y = "", 
       title = "Pourcentage d'abstention au second tour des présidentielles 2017", 
       subtitle = "Données via data.gouv",
       caption = "http://colinfay.me") +
  map_theme 

abstention second tour

ggplot(result_map, aes(long,lat, group = group, fill = pourcentage_macron)) +
  geom_polygon() +
  coord_map() +
  scale_fill_gradientn(colours = c("yellow","red"), name = "Pourcentage E. Macron") +
  labs(x = "", 
       y = "", 
       title = "Résultats de E. Macron au second tour des présidentielles 2017", 
       subtitle = "Données via data.gouv",
       caption = "http://colinfay.me") +
  map_theme 

macron second tour

ggplot(result_map, aes(long,lat, group = group, fill = pourcentage_lepen)) +
  geom_polygon() +
  coord_map() +
  scale_fill_gradientn(colours = terrain.colors(10), name = "Pourcentage M. Le Pen") +
  labs(x = "", 
       y = "", 
       title = "Résultats de M. Le Pen au second tour des présidentielles 2017", 
       subtitle = "Données via data.gouv",
       caption = "http://colinfay.me") +
  map_theme

Votes pour Marine Le Pen au second tour

Tags:

Categories:

Updated:

What do you think?