abstractqqq/polars_ds_extension

Polars extension for general data science use cases

PDS (polars_ds) — Polars를 위한 데이터 과학 툴킷

소개: PDS는 빠른 데이터프레임 라이브러리인 Polars 위에 데이터 과학 도구를 추가하는 Python 패키지입니다. 이미 Polars를 사용 중이며, Pandas나 scikit-learn과 같은 다른 도구로 전환하지 않고도 통계 분석, 머신러닝 모델링 및 피처 엔지니어링을 수행하려는 사용자를 위해 설계되었습니다.

설치: pip install polars-ds

주요 기능

1. 머신러닝 메트릭 (병렬)

Polars의 지연 평가(lazy evaluation)를 활용하여 데이터의 여러 슬라이스에 대해 ROC AUC 및 log loss와 같은 메트릭을 한 번에 계산할 수 있습니다. README의 예시:

df.lazy().group_by("segments").agg(
    pds.query_roc_auc("actual", "predicted").alias("roc_auc"),
    pds.query_log_loss("actual", "predicted").alias("log_loss"),
).collect()

이는 각 세그먼트별로 ROC AUC와 log-loss 값을 포함하는 테이블을 반환합니다.

2. 빠른 모델링 (비영속적)

별도의 학습 단계 없이 데이터프레임 표현식 내에서 직접 간단한 모델을 실행할 수 있습니다. 사용 가능한 모델:

  • 선형 회귀 (선택적 L1/L2 정규화 → Lasso, Ridge, Elastic Net)
  • 비음수 선형 회귀
  • 롤링 및 재귀적 선형 회귀
  • 이항 로지스틱 회귀 (L1/L2 포함)
  • statsmodels 스타일의 회귀 요약 테이블 (계수, 표준 오차, t-통계량, p-값, R²)

예시: pds.lin_reg(pl.col("x1"), pl.col("x2"), target=pl.col("y"), add_bias=False, return_pred=True)는 예측값을 구조체 열로 반환합니다.

3. 거리 함수

  • 문자열 거리: Levenshtein, Optimal String Alignment, Jaro-Winkler (RapidFuzz 기반으로 매우 빠름)
  • 배열/리스트 거리: 두 배열 열 간의 제곱 L2 (유클리드) 거리

4. 통계 검정

group_by 집계 내에서 실행할 수 있는 내장 검정:

  • 독립 표본 t-검정 (선택적 등분산 가정)
  • 카이제곱 검정
  • F-검정 (ANOVA 스타일, 그룹 평균 비교)

각각 통계량과 p-값을 포함하는 구조체를 반환합니다.

5. 편리한 도우미

pds.E(['a', 'b'], ["min", "max", "n_unique", "len"])은 여러 집계 표현식을 한 번에 생성하므로 수동으로 작성할 필요가 없습니다.

6. 데이터 변환 파이프라인

재사용 가능한 전처리 단계를 구축하기 위한 Blueprint/Pipeline 시스템:

  • 행 필터링
  • 결측값 대치 (선형 또는 중앙값)
  • 사용자 정의 표현식 추가 (로그 변환, 클리핑 등)
  • 수치형 열 스케일링 (표준화)
  • 원-핫 인코딩, Weight of Evidence 인코딩, 타겟 인코딩
  • 새로운 데이터를 변환할 수 있는 Pipeline 객체로 구체화

스트리밍 머신러닝 워크플로우를 위해 collect_batches()를 통한 배치 처리를 지원합니다.

7. 최근접 이웃 쿼리

각 지점의 주어진 반경 내에 있는 모든 지점을 찾고(제곱 L2 거리 사용), 이웃 ID를 반환합니다. README에 따르면 큰 k값이나 고차원 데이터에서는 빠르지 않다고 명시되어 있습니다.

8. 다른 데이터프레임과의 호환성

polars_ds.compat 모듈을 통해 열이 to_numpy()를 구현하기만 하면 PDS 함수를 다른 Eager 데이터프레임(Pandas 등)과 함께 사용할 수 있습니다. 예시: pds2.lin_reg(df_pd["x1"], df_pd["x2"], target=df_pd["y"], return_pred=True).

기타 참고 사항

  • 성능: README는 특히 많은 표현식을 한 번에 평가할 때와 멀티코어 머신에서 Pandas + SciPy/Sklearn/NumPy보다 일반적으로 빠르다고 주장합니다.
  • 의존성: Polars ≥ 1.4.0이 필요합니다. Python 3.9는 Polars 1.x를 사용하며, Polars 2는 Python ≥ 3.10이 필요합니다.
  • 소스 빌드: Rust와 maturin이 필요합니다. LTS CPU 지원 또는 네이티브 CPU를 위해 RUSTFLAGS를 설정할 수 있습니다.
  • 크레딧: Statrs(통계), faer(선형 대수), RapidFuzz(문자열 유사도)를 사용합니다.
  • 유지보수: 주로 1인이 유지보수하며, AI 보조 코드는 관리자가 검토하고 AI 생성 PR은 엄격히 검토됩니다.

문서: polars-ds-extension.readthedocs.io

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트