library(here)
library(readxl)
library(tidyverse)
library(sf)
library(janitor)
library(tmap)
library(huxtable)Packages nécessaires
D’où proviennent les données ?
Pour que ces chiffres soient rendus publics, il a fallu l’opiniâtreté d’un journaliste indépendant, Alexandre Léchenet. Celui-ci a saisi la Commission d’Accès aux Documents administratifs, afin de forcer le ministère de l’Intérieur à les dévoiler. Il le raconte dans ce billet de blog.
Les télécharger
verbalisations_departement_path = here("data", "verbalisations_departement.xlsx")download.file(url = "http://blog.alphoenix.net/wp-content/uploads/2021/07/RES_DIF_COVID19_CONFINEMENT_MARS-MAI2020_parDep_20210506.xlsx",
destfile = verbalisations_departement_path)verbalisations_departement = read_excel(verbalisations_departement_path, skip = 2) |>
rename(code_departement = "Département d'infraction",
verbalisations = "Nombre de dossiers d'infraction")Calculer le nombre d’adultes par département
Les chiffres bruts des verbalisations ne suffisent pas, il faut les rapporter à la population de chaque département. Et plus précisément, à la population adulte. Pour deux raisons :
- Les forces de l’ordre n’ont sans doute pas verbalisé beaucoup d’enfants.
- Même si elles l’ont fait, ce ne sont pas les enfants qui ont payé les amendes, mais bien leurs parents.
L’INSEE met à disposition des estimations de population par département, sexe et âge de 1975 à l’année courante. Ces données sont téléchargeables sur cette page
population_departement_path = here("data", "population_departement.xls")download.file("https://www.insee.fr/fr/statistiques/fichier/1893198/estim-pop-dep-sexe-aq-1975-2023.xls",
population_departement_path)population_departement = read_excel(population_departement_path,
sheet = "2020",
range = "A5:W109") |>
rename(code_departement = "...1",
nom_departement = "...2",
population_totale = Total) |>
rowwise() |>
mutate(population_plus_de_15_ans = sum(c_across("15 à 19 ans":"95 ans et plus"))) |>
ungroup() |>
select(code_departement, nom_departement, population_plus_de_15_ans, population_totale) |>
filter(!str_detect(code_departement, "France"),
!str_detect(code_departement, "DOM"))Rapporter les verbalisations au nombre d’adultes
departements = population_departement |>
left_join(verbalisations_departement, by = "code_departement") |>
mutate(verbalisations_pmla = verbalisations / population_plus_de_15_ans * 1000)departements |>
select(nom_departement, verbalisations_pmla) |>
mutate(verbalisations_pmla = round(verbalisations_pmla, 1)) |>
as_huxtable() |>
huxtable::theme_blue()| nom_departement | verbalisations_pmla |
| Ain | 15.2 |
| Aisne | 26.7 |
| Allier | 13.4 |
| Alpes-de-Haute-Provence | 16.8 |
| Hautes-Alpes | 16.6 |
| Alpes-Maritimes | 43.7 |
| Ardèche | 14.3 |
| Ardennes | 18.1 |
| Ariège | 18.9 |
| Aube | 20.4 |
| Aude | 16.6 |
| Aveyron | 13.1 |
| Bouches-du-Rhône | 26.7 |
| Calvados | 18.7 |
| Cantal | 11.8 |
| Charente | 10.8 |
| Charente-Maritime | 19.4 |
| Cher | 17.6 |
| Corrèze | 12.6 |
| Corse-du-Sud | 20.8 |
| Haute-Corse | 18.5 |
| Côte-d'Or | 16.1 |
| Côtes-d'Armor | 13.5 |
| Creuse | 14.1 |
| Dordogne | 14 |
| Doubs | 22.4 |
| Drôme | 19.2 |
| Eure | 17.7 |
| Eure-et-Loir | 17.8 |
| Finistère | 14.9 |
| Gard | 18.9 |
| Haute-Garonne | 22.9 |
| Gers | 12.2 |
| Gironde | 19.7 |
| Hérault | 28 |
| Ille-et-Vilaine | 13.2 |
| Indre | 16.7 |
| Indre-et-Loire | 11.4 |
| Isère | 20 |
| Jura | 13.6 |
| Landes | 15.5 |
| Loir-et-Cher | 11.7 |
| Loire | 20.9 |
| Haute-Loire | 13.7 |
| Loire-Atlantique | 17.3 |
| Loiret | 17.7 |
| Lot | 13.8 |
| Lot-et-Garonne | 19.5 |
| Lozère | 9.3 |
| Maine-et-Loire | 10.5 |
| Manche | 12.7 |
| Marne | 18.9 |
| Haute-Marne | 17.7 |
| Mayenne | 10.9 |
| Meurthe-et-Moselle | 22 |
| Meuse | 19.4 |
| Morbihan | 11.3 |
| Moselle | 24.5 |
| Nièvre | 10.6 |
| Nord | 27.9 |
| Oise | 24.4 |
| Orne | 12.8 |
| Pas-de-Calais | 21.4 |
| Puy-de-Dôme | 13.3 |
| Pyrénées-Atlantiques | 17.9 |
| Hautes-Pyrénées | 14 |
| Pyrénées-Orientales | 29.2 |
| Bas-Rhin | 18.4 |
| Haut-Rhin | 27.8 |
| Rhône | 21.2 |
| Haute-Saône | 12.2 |
| Saône-et-Loire | 15.7 |
| Sarthe | 13.9 |
| Savoie | 18.9 |
| Haute-Savoie | 25.1 |
| Paris | 37.7 |
| Seine-Maritime | 17 |
| Seine-et-Marne | 26.6 |
| Yvelines | 21.6 |
| Deux-Sèvres | 10.7 |
| Somme | 17.8 |
| Tarn | 10.6 |
| Tarn-et-Garonne | 17.5 |
| Var | 26.5 |
| Vaucluse | 22.7 |
| Vendée | 10.8 |
| Vienne | 13.9 |
| Haute-Vienne | 14.1 |
| Vosges | 16.7 |
| Yonne | 16.8 |
| Territoire de Belfort | 20.4 |
| Essonne | 28 |
| Hauts-de-Seine | 20 |
| Seine-Saint-Denis | 41.2 |
| Val-de-Marne | 24.7 |
| Val-d'Oise | 33.9 |
| Guadeloupe | 29.5 |
| Martinique | 15.4 |
| Guyane | 38.3 |
| La Réunion | 17.9 |
| Mayotte | 54.6 |
Pourquoi les habitants des Pyrénées-Orientales (29 verbalisations pour 1000 adultes) ont-ils été deux fois plus verbalisés que ceux du Finistère (15 verbalisations pour 1000 adultes) ? Pourquoi les habitants des Alpes-Maritimes (44 verbalisations pour 1000 adultes) ont-ils été 4 fois plus verbalisés que ceux du Morbihan, de la Mayenne, de la Vendée ou de la Charente (11 verbalisations pour 1000 adultes) ?
Visualiser le palmarès
departements |>
slice_max(order_by = verbalisations_pmla, n = 10) |>
mutate(nom_departement = fct_reorder(nom_departement, verbalisations_pmla)) |>
ggplot(aes(x = verbalisations_pmla, y = nom_departement)) +
geom_bar(stat = "identity", fill = "#E12634") +
labs(x = "Verbalisations pour 1000 adultes",
y = "",
title = "Palmarès des départements les plus verbalisés") +
theme_minimal()
Récupérer la couche cartographique
Pour récupérer les couches cartographiques correspondant à des communes, des départements (y compris d’Outre-Mer) et des régions françaises, votre ami est le package CARTElette. Il peut être installé depuis Github.
remotes::install_github("antuki/CARTElette/CARTElette@RPackage")CARTElette::charger_carte(destfile = here("data"),
COG = 2020,
nivsupra = "DEP")departements_sf = st_read(here("data", "DEP_2020_CARTElette.shp"), quiet = T) |>
rename(code_departement = "DEP",
nom_departement = "nom")
outre_mer = c("Guyane", "Martinique", "Guadeloupe", "La Réunion", "Mayotte")
outre_mer_sf = departements_sf |> filter(nom_departement %in% outre_mer)Discrétiser
La carte sera très différente selon la discrétisation choisie. On peut opter pour une discrétisation par quartiles (quatre classes d’effectifs égaux), pour une discrétisation très simple qui sépare les départements en deux groupes (plus ou moins de 22 verbalisations pour 1000 habitants adultes)
breaks_quartile = mapsf::mf_get_breaks(departements$verbalisations_pmla,
nbreaks = 4,
breaks = "quantile")
breaks22 = c(9, 22, 55)Cartographier
departements_sf |>
select(-nom_departement) |>
left_join(departements, by = "code_departement") |>
tm_shape() +
tm_polygons("verbalisations_pmla",
palette = rcartocolor::carto_pal(n = 4, name = "Sunset"),
breaks = breaks22,
title = "Verbalisations\npour\n1000 adultes :",
legend.format = list(digits = 0, text.separator = "-")) +
tm_shape(outre_mer_sf) +
tm_text(text = "nom_departement", size = .6) +
tm_compass(type = "8star",
position = c("RIGHT", "TOP"),
size = 4) +
tm_credits(text = "Données :\nANTAI",
position = c("right", "bottom")) +
tm_layout(main.title = "L'inégale distribution des amendes",
main.title.position = "center",
main.title.fontface = "bold",
legend.position = c("LEFT", "BOTTOM"),
legend.title.size = .8,
fontfamily = "Helvetica",
frame.lwd = 0)
Citation
@online{boulakia2023,
author = {Boulakia, Théo and Mariot, Nicolas},
title = {Des verbalisations très inégalement distribuées},
date = {2023-06-25},
url = {https://l-attestation.github.io/excercices/verbalisations-departement/},
langid = {fr}
}