CommencezCommencez gratuitement

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

Voir le cours

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ètres col_A et col_B.
  • La méthode sum sur une seule colonne retourne une série ; utilisez la méthode to_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())
Modifier et exécuter le code