아서 터렐

1 day ago 1

  • 현 시점(2025년)의 주요 데이터 검증 도구에 대한 설명 및 상황 별 추천
  • 데이터 검증(유효성 검사) 은 데이터의 품질을 자동 또는 반자동으로 확인하는 과정임
    • 데이터 유형 확인, 누락된 값 수 확인, 비정상적인 값 탐지
  • 데이터프레임의 행뿐만 아니라 API 입력값이나 폼 제출 값도 검증 가능
  • 사용자는 특정 열의 값이 특정 범위에 있어야 한다는 등의 규칙을 설정 가능
  • 검증 실패 시: 오류 발생, 검증 보고서 생성 후 수동 또는 자동 처리 가능

왜 데이터 검증이 중요한가

  • 공공기관의 분석 작업은 다음 두 가지로 나뉨:
    • 애드혹 분석 – 일회성 분석 작업
    • 정기 통계 생성 – 정기적으로 새로운 데이터 수집 및 처리
  • 데이터 오류가 분석 결과에 영향을 주기 전에 검증이 필요함
  • 데이터 검증은 오류 위험을 줄이고 정확도를 높이는 데 효과적임

주요 데이터 검증 도구

1. Great Expectations

  • 생산 등급 수준의 강력한 데이터 검증 도구

  • 오픈 소스 패키지가 있으며, 유료 클라우드 서비스도 제공

  • 고급 기능 제공:

    • 검증 실패 시 Slack 메시지 전송 등 자동화 가능
  • 설정이 복잡하고 데이터 과학 기술이 필요한 경우가 많음

  • 예제 코드:

    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

  • 2024년 출시된 최신 Python 데이터 검증 도구 (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

  • Great Expectations와 유사한 API 제공

  • 통계적 가설 검정 기능 지원

  • 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

  • 데이터프레임이 아닌 딕셔너리 기반 검증 도구
  • JSON 및 비정형 데이터 검증에 적합
  • FastAPI와 같은 API 프레임워크와 통합 가능
  • 예제 코드: 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

  • 딕셔너리 기반 검증 도구
  • 간단한 규칙 기반 설정
  • 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)

공공 부문에서 어떤 도구를 사용할 것인가

  • 데이터프레임 또는 데이터베이스 검증:
    • 생산 시스템에서 사용 → Great Expectations 추천
    • 간단한 검증 → Pandera 추천
    • 최신 도구 시도 → Pointblank 추천
  • API나 사용자 입력 검증:
    • 비정형 데이터 → Pydantic 추천
  • 단순 JSON 검증:
    • jsonschema 추천
  • 단순 검증이 필요하면:
    • Cerberus 추천

Read Entire Article