Créer une fonction pour calculer D
Le calcul de l’Indice de dissimilarité comporte plusieurs étapes et peut être réutilisé souvent. Dans cet exercice, vous allez créer la fonction dissimilarity que nous avons utilisée dans l’exercice précédent. Les paramètres d’entrée de la fonction seront un DataFrame de petites zones géographiques (par exemple des « tracts ») et trois noms de colonnes : les deux colonnes contenant les effectifs des populations du Groupe A et du Groupe B, et la colonne contenant les noms ou identifiants géographiques de la zone englobante (par exemple États ou aires métropolitaines).
Pour rappel, la formule de l’Indice de dissimilarité est :
$$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à réalisées pour vous dans le code ci-dessous.
Cet exercice fait partie du cours
Analyzing US Census Data in Python
Instructions
- Calculez l’expression à l’intérieur des barres de valeur absolue selon la formule : les noms de colonnes pour \(A\) et \(B\) sont obtenus en ajoutant le suffixe
"_sum"aux paramètrescol_Aetcol_B - La méthode
sumsur une seule colonne renvoie une série ; utilisez la méthodeto_frame()pour convertir la série en DataFrame - Testez la nouvelle fonction sur
tracts: calculez la dissimilarité Blancs-Noirs par nom de MSA
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
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())