Parsování a manipulace s daty

Data Transformation with Polars

Liam Brannigan

Data Scientist & Polars Contributor

Časové řady

Časová řada tržních cen

Data Transformation with Polars

Časové řady

Časová řada tržeb

Data Transformation with Polars

Časové řady

Časová řada přehrání

Data Transformation with Polars

Časové řady

Časová řada počtů

Data Transformation with Polars

Dataset cen elektřiny

shape: (24, 3)
| time             | price | solar |
| ---              | ---   | ---   |
| str              | f64   | f64   |
|------------------|-------|-------|
| 05/07/2025 00:00 | 34.2  | 0.0   |
| ...              | ...   | ...   |
| 05/07/2025 12:00 | 0.0   | 462.0 |
  • time - hodinové hodnoty
  • price - £ za megawatthodinu
  • solar - W na metr čtvereční
  • solar > 400 = teplý letní den
Data Transformation with Polars

Vztah ceny a solárního záření

Časová řada cen elektřiny

Data Transformation with Polars

Vztah ceny a solárního záření

Časová řada cen elektřiny

Data Transformation with Polars

Datové typy pro datum a čas v Polars

  • Date - kalendářní datum - 2000-01-01
  • Datetime - datum a čas - 2000-01-01 12:00:00
  • Time - čas v rámci dne - 12:00:00
  • Duration - časový úsek - 3 hours
Data Transformation with Polars

Automatické parsování datumu

pl.read_csv(
  "electricity_prices",

)
Data Transformation with Polars

Automatické parsování datumu

pl.read_csv(
  "electricity_prices",
  try_parse_dates=True
)
  • formát: YYYY-MM-DD
  • např. 2025-07-05
  • např. 2025-07-05 12:00:00
Data Transformation with Polars

Naše data vyžadují ruční parsování

| time             | price | solar |
| ---              | ---   | ---   |
| str              | f64   | f64   |
|------------------|-------|-------|
| 05/07/2025 00:00 | 34.2  | 0.0   |
| 05/07/2025 01:00 | 28.7  | 0.0   |
  • formát: DD/MM/YYYY HH:MM
  • Polars ho nerozpozná automaticky
Data Transformation with Polars

Parsování pomocí strptime

prices.with_columns(
    pl.col("time").str.strptime(                             )
)
Data Transformation with Polars

Parsování pomocí strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime,                 )
)
Data Transformation with Polars

Parsování pomocí strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime, "%d/%m/%Y      ")
)
Data Transformation with Polars

Parsování pomocí strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime, "%d/%m/%Y %H:%M")
)
Data Transformation with Polars

Parsování pomocí strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime, "%d/%m/%Y %H:%M")
)
| time                | price | solar |
| ---                 | ---   | ---   |
| datetime[us]        | f64   | f64   |
|---------------------|-------|-------|
| 2025-07-05 00:00:00 | 34.2  | 0.0   |
| 2025-07-05 01:00:00 | 28.7  | 0.0   |
| 2025-07-05 02:00:00 | 27.5  | 0.0   |
Data Transformation with Polars

Extrakce složek data a času

Tabulka dat časové řady

Data Transformation with Polars

Extrakce složek data a času

Tabulka dat časové řady se zvýrazněným datem v jednom řádku

Data Transformation with Polars

Extrakce složek data a času

Tabulka dat časové řady se zvýrazněným časem v jednom řádku

Data Transformation with Polars

Extrakce složek data a času

Tabulka dat časové řady se zvýrazněnou hodinou v jednom řádku

Data Transformation with Polars

Extrakce data

prices.with_columns(
    pl.col("time").dt.date()
)
Data Transformation with Polars

Extrakce data

prices.with_columns(
    pl.col("time").dt.date().alias("date")
)
Data Transformation with Polars

Extrakce data

prices.with_columns(
    pl.col("time").dt.date().alias("date")
)
| time                | price | solar | date       |
| ---                 | ---   | ---   | ---        |
| datetime[µs]        | f64   | f64   | date       |
|---------------------|-------|-------|------------|
| 2025-07-05 00:00:00 | 34.2  | 0.0   | 2025-07-05 |
| 2025-07-05 01:00:00 | 28.7  | 0.0   | 2025-07-05 |
| 2025-07-05 02:00:00 | 27.5  | 0.0   | 2025-07-05 |
Data Transformation with Polars

Extrakce času

prices.with_columns(
    pl.col("time").dt.time().alias("time_of_day")
)
Data Transformation with Polars

Extrakce času

prices.with_columns(
    pl.col("time").dt.time().alias("time_of_day")
)
| time                | price | solar | time_of_day |
| ---                 | ---   | ---   | ---         |
| datetime[us]        | f64   | f64   | time        |
|---------------------|-------|-------|-------------|
| 2025-07-05 00:00:00 | 34.2  | 0.0   | 00:00:00    |
| 2025-07-05 01:00:00 | 28.7  | 0.0   | 01:00:00    |
| 2025-07-05 02:00:00 | 27.5  | 0.0   | 02:00:00    |
Data Transformation with Polars

Extrakce hodiny

prices.with_columns(
    pl.col("time").dt.hour().alias("hour")
)
Data Transformation with Polars

Extrakce hodiny

prices.with_columns(
    pl.col("time").dt.hour().alias("hour")
)
| time                | price | solar | hour |
| ---                 | ---   | ---   | ---  |
| datetime[µs]        | f64   | f64   | i8   |
|---------------------|-------|-------|------|
| 2025-07-05 00:00:00 | 34.2  | 0.0   | 0    |
| 2025-07-05 01:00:00 | 28.7  | 0.0   | 1    |
| 2025-07-05 12:00:00 | 0.0   | 462.0 | 12   |
Data Transformation with Polars

Další složky data a času

  • .dt.year() - extrahuje rok
  • .dt.month() - extrahuje měsíc (1–12)
  • .dt.day() - extrahuje den v měsíci
  • .dt.minute() - extrahuje minutu
  • ...
1 https://docs.pola.rs/api/python/dev/reference/expressions/temporal.html
Data Transformation with Polars

Posun hodnot data a času

  • .dt.offset_by() - posun v čase
  • "1h" - o 1 hodinu dopředu
  • "-2d" - o 2 dny dozadu
Data Transformation with Polars

Posun hodnot data a času

  • .dt.offset_by() - posun v čase
  • "1h" - o 1 hodinu dopředu
  • "-2d" - o 2 dny dozadu
1 https://docs.pola.rs/api/python/stable/reference/expressions/api/polars.Expr.dt.offset_by.html
Data Transformation with Polars

Přidání konce časového okna

prices.with_columns(
    pl.col("time").dt.offset_by("1h")
)
Data Transformation with Polars

Přidání konce časového okna

prices.with_columns(
    pl.col("time").dt.offset_by("1h").alias("time_end")
)
Data Transformation with Polars

Přidání konce časového okna

prices.with_columns(
    pl.col("time").dt.offset_by("1h").alias("time_end")
)
| time                | price | solar | time_end            |
| ---                 | ---   | ---   | ---                 |
| datetime[µs]        | f64   | f64   | datetime[µs]        |
|---------------------|-------|-------|---------------------|
| 2025-07-05 00:00:00 | 34.2  | 0.0   | 2025-07-05 01:00:00 |
| 2025-07-05 01:00:00 | 28.7  | 0.0   | 2025-07-05 02:00:00 |
| 2025-07-05 02:00:00 | 27.5  | 0.0   | 2025-07-05 03:00:00 |
Data Transformation with Polars

Pojďme cvičit!

Data Transformation with Polars

Preparing Video For Download...