CommencerCommencer gratuitement

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

Afficher le cours

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ètres col_A et col_B
  • La méthode sum sur une seule colonne renvoie 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é 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())
Modifier et exécuter le code