Où y a-t-il le plus de policiers en Europe ?

Calculer la concentration policière dans chaque pays, grâce aux données d’eurostat et de la banque mondiale
FAQ
Auteur·rice·s

Théo Boulakia

Nicolas Mariot

Date de publication

25 juin 2023

Charger les principaux packages

library(here)
library(tidyverse)
library(countrycode)
library(huxtable)

Récupérer les données

Astuce

Pour récupérer des données sur les pays européens, le package eurostat est votre ami. Parcourez le catalogue avec la fonction eurostat::get_eurostat_toc()

crim_just_job_path = here("data", "crim_just_job.rds")
eurostat::get_eurostat("crim_just_job", type = "label", cache_dir = here("data")) |>
  write_rds(crim_just_job_path)
crim_just_job = read_rds(crim_just_job_path)

Une rapide inspection :

glimpse(crim_just_job)
Rows: 9,376
Columns: 6
$ isco08 <chr> "Professional judges", "Professional judges", "Professional jud…
$ sex    <chr> "Females", "Females", "Females", "Females", "Females", "Females…
$ unit   <chr> "Number", "Number", "Number", "Number", "Number", "Number", "Nu…
$ geo    <chr> "Albania", "Austria", "Bosnia and Herzegovina", "Bulgaria", "Cy…
$ time   <date> 2021-01-01, 2021-01-01, 2021-01-01, 2021-01-01, 2021-01-01, 20…
$ values <dbl> 170, 216, 761, 1450, 71, 2080, 1750, 650, 1204, 1887, 71, 28, 4…

Les recoder

Astuce

Dès que vous devez manipuler des noms et codes de pays, pensez au package countrycode.

police_europe = crim_just_job  |> 
  pivot_wider(names_from = c(sex, isco08, unit),
              values_from = "values",
              names_repair = janitor::make_clean_names) |> 
  complete(geo, time) |> 
  mutate(geo = if_else(geo %in% c("Scotland", "England and Wales", "Northern Ireland (UK)"),
                       "United Kingdom", geo)) |>
  summarise(across(ends_with("number"), ~ sum(.x, na.rm = F)), .by = c(geo, time)) |> 
  mutate(geo = str_replace(geo, "Türkiye", "Turkey"),
         geo = if_else(str_detect(geo, "Germany"), "Germany", geo),
         geo = if_else(str_detect(geo, "Kosovo"), "Republic of Kosovo", geo),
         year = year(time),
         wb = countrycode(geo, origin = "country.name", destination = "wb")) |>
  select(wb, year, total_police_officers_number)

On manque de données pour certaines années, pour certains pays :

questionr::freq.na(police_europe)
                             missing %
total_police_officers_number      42 8
wb                                 0 0
year                               0 0

Maintenant les données ressemblent à ceci :

glimpse(police_europe)
Rows: 546
Columns: 3
$ wb                           <chr> "ALB", "ALB", "ALB", "ALB", "ALB", "ALB",…
$ year                         <dbl> 2008, 2009, 2010, 2011, 2012, 2013, 2014,…
$ total_police_officers_number <dbl> 9588, 9229, 9670, 9723, 9728, 9477, 9625,…

Calculer le nombre de policiers par habitant

Ce calcul a déjà été effectué par les auteurs de la base téléchargée. Toutefois, un examen attentif des données montre quelques choix un peu curieux, et nous incite à le refaire nous-même, par précaution.

Astuce

Le package wbstats donne accès aux données de la Banque mondiale, parmi lesquelles le nombre d’habitant, le PIB par tête, etc.

wb_path = here("data", "wb.rds")

L’argument mrv donne le nombre de most recent values à requérir. L’argument gapfill = TRUE remplace les valeurs manquantes éventuelles par la valeur précédente la plus récente.

wbstats::wb_data(country = "countries_only",
                 indicator = c("gdp_per_capita" = "NY.GDP.PCAP.CD",
                               "population" = "SP.POP.TOTL"),
                 mrv = 15,
                 gapfill = TRUE) |>
  write_rds(wb_path)
wb = read_rds(wb_path) |> 
  mutate(country = str_replace(country, "Turkiye", "Turkey"),
         wb = countrycode(country, origin = "country.name", destination = "wb")) %>%
  rename(year = date) %>%
  select(-iso2c, -iso3c, -country)
police_europe_pcm = police_europe |>
    filter(!is.na(total_police_officers_number),
           year <= 2020) |> 
    filter(year == max(year, na.rm = TRUE), .by = wb) |> 
    left_join(wb, by = join_by(wb, year)) |>
    mutate(policiers_pcm = total_police_officers_number / population * 100000) |>
  mutate(pays = countrycode(wb, origin = "wb", destination = "country.name.fr"),
         pays = if_else(wb == "MNE", "Monténégro", pays),
         pays = if_else(wb == "MKD", "Macédoine du Nord", pays),
         policiers_pcm = round(policiers_pcm)) |> 
  arrange(desc(policiers_pcm))

Palmarès

Tableau

Note

La colonne “Année” indique la dernière année pour laquelle des données sont disponibles.

police_europe_pcm |>  
  select(pays, year, policiers_pcm) |> 
  rename(Pays = pays,
         "Année" = year,
         "Policiers pour 100 000 habitants" = policiers_pcm) |> 
  as_huxtable() |> 
  set_number_format(NA) |> 
  huxtable::theme_blue()
PaysAnnéePoliciers pour 100 000 habitants
Monténégro2020732
Serbie2015598
Turquie2020558
Croatie2020526
Grèce2020526
Macédoine du Nord2017514
Bosnie-Herzégovine2020487
Kosovo2020456
Portugal2020443
Malte2020435
Bulgarie2020421
Italie2020400
Slovaquie2020388
Hongrie2020385
Albanie2020382
Tchéquie2020375
Chypre2020371
Espagne2020370
Autriche2020358
Irlande2020356
Slovénie2020344
Belgique2020337
Liechtenstein2020324
Luxembourg2020323
France2019322
Estonie2020306
Allemagne2020301
Pays-Bas2020290
Lituanie2020281
Pologne2020258
Roumanie2020258
Lettonie2020234
Royaume-Uni2016224
Suisse2020216
Suède2020202
Danemark2020194
Islande2020175
Norvège2014167
Finlande2020136

Graphique

police_europe_pcm |> 
  mutate(pays = fct_reorder(pays, policiers_pcm)) |> 
  ggplot(aes(x = policiers_pcm, y = pays)) +
  geom_bar(stat = "identity") +
  labs(x = "Policiers pour 100 000 habitants",
       y = "",
       title = "Les Européens mieux protégés (?) au Sud et à l'Est") +
  theme_minimal()

Citation

BibTeX
@online{boulakia2023,
  author = {Boulakia, Théo and Mariot, Nicolas},
  title = {Où y a-t-il le plus de policiers en Europe\,?},
  date = {2023-06-25},
  url = {https://l-attestation.github.io/exercices/policiers-europe/},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
Boulakia, Théo, and Nicolas Mariot. 2023. “Où y a-t-il le plus de policiers en Europe ?” June 25, 2023. https://l-attestation.github.io/exercices/policiers-europe/.