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
= here("data", "verbalisations_departement.xlsx") verbalisations_departement_path
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)
= read_excel(verbalisations_departement_path, skip = 2) |>
verbalisations_departement 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
= here("data", "population_departement.xls") population_departement_path
download.file("https://www.insee.fr/fr/statistiques/fichier/1893198/estim-pop-dep-sexe-aq-1975-2023.xls",
population_departement_path)
= read_excel(population_departement_path,
population_departement 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
= population_departement |>
departements 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() |>
::theme_blue() huxtable
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.
::install_github("antuki/CARTElette/CARTElette@RPackage") remotes
::charger_carte(destfile = here("data"),
CARTEletteCOG = 2020,
nivsupra = "DEP")
= st_read(here("data", "DEP_2020_CARTElette.shp"), quiet = T) |>
departements_sf rename(code_departement = "DEP",
nom_departement = "nom")
= c("Guyane", "Martinique", "Guadeloupe", "La Réunion", "Mayotte")
outre_mer = departements_sf |> filter(nom_departement %in% outre_mer) outre_mer_sf
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)
= mapsf::mf_get_breaks(departements$verbalisations_pmla,
breaks_quartile nbreaks = 4,
breaks = "quantile")
= c(9, 22, 55) breaks22
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}
}