Categorical 및 Enum dtype 사용

Polars로 데이터 파이프라인 확장 및 최적화하기

Liam Brannigan

Data Scientist & Polars Contributor

반복 문자열 인코딩

이벤트 제목 열과 반복되는 문자열이 있는 지역 열이 포함된 테이블 다이어그램.

Polars로 데이터 파이프라인 확장 및 최적화하기

반복 문자열 인코딩

이벤트 제목 열과 정수로 인코딩된 지역 열이 있는 테이블 다이어그램.

Polars로 데이터 파이프라인 확장 및 최적화하기

반복 레이블이 있는 데이터셋

events = pl.read_parquet("chicago_events.parquet")
Polars로 데이터 파이프라인 확장 및 최적화하기

반복 레이블이 있는 데이터셋

events["area"].value_counts(sort=True).head(5)
shape: (5, 2)
| area          | count |
| ---           | ---   |
| str           | u32   |
|-------------  |-------|
| Loop          | 35982 |
| West Loop     | 27432 |
| Andersonville | 24660 |
| Downtown      | 24320 |
| Pullman       | 21985 |
Polars로 데이터 파이프라인 확장 및 최적화하기

Categorical 열 생성

events_cat = events.with_columns(
    pl.col("area").cast(pl.Categorical)
)
Polars로 데이터 파이프라인 확장 및 최적화하기

Categorical 열 생성

events_cat.select("event_title","area").head()
shape: (5, 2)
| event_title        | area          |
| ---                | ---           |
| str                | cat           |
|--------------------|---------------|
| Folk Festival      | Andersonville |
| Fireworks Night    | Downtown      |
| Greektown Market   | West Side     |
| Rail History Day   | Pullman       |
| Grant Park Concert | Loop          |
Polars로 데이터 파이프라인 확장 및 최적화하기

Categorical 열 생성

events_cat.select("event_title","area").with_columns(
    pl.col("area").to_physical().alias("physical")
).head(3)
shape: (3, 3)
| event_title        | area          | physical |
| ---                | ---           | ---      |
| str                | cat           | u32      |
|--------------------|---------------|----------|
| Folk Festival      | Andersonville | 0        |
| Fireworks Night    | Downtown      | 1        |
| Greektown Market   | West Side     | 2        |
Polars로 데이터 파이프라인 확장 및 최적화하기

Categorical 표현식 사용

events_cat.select("event_title","area",
    pl.col("area").cat.starts_with("West").alias("westside"),
)
Polars로 데이터 파이프라인 확장 및 최적화하기

Categorical 표현식 사용

events_cat.select("event_title","area",
    pl.col("area").cat.starts_with("West").alias("westside"),
).filter(pl.col("westside")).head(2)
shape: (2, 3)
| event_title             | area      | westside |
| ---                     | ---       | ---      |
| str                     | cat       | bool     |
|-------------------------|-----------|----------|
| Greektown Market        | West Side | true     |
| West Loop Chef Showcase | West Loop | true     |
  • 기타 문자열 연산String{{2}}으로 캐스팅
Polars로 데이터 파이프라인 확장 및 최적화하기

Categorical과 Enum

이벤트 제목 열과 정수로 인코딩된 지역 열이 있는 테이블 다이어그램.

Polars로 데이터 파이프라인 확장 및 최적화하기

Enum 열 생성

area_enum = pl.Enum([
    "Albany Park",
    "Andersonville",
    ...
    "West Loop",
    "West Side",
    "Wicker Park",
])
Polars로 데이터 파이프라인 확장 및 최적화하기

Enum 열 생성

events_enum = events.with_columns(
    pl.col("area").cast(area_enum)
)
Polars로 데이터 파이프라인 확장 및 최적화하기

Enum 열 생성

events_enum.select("event_title", "area").head()
shape: (5, 2)
| event_title                  | area           |
| ---                          | ---            |
| str                          | enum           |
|------------------------------|----------------|
| Greektown Market             | West Side      |
| Folk Festival                | Andersonville  |
| West Loop Chef Showcase      | West Loop      |
| Rail History Day             | Pullman        |
| Fireworks Night              | Downtown       |
Polars로 데이터 파이프라인 확장 및 최적화하기

Enum dtype 검사

events_enum.schema["area"]
Enum(categories=['Albany Park', 'Andersonville', 'Chinatown', 'Downtown', ...])
  • 고정 어휘에는 Enum
  • 가변 어휘에는 Categorical
Polars로 데이터 파이프라인 확장 및 최적화하기

Enum 메모리 효율성

events_enum.select("event_title","area").with_columns(
    pl.col("area").to_physical().alias("physical")
).head(3)
shape: (3, 3)
| event_title        | area          | physical |
| ---                | ---           | ---      |
| str                | enum          | u8       |
|--------------------|---------------|----------|
| Folk Festival      | Andersonville | 1        |
| Fireworks Night    | Downtown      | 3        |
| Greektown Market   | West Side     | 16       |
Polars로 데이터 파이프라인 확장 및 최적화하기

연습해 봅시다!

Polars로 데이터 파이프라인 확장 및 최적화하기

Preparing Video For Download...