Agregações móveis e cumulativas

Transformação de Dados com Polars

Liam Brannigan

Data Scientist & Polars Contributor

Por que estatísticas móveis?

Gráfico de linhas dos preços de eletricidade

Transformação de Dados com Polars

Por que estatísticas móveis?

Gráfico de linhas dos preços de eletricidade com estatísticas móveis

Transformação de Dados com Polars

Média móvel em uma coluna

prices.with_columns(

)
Transformação de Dados com Polars

Média móvel em uma coluna

prices.with_columns(
    pl.col("price").rolling_mean(            )
)
Transformação de Dados com Polars

Média móvel em uma coluna

prices.with_columns(
    pl.col("price").rolling_mean(window_size=3)
)
Transformação de Dados com Polars

Média móvel em uma coluna

prices.with_columns(
    pl.col("price").rolling_mean(window_size=3).alias("smoothed")
)
Transformação de Dados com Polars

Média móvel em uma coluna

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     |

Transformação de Dados com Polars

Média móvel em uma coluna

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     |
Transformação de Dados com Polars

Centralizando a janela

prices.with_columns(
    pl.col("price").rolling_mean(window_size=3,            )
)
Transformação de Dados com Polars

Centralizando a janela

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     |
Transformação de Dados com Polars

Outras expressões móveis

  • .rolling_sum() - soma móvel
  • .rolling_std() - desvio padrão móvel
  • .rolling_max() / .rolling_min()
Transformação de Dados com Polars

Janela móvel no DataFrame

prices.rolling(                                )


Transformação de Dados com Polars

Janela móvel no DataFrame

prices.rolling(index_column="time",            )


Transformação de Dados com Polars

Janela móvel no DataFrame

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


Transformação de Dados com Polars

Janela móvel no DataFrame

prices.rolling(index_column="time", period="3h").agg(
    pl.all().mean()
)
Transformação de Dados com Polars

Janela móvel no 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  |
Transformação de Dados com Polars

Por que estatísticas cumulativas?

Gráfico temporal de energia solar

  • Tarefa: calcular valores cumulativos
Transformação de Dados com Polars

Por que estatísticas cumulativas?

Gráfico temporal de energia solar com máximo cumulativo

Transformação de Dados com Polars

Estatísticas cumulativas

prices.with_columns(
    pl.col("solar")
)
Transformação de Dados com Polars

Estatísticas cumulativas

prices.with_columns(
    pl.col("solar").cum_max()
)
Transformação de Dados com Polars

Estatísticas cumulativas

prices.with_columns(
    pl.col("solar").cum_max().alias("cumulative_solar")
)
Transformação de Dados com Polars

Estatísticas cumulativas

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            |
| ...                 | ...   | ...   | ...              |
Transformação de Dados com Polars

Soma cumulativa para totais contínuos

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        |
Transformação de Dados com Polars

Vamos praticar!

Transformação de Dados com Polars

Preparing Video For Download...