Contrôles et verbalisations

Niveau 2
Clustering
Cet exercice permet de réviser la manipulation de données avec les verbes de {dplyr} et la visualisation avec {ggplot2}. Dans la seconde partie, on se familiarise avec la classification ascendante hiérarchique et quelques métriques de distance.
Date de rendu

13 novembre 2024

Contexte

Vous disposez de données sur le nombre de contrôles et de verbalisations réalisées par les forces de l’ordre dans différents départements français, lors du premier confinement du printemps 2020. Le but est de classer les départements selon ces deux variables.

Les variables date_debut et date_fin donnet les bornes entre lesquelles les chiffres des contrôles et verbalisations ont été récoltés.

Préparation

  • Charger le package {tidyverse} et le package {proxy}
  • Importez les données :
read_csv("https://raw.githubusercontent.com/tblk/enquetes-quantitatives/refs/heads/main/donnees/controles_medias.csv")
  • Importez également les données sur la population de chaque département.
read_csv("https://raw.githubusercontent.com/tblk/enquetes-quantitatives/refs/heads/main/donnees/population_departement.csv")

Recodages

  • Gardez uniquement les observations pour lesquelles le nombre de contrôles et de verbalisations est renseigné.
  • Pour certains départements, on a plusieurs observations. Gardez uniquement celles qui correspondent au plus grand nombre de jours.
  • Gardez uniquement les départements pour lesquels le nombre de jours d’observation est supérieur ou égal à 20.
  • Créez une nouvelle variable donnant le nombre de verbalisations et de contrôles sur 55 jours (la durée du confinement), en supposant que leur rythme journalier est constant sur la période.
  • Joignez le dataframe obtenu avec les données de population, et calculez la prévalence des verbalisations et contrôles (nombre de contrôles et verbalisations pour 1000 habitants adultes.)

Graphique

À l’aide de {ggplot2} et de la fonction geom_point, représentez la prévalence des contrôles et des verbalisations dans chaque département : - En abscisses, les contrôles - En ordonnées, les verbalisations - Les noms des départements doivent apparaître sur le graphe

Astuce

Vous pourrez utiliser le package ggrepel pour ajuster la position des étiquettes des départements.

Distances

  • À l’aide de la fonction dist, calculez la distance euclidienne entre vos observations.
  • À l’aide de la fonction dist du package {proxy} (soit proxy::dist), calculez la distance cosine entre les observations.
  • En quoi ces deux distances diffèrent-elles ? Quels phénomènes distincts capturent-elles ?

Classification ascendante hiérarchique

  • À l’aide de la fonction hclust, réalisez deux classification ascendantes hiérarchiques de vos observations :
    • à partir de la matrice de distance euclidienne
    • à partir de la matrice de distance cosine
  • Comparez ces deux classifications.
Représentation graphique

Pour représenter graphiquement le résultat de votre classification par un arbre, vous pourrez appliquer directement la fonction plot au résultat de hclust, ou passer d’abord par la fonction as.dendrogram, soit :

hclust() |> as.dendrogram() |> plot()

Comprendre cosine

À partir de vos données initiales, calculez le taux de verbalisation pour chaque département (rapport des verbalisations sur les contrôles, multiplié par 100). Calculez la distance entre départements selon cet unique variable, et réalisez une classification ascendante hiérarchique avec hclust. Comparez le résultat avec celui de la CAH sur matrice de distance cosine. Que constatez vous ?

Méthodes d’aggrégation

  • Reprenez la classification obtenue à partir de la matrice de distances euclidiennes, et essayer les quatre méthodes suivantes pour l’argument method de hclust :
    • complete
    • single
    • average
    • ward.D2
  • Que constatez vous lorsque vous représentez l’arbre ?

Représentation graphique

  • Revenez à la CAH sur matrice de distances cosine . Regardez l’arbre et choisissez un nombre k de classes qui vous semble pertinent. “Coupez” votre arbre en k classes, grâce à la fonction cutree.
  • Ajoutez cette partition à votre dataframe initial, sous la forme d’une nouvelle variable appelée clust.
  • Reprenez le ggplot que vous avez construit plus haut, et colorez les points en fonction du groupe auquel ils appartiennent, c’est à dire en fonction de clust.