Aan de slagGa gratis aan de slag

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

Cursus bekijken

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 parameters col_A en col_B
  • De methode sum op één kolom geeft een series terug; gebruik to_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())
Code bewerken en uitvoeren