Skapa en funktion för att beräkna D
Att beräkna dissimilaritetsindexet kräver flera steg och kan återanvändas i många sammanhang. I den här övningen skapar du funktionen dissimilarity som vi använde i föregående övning. Funktionens indataparametrar är en DataFrame med geografiska delområden (till exempel census tract) och tre kolumnnamn: de två kolumnerna med befolkningsantal för grupp A och grupp B, samt kolumnen med namn eller geografiska identifierare för det omslutande geografiska området (till exempel delstater eller storstadsområden).
Som en påminnelse är formeln för dissimilaritetsindexet:
$$D = \frac{1}{2}\sum{\left\lvert \frac{a}{A} - \frac{b}{B} \right\rvert}$$
pandas har importerats med det vanliga aliaset. groupby och merge är redan färdiga i koden nedan.
Den här övningen är en del av kursen
Analys av amerikansk folkräkningsdata i Python
Övningsinstruktioner
- Beräkna uttrycket inuti absolutvärdesstreck utifrån formeln: kolumnnamnen för \(A\) och \(B\) bildas genom att lägga till suffixet
"_sum"till parametrarnacol_Aochcol_B - Metoden
sumpå en enskild kolumn returnerar en serie – använd metodento_frame()för att konvertera serien till en DataFrame - Testa den nya funktionen på
tracts: beräkna dissimilariteten mellan vita och svarta efter MSA-namn
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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())