ภูมิทัศน์ของการตรวจสอบความถูกต้องของข้อมูลในปี 2025
(aeturrell.com)- คำอธิบายเกี่ยวกับ เครื่องมือการตรวจสอบข้อมูลหลัก ณ ปัจจุบัน (ปี 2025) และ คำแนะนำตามสถานการณ์
- การตรวจสอบข้อมูล (validation) คือกระบวนการตรวจสอบคุณภาพของข้อมูลแบบอัตโนมัติหรือกึ่งอัตโนมัติ
- ตรวจสอบประเภทข้อมูล, ตรวจนับค่าที่หายไป, ตรวจจับค่าที่ผิดปกติ
- สามารถตรวจสอบได้ไม่เพียงแถวใน DataFrame แต่ยังรวมถึงค่าป้อนเข้า API หรือค่าที่ส่งมาจากฟอร์ม
- ผู้ใช้สามารถกำหนดกฎได้ เช่น ค่าของคอลัมน์ใดคอลัมน์หนึ่งต้องอยู่ในช่วงที่กำหนด
- เมื่อการตรวจสอบล้มเหลว: สามารถให้เกิดข้อผิดพลาด, สร้างรายงานการตรวจสอบ แล้วจัดการแบบแมนนวลหรืออัตโนมัติได้
ทำไมการตรวจสอบข้อมูลจึงสำคัญ
- งานวิเคราะห์ของหน่วยงานภาครัฐแบ่งได้เป็น 2 ประเภทดังนี้:
- การวิเคราะห์แบบ ad hoc – งานวิเคราะห์ครั้งเดียว
- การสร้างสถิติประจำ – เก็บรวบรวมและประมวลผลข้อมูลใหม่เป็นประจำ
- จำเป็นต้องมีการตรวจสอบก่อนที่ข้อผิดพลาดของข้อมูลจะส่งผลต่อผลลัพธ์การวิเคราะห์
- การตรวจสอบข้อมูลช่วยลดความเสี่ยงจากข้อผิดพลาดและเพิ่มความแม่นยำได้อย่างมีประสิทธิภาพ
เครื่องมือการตรวจสอบข้อมูลหลัก
1. Great Expectations
-
เครื่องมือตรวจสอบข้อมูลที่ทรงพลังระดับ production-grade
-
มีแพ็กเกจโอเพนซอร์ส และมีบริการคลาวด์แบบชำระเงินด้วย
-
มีฟีเจอร์ขั้นสูง:
- สามารถทำงานอัตโนมัติได้ เช่น ส่งข้อความไปยัง Slack เมื่อการตรวจสอบล้มเหลว
-
การตั้งค่าค่อนข้างซับซ้อน และมักต้องอาศัยทักษะด้าน data science
-
โค้ดตัวอย่าง:
import great_expectations as gx import pandas as pd context = gx.get_context() df = pd.read_csv("https://raw.githubusercontent.com/great-expectations/gx_tutorials/…;) data_source = context.data_sources.add_pandas("pandas") data_asset = data_source.add_dataframe_asset(name="pd dataframe asset") batch_definition = data_asset.add_batch_definition_whole_dataframe("batch definition") batch = batch_definition.get_batch(batch_parameters={"dataframe": df}) # 값이 1~6 사이인지 검증 expectation = gx.expectations.ExpectColumnValuesToBeBetween(column="passenger_count", min_value=1, max_value=6) validation_result = batch.validate(expectation)ตัวอย่างการตั้งค่าแจ้งเตือน Slack เมื่อการตรวจสอบล้มเหลว:
from gx.actions import SlackNotificationAction, UpdateDataDocsAction action_list = [ SlackNotificationAction( name="send_slack_notification_on_failed_expectations", slack_token="${validation_notification_slack_webhook}", slack_channel="${validation_notification_slack_channel}", notify_on="failure", show_failed_expectations=True, ), UpdateDataDocsAction(name="update_all_data_docs"), ]
2. Pointblank
- เครื่องมือตรวจสอบข้อมูล Python รุ่นใหม่ที่เปิดตัวในปี 2024 (สร้างโดย RStudio → Posit)
- ได้รับอิทธิพลจาก Great Expectations และมีไวยากรณ์ที่เข้าใจง่าย
- รองรับแหล่งข้อมูลหลากหลาย เช่น Polars, Pandas, DuckDB
- โค้ดตัวอย่าง:
import pointblank as pb validation = ( pb.Validate(data=pb.load_dataset(dataset="small_table")) .col_vals_gt(columns="d", value=100) .col_vals_le(columns="c", value=5) .col_exists(columns=["date", "date_time"]) .interrogate() ) - ยังขาดฟังก์ชันทำงานอัตโนมัติสำหรับขั้นตอนถัดไป → ต้องจัดการงานหลังจากนั้นด้วยตนเอง
3. Pandera
-
มี API คล้ายกับ Great Expectations
-
รองรับฟังก์ชันทดสอบสมมติฐานทางสถิติ
-
รองรับแหล่งข้อมูลหลากหลาย เช่น Polars, Geopandas, Pyspark
-
โค้ดตัวอย่าง:
import pandas as pd import pandera as pa df = pd.DataFrame({ "column1": [1, 4, 0, 10, 9], "column2": [-1.3, -1.4, -2.9, -10.1, -20.4], "column3": ["value_1", "value_2", "value_3", "value_2", "value_1"], }) schema = pa.DataFrameSchema({ "column1": pa.Column(int, checks=pa.Check.le(10)), "column2": pa.Column(float, checks=pa.Check.lt(-1.2)), "column3": pa.Column(str, checks=[ pa.Check.str_startswith("value_"), pa.Check(lambda s: s.str.split("_", expand=True).shape[1] == 2) ]), }) validated_df = schema(df) -
ตัวอย่างการทดสอบสมมติฐานทางสถิติ:
from scipy import stats schema = pa.DataFrameSchema({ "height_in_feet": pa.Column(float, [ pa.Hypothesis.two_sample_ttest( sample1="M", sample2="F", groupby="sex", relationship="greater_than", alpha=0.05, equal_var=True ) ]), "sex": pa.Column(str) }) schema.validate(df)
4. Pydantic
- เครื่องมือตรวจสอบที่อิงกับ dictionary ไม่ใช่ DataFrame
- เหมาะสำหรับการตรวจสอบ JSON และข้อมูลที่ไม่มีโครงสร้างตายตัว
- สามารถผสานการทำงานกับ API framework เช่น FastAPI
- โค้ดตัวอย่าง:
from pydantic import BaseModel, PositiveInt from datetime import datetime class User(BaseModel): id: int name: str = 'John Doe' signup_ts: datetime | None tastes: dict[str, PositiveInt] external_data = { 'id': 123, 'signup_ts': '2019-06-01 12:22', 'tastes': {'wine': 9, 'cheese': 7, 'cabbage': '1'} } user = User(**external_data)
5. Cerberus
- เครื่องมือตรวจสอบแบบอิง dictionary
- ตั้งค่าตามกฎได้อย่างเรียบง่าย
- คืนค่า True/False → ไม่โยนข้อผิดพลาด
- โค้ดตัวอย่าง:
from cerberus import Validator schema = {'name': {'type': 'string'}} v = Validator(schema) document = {'name': 'john doe'} v.validate(document) # True
6. jsonschema
- เครื่องมือตรวจสอบข้อมูล JSON
- นิยามตามสคีมา
- โค้ดตัวอย่าง:
from jsonschema import validate schema = { "type": "object", "properties": { "price": {"type": "number"}, "name": {"type": "string"} } } validate(instance={"name": "Eggs", "price": 34.99}, schema=schema)
ภาครัฐควรใช้เครื่องมือใด
- การตรวจสอบ DataFrame หรือฐานข้อมูล:
- ใช้ในระบบ production → แนะนำ Great Expectations
- การตรวจสอบแบบง่าย → แนะนำ Pandera
- อยากลองเครื่องมือใหม่ → แนะนำ Pointblank
- การตรวจสอบ API หรือข้อมูลป้อนเข้าจากผู้ใช้:
- ข้อมูลไม่มีโครงสร้างตายตัว → แนะนำ Pydantic
- การตรวจสอบ JSON แบบง่าย:
- แนะนำ jsonschema
- หากต้องการการตรวจสอบอย่างง่าย:
- แนะนำ Cerberus
ยังไม่มีความคิดเห็น