D 계산 함수 만들기
이질성 지수(Index of Dissimilarity)를 계산하려면 여러 단계가 필요하고 재사용성도 높아요. 이번 연습에서는 이전 연습에서 사용했던 dissimilarity 함수를 직접 만들어 보겠습니다. 함수의 입력 매개변수는 소지역(예: tract)의 DataFrame과 세 개의 열 이름이에요. 두 개는 각각 집단 A와 집단 B의 인구수 열이고, 하나는 상위 지역(예: 주 또는 대도시권)의 이름 또는 지리 식별자 열입니다.
참고로, 이질성 지수의 공식은 다음과 같아요.
$$D = \frac{1}{2}\sum{\left\lvert \frac{a}{A} - \frac{b}{B} \right\rvert}$$
pandas 는 평소와 같은 별칭으로 임포트되어 있습니다. 아래 코드에서 groupby 와 merge 는 이미 완료되어 있어요.
이 연습은 강의의 일부입니다
Python으로 미국 인구조사 데이터 분석하기
연습 안내
- 공식에 따라 절댓값 기호 안의 식을 계산하세요: \(A\) 와 $B$의 열 이름은 매개변수
col_A와col_B에 접미사"_sum"을 붙여서 만듭니다. - 단일 열에 대해
sum메서드를 호출하면 시리즈가 반환되므로,to_frame()메서드로 시리즈를 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())