Créer une fonction pour calculer D
Le calcul de l'indice de dissimilarité comporte plusieurs étapes et se réutilise souvent. Dans cet exercice, vous allez créer la fonction dissimilarity utilisée dans l'exercice précédent. Les paramètres d'entrée de la fonction seront un DataFrame de petites géographies (p. ex. des secteurs de recensement) et trois noms de colonnes : les deux colonnes contenant les effectifs des groupes A et B, et la colonne contenant les noms ou identifiants géographiques de la géographie englobante (p. ex. États ou régions métropolitaines).
Rappel de la formule de l'indice de dissimilarité :
$$D = \frac{1}{2}\sum{\left\lvert \frac{a}{A} - \frac{b}{B} \right\rvert}$$
pandas a été importé avec l'alias habituel. Les opérations groupby et merge sont déjà effectuées pour vous dans le code ci‑dessous.
Cette activité fait partie du cours
Analyser les données du recensement des États-Unis avec Python
Instructions de l’exercice
- Calculez l'expression entre les barres de valeur absolue selon la formule : les noms de colonnes pour \(A\) et \(B\) se forment en ajoutant le suffixe
"_sum"aux paramètrescol_Aetcol_B. - La méthode
sumsur une seule colonne retourne une série ; utilisez la méthodeto_frame()pour convertir la série en DataFrame. - Testez la nouvelle fonction sur
tracts: calculez la dissimilarité Blanc‑Noir par nom de MSA.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
def dissimilarity(df, col_A, col_B, group_by):
# Sum Group A and Group B by grouping column
grouped_sums = df.groupby(group_by)[[col_A, col_B]].sum()
tmp = pd.merge(df, grouped_sums, left_on = group_by,
right_index = True, suffixes = ("", "_sum"))
# Calculate inner expression
tmp["D"] = abs(____)
# Calculate Index of Dissimilarity and convert to DataFrame
return 0.5 * tmp.groupby(group_by)["D"].sum().____
msa_D = dissimilarity(msa_tracts, ____, ____, "msa_name")
print(msa_D.head())