Cartographier le second tour français avec R
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
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
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
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
What do you think?