LoslegenKostenlos loslegen

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

Kurs anzeigen

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_A und col_B den Suffix "_sum" anhängst.
  • Die Methode sum auf einer einzelnen Spalte gibt eine Series zurück; verwende to_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())
Code bearbeiten und ausführen