始める無料で始める

D を計算する関数を作成する

Index of Dissimilarity(隔離指数、D)を計算するには複数の手順が必要で、再利用性も高いです。この演習では、前の演習で使用した関数 dissimilarity を作成します。関数の入力は、小地域(たとえば tract)の DataFrame と、3 つの列名です。すなわち、グループ A とグループ B の人口数が入った 2 つの列、および包含する地理(州や大都市圏など)の名称または識別子が入った列です。

補足として、Index of Dissimilarity の式は次のとおりです。

$$D = \frac{1}{2}\sum{\left\lvert \frac{a}{A} - \frac{b}{B} \right\rvert}$$

pandas は通常のエイリアスでインポート済みです。以下のコードでは、groupbymerge はすでに用意されています。

この演習はコースの一部です

Pythonで学ぶ米国センサスデータ分析

コースを見る

演習の手順

  • 絶対値記号内の式を、上記の数式に基づいて計算します。\(A\) と \(B\) に対応する列名は、引数 col_Acol_B に接尾辞 "_sum" を付けて作成されます。
  • 単一列に対する sum メソッドは Series を返します。to_frame() メソッドで Series を DataFrame に変換してください。
  • 新しい関数を tracts でテストします。MSA 名ごとに White-Black の dissimilarity を計算してください。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

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())
コードを編集して実行