Funktion erstellen, um D zu berechnen
Die Berechnung des Index der Ungleichverteilung (Index of Dissimilarity) erfordert mehrere Schritte und lässt sich oft wiederverwenden. In dieser Aufgabe erstellst du die Funktion dissimilarity, die wir in der vorherigen Übung verwendet haben. Die Eingabeparameter der Funktion sind ein DataFrame mit kleinräumigen Geografien (z. B. Tracts) und drei Spaltennamen: die beiden Spalten mit den Bevölkerungszahlen von Gruppe A und Gruppe B sowie die Spalte mit den Namen oder geografischen Kennungen der übergeordneten Geografie (z. B. Bundesstaaten oder Metropolregionen).
Zur Erinnerung, die Formel für den Index der Ungleichverteilung lautet:
$$D = \frac{1}{2}\sum{\left\lvert \frac{a}{A} - \frac{b}{B} \right\rvert}$$
pandas wurde mit dem üblichen Alias importiert. groupby und merge sind im untenstehenden Code bereits für dich erledigt.
Diese Übung ist Teil des Kurses
Analyse von US-Volkszählungsdaten mit Python
Anleitung zur Übung
- Berechne den Ausdruck innerhalb der Absolutbetragsklammern gemäß der Formel: Die Spaltennamen für \(A\) und \(B\) entstehen, indem du an die Parameter
col_Aundcol_Bden Suffix"_sum"anhängst. - Die Methode
sumauf einer einzelnen Spalte gibt eine Series zurück; verwendeto_frame(), um die Series in ein DataFrame umzuwandeln. - Teste die neue Funktion an
tracts: Berechne die White-Black-Ungleichverteilung nach MSA-Name.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
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())