시작하기무료로 시작하기

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 는 평소와 같은 별칭으로 임포트되어 있습니다. 아래 코드에서 groupbymerge 는 이미 완료되어 있어요.

이 연습은 강의의 일부입니다

Python으로 미국 인구조사 데이터 분석하기

강의 보기

연습 안내

  • 공식에 따라 절댓값 기호 안의 식을 계산하세요: \(A\) 와 $B$의 열 이름은 매개변수 col_Acol_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())
코드 편집 및 실행