Chapitre 6 Agréger des données
Dans l’analyse de données, il est souvent nécessaire de regrouper les données selon certaines catégories avant d’effectuer des calculs ou des résumés statistiques. La fonction group_by()
du package dplyr
permet de créer ces groupes et d’appliquer des opérations spécifiques à chaque groupe. Cela peut être extrêmement utile pour analyser des sous-ensembles de données de manière indépendante.
6.1 Introduction à group_by()
La fonction group_by()
regroupe les données en fonction d’une ou plusieurs variables. Une fois les données regroupées, vous pouvez utiliser des fonctions comme summarize()
, mutate()
, ou filter()
pour effectuer des calculs sur chaque groupe.
6.1.1 Exemple de base
Prenons un exemple simple avec le jeu de données mtcars
, où nous souhaitons regrouper les voitures par nombre de cylindres et calculer la consommation moyenne (mpg
) pour chaque groupe.
# Charger les packages nécessaires
library(dplyr)
# Afficher les premières lignes du dataset mtcars
head(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
# Grouper les données par nombre de cylindres et calculer la consommation moyenne (mpg)
mpg_par_cylindre <- mtcars %>%
group_by(cyl) %>%
summarize(mpg_moyenne = mean(mpg))
# Afficher les résultats
mpg_par_cylindre
## # A tibble: 3 × 2
## cyl mpg_moyenne
## <dbl> <dbl>
## 1 4 26.7
## 2 6 19.7
## 3 8 15.1
Dans cet exemple :
group_by(cyl)
regroupe les données en fonction de la colonnecyl
, qui représente le nombre de cylindres des voitures.summarize(mpg_moyenne = mean(mpg))
calcule la moyenne de la consommation (mpg
) pour chaque groupe de cylindres.
6.1.2 Comparaison avec Excel
Dans Excel, une tâche similaire serait réalisée à l’aide d’un tableau croisé dynamique. Par exemple, vous placeriez cyl
(nombre de cylindres) en tant qu’axe de lignes et utiliseriez mpg
(consommation) comme valeur à résumer, en sélectionnant la fonction de résumé MOYENNE
.
Différences clés :
- Automatisation : En R, les agrégations peuvent être automatisées via des scripts et appliquées à d’autres jeux de données sans avoir à recréer manuellement les étapes, contrairement à un tableau croisé dynamique dans Excel.
- Complexité : La syntaxe de
dplyr
est flexible et facile à modifier, permettant d’ajuster les calculs ou les regroupements sans réarranger des champs comme dans Excel.
6.1.3 Grouper par plusieurs variables
Il est également possible de grouper les données par plusieurs variables. Par exemple, vous pouvez regrouper les voitures à la fois par nombre de cylindres (cyl
) et par type de boîte de vitesses (am
), puis calculer la consommation moyenne pour chaque combinaison de groupes.
# Grouper les données par nombre de cylindres et type de boîte de vitesses, puis calculer la consommation moyenne
mpg_par_cylindre_et_boite <- mtcars %>%
group_by(cyl, am) %>%
summarize(mpg_moyenne = mean(mpg))
## `summarise()` has grouped output by 'cyl'. You can override using the `.groups` argument.
## # A tibble: 6 × 3
## # Groups: cyl [3]
## cyl am mpg_moyenne
## <dbl> <dbl> <dbl>
## 1 4 0 22.9
## 2 4 1 28.1
## 3 6 0 19.1
## 4 6 1 20.6
## 5 8 0 15.0
## 6 8 1 15.4
Dans cet exemple :
group_by(cyl, am)
crée des groupes en combinant les valeurs des colonnescyl
(nombre de cylindres) et am (type de boîte de vitesses : automatique ou manuelle).summarize()
calcule la moyenne de la consommation (mpg
) pour chaque combinaison de ces groupes.
6.1.4 Comparaison avec Excel
Dans Excel, pour obtenir des agrégations basées sur plusieurs variables, vous devrez ajouter un deuxième champ (par exemple, am
) aux colonnes ou aux lignes dans un tableau croisé dynamique. Bien que cela soit faisable, la modification ou la mise à jour du tableau croisé dynamique peut devenir fastidieuse, surtout si vos données changent fréquemment.
En R, une seule commande permet d’ajouter des critères supplémentaires de regroupement avec group_by()
, ce qui est plus pratique et reproductible dans des analyses complexes.
6.1.5 Autres opérations avec group_by()
Une fois que vos données sont regroupées, vous pouvez appliquer diverses opérations, telles que :
6.1.5.1 Calcul de plusieurs résumés statistiques
Vous pouvez calculer plusieurs résumés statistiques pour chaque groupe. Par exemple, en plus de la consommation moyenne, vous pouvez également calculer la consommation maximale et le nombre d’observations dans chaque groupe.
# Calculer plusieurs résumés statistiques pour chaque groupe
stats_par_cylindre <- mtcars %>%
group_by(cyl) %>%
summarize(
mpg_moyenne = mean(mpg),
mpg_maximum = max(mpg),
n = n()
)
# Afficher les résultats
stats_par_cylindre
## # A tibble: 3 × 4
## cyl mpg_moyenne mpg_maximum n
## <dbl> <dbl> <dbl> <int>
## 1 4 26.7 33.9 11
## 2 6 19.7 21.4 7
## 3 8 15.1 19.2 14
Comparaison avec Excel :
Dans Excel, pour calculer plusieurs résumés statistiques dans un tableau croisé dynamique, vous devrez ajouter plusieurs champs de valeurs, chacun configuré avec une fonction de résumé différente (par exemple, moyenne, maximum, comptage). Cette approche peut rapidement devenir encombrante à gérer lorsque vous avez besoin de plusieurs résumés pour chaque groupe.
En R, summarize()
permet d’effectuer plusieurs agrégations en une seule ligne de code, ce qui est plus clair et facile à ajuster.
6.1.5.2 Filtrer les données après un groupement
Vous pouvez également filtrer les données en fonction des statistiques de chaque groupe. Par exemple, vous pouvez filtrer les groupes où la consommation moyenne dépasse un certain seuil.
# Filtrer les groupes où la consommation moyenne est supérieure à 20 mpg
groupes_filtrés <- mtcars %>%
group_by(cyl) %>%
summarize(mpg_moyenne = mean(mpg)) %>%
filter(mpg_moyenne > 20)
# Afficher les résultats
groupes_filtrés
## # A tibble: 1 × 2
## cyl mpg_moyenne
## <dbl> <dbl>
## 1 4 26.7
Comparaison avec Excel : Dans Excel, il n’est pas possible de filtrer directement les valeurs calculées dans un tableau croisé dynamique. Vous devrez copier les résultats ailleurs et appliquer manuellement des filtres, ce qui augmente le risque d’erreurs.
En R, filter()
peut être appliqué directement après l’agrégation, ce qui permet de filtrer les groupes de manière dynamique et sans étapes manuelles supplémentaires.
6.1.5.3 Utiliser mutate()
sur des groupes
La fonction mutate()
peut être utilisée pour créer de nouvelles colonnes basées sur des calculs effectués sur chaque groupe. Par exemple, vous pouvez créer une colonne indiquant la différence entre la consommation de chaque voiture et la consommation moyenne de son groupe.
# Créer une nouvelle colonne indiquant la différence entre la consommation et la moyenne du groupe
mtcars_avec_diff <- mtcars %>%
group_by(cyl) %>%
mutate(diff_mpg = mpg - mean(mpg))
# Afficher les premières lignes des résultats
head(mtcars_avec_diff)
## # A tibble: 6 × 12
## # Groups: cyl [3]
## mpg cyl disp hp drat wt qsec vs am gear carb diff_mpg
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4 1.26
## 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4 1.26
## 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1 -3.86
## 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1 1.66
## 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2 3.6
## 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1 -1.64
Comparaison avec Excel :
Dans Excel, pour créer une nouvelle colonne basée sur des calculs regroupés (par exemple, la différence par rapport à une moyenne de groupe), vous devrez souvent utiliser des formules comme MOYENNE.SI()
et appliquer manuellement la logique de regroupement pour chaque ligne. Cela peut devenir complexe et sujet à erreurs, surtout avec des données volumineuses.
En R, mutate()
permet d’ajouter de nouvelles colonnes basées sur des calculs de groupe de manière beaucoup plus simple et plus directe.
6.2 Récapitulatif
La fonction group_by()
est un outil puissant pour analyser des sous-groupes de données dans R. Elle permet de :
- Créer des groupes basés sur une ou plusieurs colonnes.
- Appliquer des résumés statistiques avec
summarize()
. - Effectuer des opérations personnalisées avec
mutate()
. - Filtrer les groupes avec
filter()
.
En combinant group_by()
avec d’autres fonctions de dplyr
, vous pouvez effectuer des analyses complexes tout en gardant une syntaxe claire et expressive.
6.2.1 Comparaison générale avec Excel
- Automatisation : Les opérations d’agrégation en R peuvent être automatisées et reproduites facilement, contrairement aux tableaux croisés dynamiques d’Excel qui nécessitent souvent des ajustements manuels.
- Flexibilité : R offre une plus grande flexibilité pour combiner plusieurs opérations d’agrégation, filtrer les groupes, et ajouter des colonnes calculées sans étapes intermédiaires complexes. Efficacité : R permet de traiter des ensembles de données plus volumineux de manière plus performante qu’Excel, où les tableaux croisés dynamiques peuvent devenir lents et encombrants.
6.3 Exercice
À partir de la base statistique départementale de la délinquance enregistrée par la police et la gendarmerie nationales, donnez le nombre de faits par région et par classe.
Calculer le taux pour 1000 habitants par région et par classe.
Challenge : Essayez de réaliser ces agrégations à la fois en R et en Excel