Clamp Value
clamp_value · numbers · number, text
2026-09-23
กำลังประมวลผล…
clamp_value · numbers · number, text
2026-09-23
บางคอลัมน์มีช่วงที่เป็นไปได้ชัดเจนอยู่แล้ว เช่น อายุต้องอยู่ระหว่าง 0 ถึง 120 หรือสัดส่วนต้องอยู่ระหว่าง 0 ถึง 1 ค่าที่หลุดช่วงคือข้อมูลผิด ไม่ใช่ค่าผิดปกติที่ต้องวิเคราะห์ เทคนิคนี้จัดการค่าที่หลุดช่วงด้วยกฎที่คุณกำหนด
clamp ดึงค่าที่ต่ำกว่า min ขึ้นมาที่ min และค่าที่สูงกว่า max ลงมาที่ maxnull เปลี่ยนค่าที่หลุดช่วงเป็นค่าว่าง ซึ่งซื่อสัตย์กว่าเมื่อไม่รู้ค่าที่ถูกต้องremove_row ลบทั้งแถวเมื่อคอลัมน์ใดคอลัมน์หนึ่งที่เลือกหลุดช่วงmin หรือ max อย่างเดียวก็ได้ และระบบจะเตือนถ้าไม่ได้ตั้งทั้งคู่import json
def clamp_value(value, minimum=None, maximum=None, action='clamp'):
if not isinstance(value, (int, float)) or isinstance(value, bool):
return value
out_of_range = (minimum is not None and value < minimum) or (maximum is not None and value > maximum)
if not out_of_range:
return value
if action == 'null':
return None
result = value
if minimum is not None:
result = max(minimum, result)
if maximum is not None:
result = min(maximum, result)
return result
values = [-5, 0, 18, 150, None, 'x']
result = {
'clamp': [clamp_value(v, 0, 120) for v in values],
'null': [clamp_value(v, 0, 120, 'null') for v in values],
}
print(json.dumps(result, ensure_ascii=False))
คอลัมน์ age มีค่า 999 และ -1 ซึ่งเป็นรหัสแทนค่าว่างของระบบเก่า ใช้ clamp_value แบบ null กับช่วง 0 ถึง 120 เพื่อให้ค่าเหล่านั้นกลายเป็นค่าว่างอย่างตรงไปตรงมา แล้วเพิ่ม flag_missing ไว้ก่อนหน้าเพื่อให้ยังรู้ว่าแถวไหนเดิมมีค่าผิด อย่าใช้ clamp ในกรณีนี้ เพราะอายุ 120 ที่ได้มาจาก 999 คือการสร้างข้อมูลปลอม
ใช้ Outlier Review และ outlier_iqr เพื่อหาว่าอะไรคือค่าผิดปกติจริงก่อนตั้งช่วง ใช้ round_number เพื่อจัดทศนิยม และใช้ bucket_values เมื่อจะจัดกลุ่มค่าหลังจากนี้