建立計算 D 的函式
計算「差異指數(Index of Dissimilarity)」需要多個步驟,而且很常會重複使用。在本練習中,你要建立上一題所使用的 dissimilarity 函式。此函式的輸入參數為:一個小區域地理單位(例如 tracts)的 DataFrame,以及 3 個欄位名稱:分別是 A 與 B 兩個族群的人口數欄位,還有外層容器地理單位(例如州或都會區)的名稱或地理識別碼欄位。
提醒一下,差異指數的公式為:
$$D = \frac{1}{2}\sum{\left\lvert \frac{a}{A} - \frac{b}{B} \right\rvert}$$
pandas 已以慣用別名匯入。下面程式碼中的 groupby 與 merge 已為你完成。
本練習屬於課程
使用 Python 分析美國 Census 資料
練習說明
- 依照公式計算絕對值符號內的運算式:\(A\) 與 \(B\) 的欄位名稱是將參數
col_A與col_B分別加上字尾"_sum"所組成。 - 對單一欄位使用
sum方法會回傳一個 series;請用to_frame()方法把 series 轉換為 DataFrame。 - 用
tracts測試新函式:依 MSA 名稱計算 White-Black 的差異指數。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
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())