- 현 시점(2025년)의 주요 데이터 검증 도구에 대한 설명 및 상황 별 추천
-
데이터 검증(유효성 검사) 은 데이터의 품질을 자동 또는 반자동으로 확인하는 과정임
- 데이터 유형 확인, 누락된 값 수 확인, 비정상적인 값 탐지
- 데이터프레임의 행뿐만 아니라 API 입력값이나 폼 제출 값도 검증 가능
- 사용자는 특정 열의 값이 특정 범위에 있어야 한다는 등의 규칙을 설정 가능
- 검증 실패 시: 오류 발생, 검증 보고서 생성 후 수동 또는 자동 처리 가능
왜 데이터 검증이 중요한가
- 공공기관의 분석 작업은 다음 두 가지로 나뉨:
-
애드혹 분석 – 일회성 분석 작업
-
정기 통계 생성 – 정기적으로 새로운 데이터 수집 및 처리
- 데이터 오류가 분석 결과에 영향을 주기 전에 검증이 필요함
- 데이터 검증은 오류 위험을 줄이고 정확도를 높이는 데 효과적임
주요 데이터 검증 도구
1. Great Expectations
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나 사용자 입력 검증:
-
단순 JSON 검증:
-
단순 검증이 필요하면: