เปอร์เซ็นต์พิกเซลของสุนัข
งานสุดท้ายในการแปลงข้อมูล annotation ของสุนัขคือการหาเปอร์เซ็นต์ของพิกเซลในแต่ละภาพที่แทนสุนัข (หนึ่งตัวหรือมากกว่า) คุณจะต้องนำเทคนิคต่าง ๆ ที่เรียนมาในคอร์สนี้มาใช้คำนวณข้อมูลดังกล่าว แล้วเพิ่มเป็นคอลัมน์สำหรับการวิเคราะห์ในภายหลัง
ในการคำนวณเปอร์เซ็นต์พิกเซล ให้คำนวณจำนวนพิกเซลทั้งหมดที่แทนสุนัขแต่ละตัวก่อน แล้วจึงรวมค่าสำหรับทั้งภาพ โดยคำนวณ bounding box ด้วยสูตร:
(Xend - Xstart) * (Yend - Ystart)
หมายเหตุ: ในกรณีนี้ไม่ต้องคำนึงถึงความเป็นไปได้ที่ bounding box จะซ้อนทับกัน
สำหรับเปอร์เซ็นต์ ให้คำนวณจำนวนพิกเซล "สุนัข" ทั้งหมดหารด้วยขนาดทั้งหมดของภาพ แล้วคูณด้วย 100
DataFrame joined_df มีสถานะเหมือนครั้งล่าสุดที่ใช้งาน และ pyspark.sql.functions ถูก alias เป็น F
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การทำความสะอาดข้อมูลด้วย PySpark
คำแนะนำการฝึกหัด
- กำหนดฟังก์ชัน Python ที่รับ list ของ tuple (อ็อบเจกต์สุนัข) แล้วคำนวณจำนวนพิกเซล "สุนัข" ทั้งหมดต่อภาพ
- สร้าง UDF จากฟังก์ชันดังกล่าว แล้วนำไปสร้างคอลัมน์ใหม่ชื่อ
'dog_pixels'บน DataFrame - สร้างอีกคอลัมน์หนึ่งชื่อ
'dog_percent'ที่แทนเปอร์เซ็นต์ของ'dog_pixels'ในภาพ โดยให้ค่าอยู่ในช่วง 0-100% และใช้ชื่อคอลัมน์เป็น string ล้วน ๆ (เช่น "columnname" แทนที่จะเป็น df.columnname) - แสดง 10 แถวแรกที่มี
'dog_pixels'มากกว่า 60% ในภาพ โดยใช้ string แบบ SQL (เช่น 'columnname > ____')
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Calculate total pixels occupied by dogs in the image
def dogPixelCount(doglist):
totalpixels = ____
for dog in doglist:
totalpixels += (dog[____] - ____[1]) * (____[____] - ____)
return totalpixels
# Define a UDF for the pixel count
udfDogPixelCount = ____
# Add a new column 'dog_pixels' containing the pixel count for dogs in each image
joined_df = ____
# Add a column 'dog_percent' representing the percentage of the image occupied by dogs
joined_df = joined_df.____('dog_percent', (____ / (____)) * ____)
# Show the first 10 annotations with more than 60% dog
____