Bắt đầu ngayBắt đầu miễn phí

Tạo hàm để tính D

Việc tính Chỉ số Khác biệt (Index of Dissimilarity) gồm nhiều bước và có tiềm năng tái sử dụng cao. Trong bài này, bạn sẽ tạo hàm dissimilarity mà chúng ta đã dùng ở bài trước. Tham số đầu vào của hàm sẽ là một DataFrame của các đơn vị địa lý nhỏ (như tract), cùng ba tên cột: hai cột là số dân của Nhóm A và Nhóm B, và cột chứa tên hoặc mã định danh địa lý của đơn vị bao chứa (như bang hoặc khu vực đô thị).

Nhắc lại, công thức của Chỉ số Khác biệt là:

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

pandas đã được import với bí danh quen thuộc. Các bước groupbymerge đã được chuẩn bị sẵn trong mã bên dưới.

Bài tập này là một phần của khóa học

Phân tích dữ liệu Điều tra Dân số Hoa Kỳ bằng Python

Xem khóa học

Hướng dẫn bài tập

  • Tính biểu thức bên trong dấu giá trị tuyệt đối theo công thức: Tên cột cho \(A\) và \(B\) được tạo bằng cách thêm hậu tố "_sum" vào các tham số col_Acol_B
  • Phương thức sum trên một cột đơn lẻ trả về một series; dùng phương thức to_frame() để chuyển series đó thành DataFrame
  • Kiểm thử hàm mới trên tracts: tính chỉ số khác biệt White-Black theo tên MSA

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

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())
Chỉnh sửa và Chạy Mã