• คำอธิบายเกี่ยวกับ เครื่องมือการตรวจสอบข้อมูลหลัก ณ ปัจจุบัน (ปี 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

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น