Calcul de D à l'aide des groupements dans pandas
Effectuer un calcul sur des sous-ensembles d'un DataFrame est si courant que pandas offre une solution autre qu'une boucle : la méthode groupby. Dans le code d'exemple, groupby sert d'abord à regrouper les secteurs par État, c'est‑à‑dire les lignes qui ont la même valeur dans la colonne "state". La méthode sum() est appliquée par groupe aux colonnes.
Cet exercice utilise aussi merge, une autre méthode pratique de pandas, pour joindre les totaux groupés aux secteurs individuels. Ne vous attardez pas à la syntaxe pour l'instant. merge sera expliqué dans une leçon ultérieure.
pandas a été importé avec l'alias habituel, et le DataFrame tracts contenant les colonnes de population white et black a été chargé. Les variables w et b ont été définies avec les noms de colonnes "white" et "black".
Cette activité fait partie du cours
Analyser les données du recensement des États-Unis avec Python
Instructions de l’exercice
- Créez
sums_by_stateavecgroupbyet affichez le résultat. - Créez
tractsavecmergeet affichez le résultat. - Calculez \(\left\lvert\frac{a_i}{A} - \frac{b_i}{B}\right\rvert\) et enregistrez‑le dans une nouvelle colonne
D. (Rappel : La somme des populations blanche et noire (\(A\) et \(B\)) a déjà été calculée et est disponible dans le DataFrametractsdans les colonnes dont le suffixe est"_sum"). - Additionnez la colonne
Dpar État à l'aide de la méthodegroupby, puis multipliez par0.5.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# Sum Black and White residents grouped by state
sums_by_state = tracts.groupby("state")[[w, b]].sum()
print(sums_by_state.head())
# Merge the sum with the original tract populations
tracts = pd.merge(tracts, sums_by_state, left_on = "state",
right_index = True, suffixes = ("", "_sum"))
print(tracts.head())
# Calculate inner expression of Index of Dissimilarity formula
tracts["D"] = abs(tracts[____] / tracts[____ + "_sum"] - ____ / ____)
# Calculate the Index of Dissimilarity
print(0.5 * tracts.____(____)["D"].sum())