การจัดการข้อมูลที่หายไป

การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

George Boorman

Curriculum Manager, DataCamp

ทำไมข้อมูลที่หายไปจึงเป็นปัญหา?

  • ส่งผลต่อการกระจายของข้อมูล
    • ข้อมูลความสูงของนักเรียนที่สูงกว่าหายไป
  • ตัวแทนของประชากรไม่ครบถ้วน
    • บางกลุ่มถูกนำเสนอมากเกินสัดส่วน เช่น ขาดข้อมูลของนักเรียนที่อายุมากที่สุด
  • อาจนำไปสู่ข้อสรุปที่ผิดพลาด

การกระจายความสูงของกลุ่มตัวอย่างเทียบกับประชากร แสดงให้เห็นว่ากลุ่มตัวอย่างมีค่าสูงสุดและค่าเฉลี่ยต่ำกว่า

การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

ข้อมูลงานของผู้เชี่ยวชาญด้านข้อมูล

คอลัมน์ คำอธิบาย ประเภทข้อมูล
Working_Year ปีที่เก็บข้อมูล Float
Designation ตำแหน่งงาน String
Experience ระดับประสบการณ์ เช่น "Mid", "Senior" String
Employment_Status ประเภทสัญญาจ้างงาน เช่น "FT", "PT" String
Employee_Location ประเทศที่ทำงาน String
Company_Size ป้ายกำกับขนาดบริษัท เช่น "S", "M", "L" String
Remote_Working_Ratio สัดส่วนเวลาทำงานระยะไกล (%) Integer
Salary_USD เงินเดือนในหน่วยดอลลาร์สหรัฐ Float
การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

เงินเดือนตามระดับประสบการณ์

Box plot เงินเดือนตามระดับประสบการณ์โดยใช้ชุดข้อมูลที่สะอาด มีค่าสูงสุดใกล้ 600,000 ดอลลาร์

Box plot เงินเดือนตามระดับประสบการณ์โดยใช้ชุดข้อมูลที่มีค่าหายไป มีค่าสูงสุดใกล้ 450,000 ดอลลาร์

การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

การตรวจสอบค่าที่หายไป

print(salaries.isna().sum())
Working_Year            12
Designation             27
Experience              33
Employment_Status       31
Employee_Location       28
Company_Size            40
Remote_Working_Ratio    24
Salary_USD              60
dtype: int64
การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

กลยุทธ์การจัดการข้อมูลที่หายไป

  • ลบค่าที่หายไป
    • เมื่อค่าที่หายไปมีไม่เกิน 5% ของทั้งหมด
  • แทนด้วยค่าเฉลี่ย มัธยฐาน หรือฐานนิยม
    • ขึ้นอยู่กับการกระจายและบริบท
  • แทนตามกลุ่มย่อย
    • ระดับประสบการณ์ต่างกันมีมัธยฐานเงินเดือนต่างกัน
การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

การลบค่าที่หายไป

threshold = len(salaries) * 0.05
print(threshold)
30
การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

การลบค่าที่หายไป

cols_to_drop = salaries.columns[salaries.isna().sum() <= threshold]

print(cols_to_drop)
Index(['Working_Year', 'Designation', 'Employee_Location',
       'Remote_Working_Ratio'],
      dtype='object')
salaries.dropna(subset=cols_to_drop, inplace=True)
การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

การแทนค่าด้วยสถิติสรุป

cols_with_missing_values = salaries.columns[salaries.isna().sum() > 0]
print(cols_with_missing_values)
Index(['Experience', 'Employment_Status', 'Company_Size', 'Salary_USD'], 
    dtype='object')
for col in cols_with_missing_values[:-1]:
    salaries[col].fillna(salaries[col].mode()[0])
การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

ตรวจสอบค่าที่ยังหายไป

print(salaries.isna().sum())
Working_Year             0
Designation              0
Experience               0
Employment_Status        0
Employee_Location        0
Company_Size             0
Remote_Working_Ratio     0
Salary_USD              41
การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

การแทนค่าตามกลุ่มย่อย

salaries_dict = salaries.groupby("Experience")["Salary_USD"].median().to_dict()

print(salaries_dict)
{'Entry': 55380.0, 'Executive': 135439.0, 'Mid': 74173.5, 'Senior': 128903.0}
การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

การแทนค่าตามกลุ่มย่อย

salaries["Salary_USD"] = salaries["Salary_USD"].fillna(salaries["Experience"].map(salaries_dict))
การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

ไม่มีค่าที่หายไปอีกแล้ว!

print(salaries.isna().sum())
Working_Year            0
Designation             0
Experience              0
Employment_Status       0
Employee_Location       0
Company_Size            0
Remote_Working_Ratio    0
Salary_USD              0
dtype: int64
การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

มาฝึกกันเถอะ!

การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

Preparing Video For Download...