การคำนวณค่า D โดยใช้การจัดกลุ่มใน Pandas
การคำนวณบน DataFrame แบบแยกตามกลุ่มย่อยเป็นสิ่งที่พบบ่อยมาก pandas จึงมีวิธีที่ใช้แทนการวนลูป นั่นคือ method groupby ในโค้ดตัวอย่าง groupby ถูกใช้เพื่อจัดกลุ่มพื้นที่ Census tract ตามรัฐ กล่าวคือ แถวที่มีค่าเดียวกันในคอลัมน์ "state" จะถูกจัดไว้กลุ่มเดียวกัน จากนั้น method sum() จะถูกนำไปใช้ ตามกลุ่ม กับคอลัมน์ต่างๆ
แบบฝึกหัดนี้ยังใช้ merge ซึ่งเป็น method ที่มีประโยชน์อีกตัวหนึ่งใน pandas สำหรับการ join ค่าผลรวมที่จัดกลุ่มแล้วเข้ากับแต่ละ tract ไม่ต้องกังวลเรื่อง syntax ตอนนี้ merge จะอธิบายในบทเรียนถัดไป
pandas ได้ถูก import โดยใช้ alias ตามปกติแล้ว และ DataFrame tracts ที่มีคอลัมน์ประชากร white และ black ก็ถูกโหลดไว้แล้ว ตัวแปร w และ b ถูกกำหนดให้เก็บชื่อคอลัมน์ "white" และ "black" ตามลำดับ
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การวิเคราะห์ข้อมูลสำมะโนประชากรสหรัฐฯ ด้วย Python
คำแนะนำการฝึกหัด
- สร้าง
sums_by_stateโดยใช้groupbyแล้วแสดงผลลัพธ์ - สร้าง
tractsโดยใช้mergeแล้วแสดงผลลัพธ์ - คำนวณ \(\left\lvert\frac{a_i}{A} - \frac{b_i}{B}\right\rvert\) แล้วเก็บค่าไว้ในคอลัมน์ใหม่ชื่อ
D(เตือนความจำ: ผลรวมของประชากรผิวขาวและผิวดำ (\(A\) และ \(B\)) ถูกคำนวณไว้แล้วและพร้อมใช้งานใน DataFrametractsในคอลัมน์ที่มี suffix ว่า"_sum") - รวมค่าคอลัมน์
Dตามรัฐโดยใช้ methodgroupbyแล้วคูณด้วย0.5
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Sum Black and White residents grouped by state
sums_by_state = tracts.groupby("state")[[w, b]].sum()
print(sums_by_state.head())
# Merge the sum with the original tract populations
tracts = pd.merge(tracts, sums_by_state, left_on = "state",
right_index = True, suffixes = ("", "_sum"))
print(tracts.head())
# Calculate inner expression of Index of Dissimilarity formula
tracts["D"] = abs(tracts[____] / tracts[____ + "_sum"] - ____ / ____)
# Calculate the Index of Dissimilarity
print(0.5 * tracts.____(____)["D"].sum())