Maak een functie om D te berekenen
Het berekenen van de Index of Dissimilarity vereist meerdere stappen en kan vaak hergebruikt worden. In deze oefening maak je de functie dissimilarity die we in de vorige oefening gebruikten. De invoerparameters van de functie zijn een DataFrame met kleine geografische eenheden (zoals tracts) en drie kolomnamen: de twee kolommen met bevolkingsaantallen van Groep A en Groep B, en de kolom met de namen of geografische ID’s van de omvattende geografie (zoals staten of metrogebieden).
Ter herinnering, de formule voor de Index of Dissimilarity is:
$$D = \frac{1}{2}\sum{\left\lvert \frac{a}{A} - \frac{b}{B} \right\rvert}$$
pandas is geïmporteerd met de gebruikelijke alias. De groupby en merge zijn hieronder al voor je gedaan in de code.
Deze oefening maakt deel uit van de cursus
US Census-gegevens analyseren in Python
Oefeninstructies
- Bereken de uitdrukking binnen de absolute-waardestreepjes op basis van de formule: de kolomnamen voor \(A\) en \(B\) krijg je door de suffix
"_sum"toe te voegen aan de parameterscol_Aencol_B - De methode
sumop één kolom geeft een series terug; gebruikto_frame()om de series om te zetten naar een DataFrame - Test de nieuwe functie op
tracts: bereken White-Black dissimilarity per MSA-naam
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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())