เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การลบคอลัมน์ที่มีจำนวนการสังเกตน้อย

หลังจาก feature engineering อย่างเต็มที่แล้ว ควรหยุดทบทวนสิ่งที่สร้างขึ้นมาสักครู่ หากใช้เทคนิคอัตโนมัติกับ categorical feature เช่น การ explode หรือ OneHot Encoding อาจพบว่าตอนนี้มี binary feature ใหม่เพิ่มมาหลายร้อยตัว แม้ว่าหัวข้อการคัดเลือกฟีเจอร์ (feature selection) จะเป็นเนื้อหาของอีกคอร์สหนึ่ง แต่ก็มีขั้นตอนง่าย ๆ ที่ทำได้เพื่อลดมิติของชุดข้อมูล

ในแบบฝึกหัดนี้ จะลบคอลัมน์ที่มีจำนวนการสังเกต (observations) น้อยกว่า 30 รายการ โดย 30 คือจำนวนขั้นต่ำทั่วไปสำหรับนัยสำคัญทางสถิติ หากน้อยกว่านั้น ความสัมพันธ์ที่พบอาจเกิดจากความบังเอิญล้วน ๆ ซึ่งนำไปสู่ปัญหา overfitting ได้

หมายเหตุ: ข้อมูลพร้อมใช้งานใน dataframe df

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

Feature Engineering with PySpark

ดูคอร์ส

คำแนะนำการฝึกหัด

  • ใช้ลูป for ที่เตรียมไว้ซึ่งวนซ้ำผ่านรายการของ binary column คำนวณ sum ของค่าในคอลัมน์โดยใช้ฟังก์ชัน agg จากนั้นใช้ collect() เพื่อรันการคำนวณทันที และบันทึกผลลัพธ์ไว้ใน obs_count
  • เปรียบเทียบ obs_count กับ obs_threshold โดยคำสั่ง if ควรเป็นจริงเมื่อ obs_count มีค่าน้อยกว่าหรือเท่ากับ obs_threshold
  • ลบคอลัมน์ที่ถูกเพิ่มเข้าไปในลิสต์ cols_to_remove โดยใช้ drop() และอย่าลืมว่า * ช่วยให้ unpack ลิสต์ได้
  • แสดงขนาดก่อนและหลังของ PySpark dataframe โดยใช้ count() สำหรับจำนวนแถว และ len() กับ df.columns หรือ new_df.columns เพื่อหาจำนวนคอลัมน์

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

obs_threshold = 30
cols_to_remove = list()
# Inspect first 10 binary columns in list
for col in binary_cols[0:10]:
  # Count the number of 1 values in the binary column
  obs_count = df.____({col: ____}).____()[0][0]
  # If less than our observation threshold, remove
  if ____ ____ ____:
    cols_to_remove.append(col)
    
# Drop columns and print starting and ending dataframe shapes
new_df = df.____(*____)

print('Rows: ' + str(df.____()) + ' Columns: ' + str(____(df.____)))
print('Rows: ' + str(new_df.____()) + ' Columns: ' + str(____(new_df.____)))
แก้ไขและรันโค้ด