Agregări cu fereastră glisantă și cumulative

Transformarea datelor cu Polars

Liam Brannigan

Data Scientist & Polars Contributor

De ce statistici cu fereastră glisantă?

Grafic liniar al prețurilor la electricitate

Transformarea datelor cu Polars

De ce statistici cu fereastră glisantă?

Grafic liniar al prețurilor la electricitate cu statistici glisante

Transformarea datelor cu Polars

Media glisantă pe o coloană

prices.with_columns(

)
Transformarea datelor cu Polars

Media glisantă pe o coloană

prices.with_columns(
    pl.col("price").rolling_mean(            )
)
Transformarea datelor cu Polars

Media glisantă pe o coloană

prices.with_columns(
    pl.col("price").rolling_mean(window_size=3)
)
Transformarea datelor cu Polars

Media glisantă pe o coloană

prices.with_columns(
    pl.col("price").rolling_mean(window_size=3).alias("smoothed")
)
Transformarea datelor cu Polars

Media glisantă pe o coloană

prices.with_columns(
    pl.col("price").rolling_mean(window_size=3).alias("smoothed")
)
| time                | price | solar | smoothed |
| ---                 | ---   | ---   | ---      |
| datetime[µs]        | f64   | f64   | f64      |
|---------------------|-------|-------|----------|
| 2025-07-05 00:00:00 | 34.2  | 0.0   | null     |
| 2025-07-05 01:00:00 | 28.7  | 0.0   | null     |

Transformarea datelor cu Polars

Media glisantă pe o coloană

prices.with_columns(
    pl.col("price").rolling_mean(window_size=3).alias("smoothed")
)
| time                | price | solar | smoothed |
| ---                 | ---   | ---   | ---      |
| datetime[µs]        | f64   | f64   | f64      |
|---------------------|-------|-------|----------|
| 2025-07-05 00:00:00 | 34.2  | 0.0   | null     |
| 2025-07-05 01:00:00 | 28.7  | 0.0   | null     |
| 2025-07-05 02:00:00 | 27.5  | 0.0   | 30.1     |
Transformarea datelor cu Polars

Centrarea ferestrei

prices.with_columns(
    pl.col("price").rolling_mean(window_size=3,            )
)
Transformarea datelor cu Polars

Centrarea ferestrei

prices.with_columns(
    pl.col("price").rolling_mean(window_size=3, center=True).alias("centered")
)
| time                | price | solar | centered |
| ---                 | ---   | ---   | ---      |
| datetime[µs]        | f64   | f64   | f64      |
|---------------------|-------|-------|----------|
| 2025-07-05 00:00:00 | 34.2  | 0.0   | null     |
| 2025-07-05 01:00:00 | 28.7  | 0.0   | 30.1     |
| 2025-07-05 02:00:00 | 27.5  | 0.0   | 27.1     |
Transformarea datelor cu Polars

Alte expresii glisante

  • .rolling_sum() - total glisant
  • .rolling_std() - deviație standard glisantă
  • .rolling_max() / .rolling_min()
Transformarea datelor cu Polars

Fereastră glisantă pe un DataFrame

prices.rolling(                                )


Transformarea datelor cu Polars

Fereastră glisantă pe un DataFrame

prices.rolling(index_column="time",            )


Transformarea datelor cu Polars

Fereastră glisantă pe un DataFrame

prices.rolling(index_column="time", period="3h")


Transformarea datelor cu Polars

Fereastră glisantă pe un DataFrame

prices.rolling(index_column="time", period="3h").agg(
    pl.all().mean()
)
Transformarea datelor cu Polars

Fereastră glisantă pe un DataFrame

prices.rolling(index_column="time", period="3h").agg(
    pl.all().mean()
)
| time                | price | solar  |
| ---                 | ---   | ---    |
| datetime[µs]        | f64   | f64    |
|---------------------|-------|------- |
| 2025-07-05 10:00:00 | 1.8   | 247.3  |
| 2025-07-05 11:00:00 | 1.4   | 347.7  |
| 2025-07-05 12:00:00 | 0.9   | 420.7  |
Transformarea datelor cu Polars

De ce statistici cumulative?

Grafic de serie temporală a energiei solare

  • Sarcină: calcularea valorilor cumulative
Transformarea datelor cu Polars

De ce statistici cumulative?

Grafic de serie temporală a energiei solare cu maximul cumulativ al energiei solare

Transformarea datelor cu Polars

Statistici cumulative

prices.with_columns(
    pl.col("solar")
)
Transformarea datelor cu Polars

Statistici cumulative

prices.with_columns(
    pl.col("solar").cum_max()
)
Transformarea datelor cu Polars

Statistici cumulative

prices.with_columns(
    pl.col("solar").cum_max().alias("cumulative_solar")
)
Transformarea datelor cu Polars

Statistici cumulative

prices.with_columns(
    pl.col("solar").cum_max().alias("cumulative_solar")
)
| time                | price | solar | cumulative_solar |
| ---                 | ---   | ---   | ---              |
| datetime[µs]        | f64   | f64   | f64              |
|---------------------|-------|-------|------------------|
| ...                 | ...   | ...   | ...              |
| 2025-07-05 10:00:00 | 2.3   | 419.0 | 419.0            |
| 2025-07-05 11:00:00 | 0.5   | 481.0 | 481.0            |
| 2025-07-05 12:00:00 | 0.0   | 462.0 | 481.0            |
| ...                 | ...   | ...   | ...              |
Transformarea datelor cu Polars

Suma cumulativă pentru totaluri progresive

prices.with_columns(
    pl.col("solar").cum_sum().alias("total_energy")
)
| time                | price | solar | total_energy |
| ---                 | ---   | ---   | ---          |
| datetime[µs]        | f64   | f64   | f64          |
|---------------------|-------|-------|--------------|
| 2025-07-05 06:00:00 | 22.1  | 62.0  | 62.0         |
| 2025-07-05 07:00:00 | 4.5   | 100.0 | 162.0        |
| 2025-07-05 08:00:00 | 1.7   | 180.0 | 342.0        |
Transformarea datelor cu Polars

Hai să exersăm!

Transformarea datelor cu Polars

Preparing Video For Download...