開始使用免費開始

建立計算 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 已以慣用別名匯入。下面程式碼中的 groupbymerge 已為你完成。

本練習屬於課程

使用 Python 分析美國 Census 資料

檢視課程

練習說明

  • 依照公式計算絕對值符號內的運算式:\(A\) 與 \(B\) 的欄位名稱是將參數 col_Acol_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())
編輯並執行程式碼