Använda Categorical och Enum-typer

Skalning och optimering av datapipelines med Polars

Liam Brannigan

Data Scientist & Polars Contributor

Koda upprepade strängar

Diagram över en tabell med en kolumn för evenemangsnamn och en kolumn för område med upprepade strängar.

Skalning och optimering av datapipelines med Polars

Koda upprepade strängar

Diagram över en tabell med en kolumn för evenemangsnamn och en kolumn för område där strängarna är kodade med heltal.

Skalning och optimering av datapipelines med Polars

En datamängd med upprepade etiketter

events = pl.read_parquet("chicago_events.parquet")
Skalning och optimering av datapipelines med Polars

En datamängd med upprepade etiketter

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 |
Skalning och optimering av datapipelines med Polars

Skapa en Categorical-kolumn

events_cat = events.with_columns(
    pl.col("area").cast(pl.Categorical)
)
Skalning och optimering av datapipelines med Polars

Skapa en Categorical-kolumn

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          |
Skalning och optimering av datapipelines med Polars

Skapa en Categorical-kolumn

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        |
Skalning och optimering av datapipelines med Polars

Använda ett kategoriskt uttryck

events_cat.select("event_title","area",
    pl.col("area").cat.starts_with("West").alias("westside"),
)
Skalning och optimering av datapipelines med Polars

Använda ett kategoriskt uttryck

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     |
  • Andra strängoperationer → konvertera tillbaka till String
Skalning och optimering av datapipelines med Polars

Categorical och Enum

Diagram över en tabell med en kolumn för evenemangsnamn och en kolumn för område där strängarna är kodade med heltal.

Skalning och optimering av datapipelines med Polars

Skapa en Enum-kolumn

area_enum = pl.Enum([
    "Albany Park",
    "Andersonville",
    ...
    "West Loop",
    "West Side",
    "Wicker Park",
])
Skalning och optimering av datapipelines med Polars

Skapa en Enum-kolumn

events_enum = events.with_columns(
    pl.col("area").cast(area_enum)
)
Skalning och optimering av datapipelines med Polars

Skapa en Enum-kolumn

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       |
Skalning och optimering av datapipelines med Polars

Granska Enum-typen

events_enum.schema["area"]
Enum(categories=['Albany Park', 'Andersonville', 'Chinatown', 'Downtown', ...])
  • Enum för fast vokabulär
  • Categorical för variabel vokabulär
Skalning och optimering av datapipelines med Polars

Enum och minneseffektivitet

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       |
Skalning och optimering av datapipelines med Polars

Nu kör vi en övning!

Skalning och optimering av datapipelines med Polars

Preparing Video For Download...