Categorische en Enum-dtypes gebruiken

Data-pipelines schalen en optimaliseren met Polars

Liam Brannigan

Data Scientist & Polars Contributor

Herhaalde strings encoden

Diagram van een tabel met een kolom event title en een kolom area met herhaalde strings.

Data-pipelines schalen en optimaliseren met Polars

Herhaalde strings encoden

Diagram van een tabel met een kolom event title en een kolom area waarin de strings zijn gecodeerd als gehele getallen.

Data-pipelines schalen en optimaliseren met Polars

Een dataset met herhaalde labels

events = pl.read_parquet("chicago_events.parquet")
Data-pipelines schalen en optimaliseren met Polars

Een dataset met herhaalde labels

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 |
Data-pipelines schalen en optimaliseren met Polars

Een categorische kolom maken

events_cat = events.with_columns(
    pl.col("area").cast(pl.Categorical)
)
Data-pipelines schalen en optimaliseren met Polars

Een categorische kolom maken

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          |
Data-pipelines schalen en optimaliseren met Polars

Een categorische kolom maken

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        |
Data-pipelines schalen en optimaliseren met Polars

Een categorische expressie gebruiken

events_cat.select("event_title","area",
    pl.col("area").cat.starts_with("West").alias("westside"),
)
Data-pipelines schalen en optimaliseren met Polars

Een categorische expressie gebruiken

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     |
  • Andere stringbewerkingen → cast terug naar String
Data-pipelines schalen en optimaliseren met Polars

Categorical en Enum

Diagram van een tabel met een kolom event title en een kolom area waarin de strings zijn gecodeerd als gehele getallen.

Data-pipelines schalen en optimaliseren met Polars

Een Enum-kolom maken

area_enum = pl.Enum([
    "Albany Park",
    "Andersonville",
    ...
    "West Loop",
    "West Side",
    "Wicker Park",
])
Data-pipelines schalen en optimaliseren met Polars

Een Enum-kolom maken

events_enum = events.with_columns(
    pl.col("area").cast(area_enum)
)
Data-pipelines schalen en optimaliseren met Polars

Een Enum-kolom maken

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       |
Data-pipelines schalen en optimaliseren met Polars

De Enum-dtype inspecteren

events_enum.schema["area"]
Enum(categories=['Albany Park', 'Andersonville', 'Chinatown', 'Downtown', ...])
  • Enum voor vaste woordenschat
  • Categorical voor variabele woordenschat
Data-pipelines schalen en optimaliseren met Polars

Enum-geheugenefficiëntie

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       |
Data-pipelines schalen en optimaliseren met Polars

Laten we oefenen!

Data-pipelines schalen en optimaliseren met Polars

Preparing Video For Download...