Skip to content

Latest commit

 

History

History
437 lines (321 loc) · 18.8 KB

File metadata and controls

437 lines (321 loc) · 18.8 KB

데이터 품질 평가 및 모니터링을 위한 데이터 검증 툴킷

Python Versions PyPI PyPI Downloads Conda Version License

CI Build Codecov branch Repo Status Documentation

Contributors Discord Contributor Covenant

Pointblank은 데이터 품질에 대해 다른 접근 방식을 취합니다. 지루한 기술적 작업일 필요가 없습닄. 오히려 팀 구성원 간의 명확한 커뮤니케이션에 초점을 맞춘 프로세스가 될 수 있습니다. 다른 검증 라이브러리가 오류 감지에만 집중하는 반면, Pointblank은 문제 발견과 인사이트 공유 모두에서 뛰어납니다. 아름답고 커스터마이지 가능한 보고서는 검증 결과를 이해관계자와의 대화로 바꿔주어, 데이터 품질 문제를 전체 팀에게 즉시 이해하기 쉭고 실행 가능하게 만듭니다.

몇 시간이 아닌 몇 분 내에 시작하세요. Pointblank의 AI 기반 DraftValidation 기능이 데이터를 분석하고 지능적인 검증 규칙을 자동으로 제안합니다. 빈 검증 스크립트를 센쓀센쓀 보며 어디서부터 시작할지 고민할 필요가 없습니다. Pointblank이 데이터 품질 여정을 킥시트하여 가장 중요한 일에 집중할 수 있도록 도와줍니다.

데이터 품질 발견 사항을 빠르게 전달해야 하는 데이터 과학자, 견고한 파이프라인을 구축하는 데이터 엔지니어, 비즈니스 이해관계자에게 데이터 품질 결과를 발표하는 애널리스트 누구나 Pointblank을 통해 데이터 품질을 단순한 사후 고려 사항에서 경쟁 우위로 바꿀 수 있습니다.

AI 기반 검증 초안 작성 시작하기

DraftValidation 클래스는 LLM을 사용하여 데이터를 분석하고 지능적인 제안이 포함된 완전한 검증 계획을 생성합니다. 이를 통해 데이터 검증을 빠르게 시작하거나 새 프로젝트를 시작할 수 있습니다.

import pointblank as pb

# 데이터 로드
data = pb.load_dataset("game_revenue")              # 예제 데이터셋

# DraftValidation을 사용하여 검증 계획 생성
pb.DraftValidation(data=data, model="anthropic:claude-sonnet-4-5")

결과는 데이터에 기반한 지능적 제안이 포함된 완전한 검증 계획입니다:

import pointblank as pb

# 검증 계획
validation = (
    pb.Validate(
        data=data,
        label="Draft Validation",
        thresholds=pb.Thresholds(warning=0.10, error=0.25, critical=0.35)
    )
    .col_vals_in_set(columns="item_type", set=["iap", "ad"])
    .col_vals_gt(columns="item_revenue", value=0)
    .col_vals_between(columns="session_duration", left=3.2, right=41.0)
    .col_count_match(count=11)
    .row_count_match(count=2000)
    .rows_distinct()
    .interrogate()
)

validation

필요에 따라 생성된 검증 계획을 복사, 붙여넣기 및 커스터마이지하세요.

체이닝 가능한 검증 API

Pointblank의 체이닝 가능한 API는 검증을 간단하고 읽기 쉬답게 만듭니다. 동일한 패턴이 항상 적용됩니다: (1) Validate로 시작, (2) 검증 단계 추가, (3) interrogate()로 마무리.

import pointblank as pb

validation = (
   pb.Validate(data=pb.load_dataset(dataset="small_table"))
   .col_vals_gt(columns="d", value=100)             # 값 > 100 검증
   .col_vals_le(columns="c", value=5)               # 값 <= 5 검증
   .col_exists(columns=["date", "date_time"])       # 열 존재 여부 확인
   .interrogate()                                   # 실행하고 결과 수집
)

# REPL에서 검증 보고서 얻기:
validation.get_tabular_report().show()

# 노트북에서는 간단히:
validation

질의된 validation 객체가 있으면 다음과 같은 다양한 메서드를 활용하여 인사이트를 추출할 수 있습니다:

  • 개별 단계에 대한 상세 보고서를 얻어 무엇이 잘못되었는지 확인
  • 검증 결과에 기반하여 테이블 필터링
  • 디버깅을 위해 문제가 있는 데이터 추출

Pointblank을 선택해야 하는 이유?

  • 현재 스택과 작동: Polars, Pandas, DuckDB, MySQL, PostgreSQL, SQLite, Parquet, PySpark, Snowflake 등과 완벽하게 통합!
  • 아름다운 대화형 보고서: 문제를 강조하고 데이터 품질 소통에 도움이 되는 명확한 검증 결과
  • 구성 가능한 검증 파이프라인: 완전한 데이터 품질 워크플로우로 검증 단계 연결
  • 임계값 기반 알림: 사용자 정의 작업으로 '경고', '오류', '심각' 임계값 설정
  • 실용적인 출력: 테이블 필터링, 문제 데이터 추출 또는 다운스트림 프로세스 트리거에 결과 사용

실제 예제

import pointblank as pb
import polars as pl

# 데이터 로드
sales_data = pl.read_csv("sales_data.csv")

# 포괄적인 검증 생성
validation = (
   pb.Validate(
      data=sales_data,
      tbl_name="sales_data",           # 보고용 테이블 이름
      label="실제 예제",                # 보고서에 나타나는 검증 라벨
      thresholds=(0.01, 0.02, 0.05),   # 경고, 오류, 심각한 문제에 대한 임계값 설정
      actions=pb.Actions(              # 임계값 초과에 대한 작업 정의
         critical="단계 {step}에서 중요한 데이터 품질 문제 발견 ({time})."
      ),
      final_actions=pb.FinalActions(   # 전체 검증에 대한 최종 작업 정의
         pb.send_slack_notification(
            webhook_url="https://hooks.slack.com/services/your/webhook/url"
         )
      ),
      brief=True,                      # 각 단계에 자동 생성된 요약 추가
      lang="ko",
   )
   .col_vals_between(            # 정밀하게 숫자 범위 검사
      columns=["price", "quantity"],
      left=0, right=1000
   )
   .col_vals_not_null(           # '_id'로 끝나는 열에 널 값이 없는지 확인
      columns=pb.ends_with("_id")
   )
   .col_vals_regex(              # 정규식으로 패턴 검증
      columns="email",
      pattern="^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"
   )
   .col_vals_in_set(             # 범주형 값 확인
      columns="status",
      set=["pending", "shipped", "delivered", "returned"]
   )
   .conjointly(                  # 여러 조건 결합
      lambda df: pb.expr_col("revenue") == pb.expr_col("price") * pb.expr_col("quantity"),
      lambda df: pb.expr_col("tax") >= pb.expr_col("revenue") * 0.05
   )
   .interrogate()
)
단계 7에서 중요한 데이터 품질 문제 발견 (2025-04-16 15:03:04.685612+00:00).
# 팀과 공유할 수 있는 HTML 보고서 가져오기
validation.get_tabular_report().show("browser")
# 특정 단계의 실패 레코드 보고서 가져오기
validation.get_step_report(i=3).show("browser")  # 단계 3의 실패 레코드 가져오기

YAML 구성

휴대 가능하고 버전 관리되는 검증 워크플로우가 필요한 팀을 위해 Pointblank은 YAML 구성 파일을 지원합니다. 이를 통해 다양한 환경과 팀원 간에 검증 로직을 쉽게 공유할 수 있어 모든 사람이 같은 페이지에 있을 수 있습니다.

validation.yaml

validate:
  data: small_table
  tbl_name: "small_table"
  label: "시작하기 검증"

steps:
  - col_vals_gt:
      columns: "d"
      value: 100
  - col_vals_le:
      columns: "c"
      value: 5
  - col_exists:
      columns: ["date", "date_time"]

YAML 검증 실행

import pointblank as pb

# YAML 구성에서 검증 실행
validation = pb.yaml_interrogate("validation.yaml")

# 다른 검증과 마찬가지로 결과 얻기
validation.get_tabular_report().show()

이 접근 방식은 다음에 완벽합니다:

  • CI/CD 파이프라인: 코드와 함께 검증 규칙 저장
  • 팀 협업: 읽기 쉬운 형식으로 검증 로직 공유
  • 환경 일관성: 개발, 스테이징, 프로덕션에서 동일한 검증 사용
  • 문서화: YAML 파일이 데이터 품질 요구사항의 살아있는 문서 역할

명령줄 인터페이스 (CLI)

Pointblank은 pb라는 강력한 CLI 유틸리티를 포함하여 명령줄에서 직접 데이터 검증 워크플로우를 실행할 수 있습니다. CI/CD 파이프라인, 예약된 데이터 품질 검사 또는 빠른 검증 작업에 완벽합니다.

데이터 탐색

# 데이터의 빠른 미리보기 얻기
pb preview small_table

# GitHub URL에서 데이터 미리보기
pb preview "https://github.com/user/repo/blob/main/data.csv"

# Parquet 파일의 누락된 값 확인
pb missing data.parquet

# 데이터베이스 연결에서 열 요약 생성
pb scan "duckdb:///data/sales.ddb::customers"

필수 검증 실행

# YAML 구성 파일에서 검증 실행
pb run validation.yaml

# Python 파일에서 검증 실행
pb run validation.py

# 중복 행 확인
pb validate small_table --check rows-distinct

# GitHub에서 직접 데이터 검증
pb validate "https://github.com/user/repo/blob/main/sales.csv" --check col-vals-not-null --column customer_id

# Parquet 데이터셋에서 null 값이 없는지 확인
pb validate "data/*.parquet" --check col-vals-not-null --column a

# 디버깅을 위해 실패 데이터 추출
pb validate small_table --check col-vals-gt --column a --value 5 --show-extract

CI/CD와 통합

# 한 줄 검증에서 자동화를 위한 종료 코드 사용 (0 = 통과, 1 = 실패)
pb validate small_table --check rows-distinct --exit-code

# 종료 코드로 검증 워크플로우 실행
pb run validation.yaml --exit-code
pb run validation.py --exit-code

현실적인 테스트 데이터 생성

검증 워크플로우를 위한 테스트 데이터가 필요하신가요? generate_dataset() 함수는 스키마 정의를 기반으로 현실적이고 로케일 인식 합성 데이터를 생성합니다. 프로덕션 데이터 없이 파이프라인을 개발하거나, 재현 가능한 시나리오로 CI/CD 테스트를 실행하거나, 프로덕션 데이터가 준비되기 전에 워크플로우를 프로토타입하는 데 매우 유용합니다.

import pointblank as pb

# 필드 제약 조건이 있는 스키마 정의
schema = pb.Schema(
    user_id=pb.int_field(min_val=1, unique=True),
    name=pb.string_field(preset="name"),
    email=pb.string_field(preset="email"),
    age=pb.int_field(min_val=18, max_val=100),
    status=pb.string_field(allowed=["active", "pending", "inactive"]),
)

# 10개의 현실적인 테스트 데이터 행 생성
data = pb.generate_dataset(schema, n=10, seed=23)

pb.preview(data)

생성기는 다음 기능으로 정교한 데이터 생성을 지원합니다:

  • 프리셋을 사용한 현실적인 데이터: "name", "email", "address", "phone" 등의 내장 프리셋 사용
  • 유저 에이전트 문자열: 17개 브라우저 카테고리에서 42,000개 이상의 고유한 조합으로 매우 다양하고 사실적인 브라우저 유저 에이전트 문자열 생성
  • 100개국 지원: 로케일별 데이터 생성 (예: country="DE"로 독일 주소)
  • 필드 제약 조건: 범위, 패턴, 고유성 및 허용 값 제어
  • 다중 출력 형식: 기본적으로 Polars DataFrame을 반환하지만, Pandas (output="pandas") 또는 딕셔너리 (output="dict")도 지원

Pointblank을 차별화하는 기능

  • 완전한 검증 워크플로우: 단일 파이프라인에서 데이터 액세스부터 검증, 보고까지
  • 협업을 위한 설계: 아름다운 대화형 보고서를 통해 동료들과 결과 공유
  • 실용적인 출력: 필요한 것을 정확히 얻기: 개수, 추출, 요약 또는 완전한 보고서
  • 유연한 배포: 노트북, 스크립트 또는 데이터 파이프라인에서 사용
  • 합성 데이터 생성: 30개 이상의 프리셋, 유저 에이전트 문자열, 로케일 인식 포맷팅, 100개국 지원으로 사실적인 테스트 데이터 생성
  • 맞춤형 설정: 특정 요구에 맞게 검증 단계와 보고 조정
  • 국제화: 보고서는 영어, 스페인어, 프랑스어, 독일어 등 40개의 언어로 생성 가능

문서 및 예제

문서 사이트에서 다음을 확인하세요:

커뮤니티 참여

의견을 듣고 싶습니다! 다음과 같이 연결하세요:

설치

pip를 사용하여 Pointblank을 설치할 수 있습니다:

pip install pointblank

Conda-Forge에서도 설치할 수 있습니다:

conda install conda-forge::pointblank

Polars 또는 Pandas가 설치되어 있지 않다면 Pointblank을 사용하기 위해 둘 중 하나를 설치해야 합니다.

pip install "pointblank[pl]" # Polars와 함께 Pointblank 설치
pip install "pointblank[pd]" # Pandas와 함께 Pointblank 설치

DuckDB, MySQL, PostgreSQL 또는 SQLite와 함께 Pointblank을 사용하려면 적절한 백엔드로 Ibis 설치:

pip install "pointblank[duckdb]"   # Ibis + DuckDB와 함께 Pointblank 설치
pip install "pointblank[mysql]"    # Ibis + MySQL과 함께 Pointblank 설치
pip install "pointblank[postgres]" # Ibis + PostgreSQL과 함께 Pointblank 설치
pip install "pointblank[sqlite]"   # Ibis + SQLite와 함께 Pointblank 설치

기술 세부사항

Pointblank은 Polars 및 Pandas DataFrame 작업을 위해 Narwhals를 사용하고, 데이터베이스 및 파일 형식 지원을 위해 Ibis와 통합됩니다. 이 아키텍처는 다양한 소스에서 테이블 데이터를 검증하기 위한 일관된 API를 제공합니다.

Pointblank에 기여하기

Pointblank의 지속적인 개발에 기여하는 방법은 여러 가지가 있습니다. 일부 기여는 간단할 수 있으며(오타 수정, 문서 개선, 기능 요청 문제 제출 등), 다른 기여는 더 많은 시간과 노력이 필요할 수 있습니다(질문 응답 및 코드 변경 PR 제출 등). 어떤 도움이든 정말 감사히 여기고 있습니다!

시작 방법에 대한 정보는 기여 가이드라인을 참조하세요.

로드맵

다음과 같은 기능으로 Pointblank을 적극적으로 개선하고 있습니다:

  1. 포괄적인 데이터 품질 검사를 위한 추가 검증 방법
  2. 고급 로깅 기능
  3. 임계값 초과를 위한 메시징 액션(Slack, 이메일)
  4. LLM 기반 검증 제안 및 데이터 사전 생성
  5. 파이프라인 이식성을 위한 JSON/YAML 구성
  6. 명령줄에서 검증을 위한 CLI 유틸리티
  7. 확장된 백엔드 지원 및 인증
  8. 고품질 문서 및 예제

기능이나 개선 사항에 대한 아이디어가 있으시면 주저하지 말고 공유해 주세요! Pointblank을 개선할 방법을 항상 찾고 있습니다.

행동 강령

Pointblank 프로젝트는 기여자 행동 강령과 함께 출판되었습니다.
이 프로젝트에 참여함으로써 귀하는 그 조건을 준수하는 데 동의합니다.

📄 라이선스

Pointblank은 MIT 라이선스로 제공됩니다.

© Posit Software, PBC.

🏛️ 거버넌스

이 프로젝트는 주로 Rich Iannone에 의해 유지 관리됩니다. 다른 저자들이 때로는 이러한 작업의 일부를 도울 수 있습니다.