สร้างฟังก์ชันคำนวณค่า D
การคำนวณ Index of Dissimilarity มีหลายขั้นตอนและมีโอกาสนำกลับมาใช้ซ้ำสูง ในแบบฝึกหัดนี้จะสร้างฟังก์ชัน dissimilarity ที่ใช้ในแบบฝึกหัดก่อนหน้า พารามิเตอร์อินพุตของฟังก์ชันประกอบด้วย DataFrame ของพื้นที่ขนาดเล็ก (เช่น tracts) และชื่อคอลัมน์สามคอลัมน์ ได้แก่ คอลัมน์สองคอลัมน์ที่เก็บจำนวนประชากรของกลุ่ม A และกลุ่ม B และคอลัมน์ที่เก็บชื่อหรือตัวระบุทางภูมิศาสตร์ของพื้นที่ครอบคลุม (เช่น รัฐหรือเขตมหานคร)
เพื่อเป็นการทบทวน สูตรของ Index of Dissimilarity คือ:
$$D = \frac{1}{2}\sum{\left\lvert \frac{a}{A} - \frac{b}{B} \right\rvert}$$
pandas ถูก import ด้วย alias ตามปกติแล้ว และโค้ดส่วน groupby และ merge ได้เตรียมไว้ให้เรียบร้อยแล้ว
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การวิเคราะห์ข้อมูลสำมะโนประชากรสหรัฐฯ ด้วย Python
คำแนะนำการฝึกหัด
- คำนวณนิพจน์ภายในเครื่องหมายค่าสัมบูรณ์ตามสูตร โดยชื่อคอลัมน์ของ \(A\) และ \(B\) ได้จากการเติม suffix
"_sum"ต่อท้ายพารามิเตอร์col_Aและcol_B - เมธอด
sumบนคอลัมน์เดียวจะคืนค่าเป็น series ให้ใช้เมธอดto_frame()เพื่อแปลง series ให้เป็น DataFrame - ทดสอบฟังก์ชันใหม่บน
tractsโดยคำนวณค่า dissimilarity ระหว่าง White และ Black แยกตามชื่อ MSA
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
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())