Menyaring dan mengagregasi per periode waktu

Transformasi Data dengan Polars

Liam Brannigan

Data Scientist & Polars Contributor

Menemukan harga spesifik

Tabel data deret waktu

Transformasi Data dengan Polars

Menemukan harga spesifik

Tabel data deret waktu dengan 1 baris disorot

Transformasi Data dengan Polars

Menemukan harga spesifik

Tabel data deret waktu dengan 3 baris disorot

Transformasi Data dengan Polars

Penyaringan dengan pl.datetime

prices.filter(

)

$$

$$

$$

$$

  • Tugas: cari harga pada pukul 12.00 tanggal 5 Juli
Transformasi Data dengan Polars

Penyaringan dengan pl.datetime

prices.filter(
    pl.col("time") == 
)
Transformasi Data dengan Polars

Penyaringan dengan pl.datetime

prices.filter(
    pl.col("time") == pl.datetime(                                  )
)
Transformasi Data dengan Polars

Penyaringan dengan pl.datetime

prices.filter(
    pl.col("time") == pl.datetime(year=2025, month=7, day=5, hour=12)
)
| time                | price | solar |
| ---                 | ---   | ---   |
| datetime[µs]        | f64   | f64   |
|---------------------|-------|-------|
| 2025-07-05 12:00:00 | 0.0   | 462.0 |
Transformasi Data dengan Polars

Menyaring berdasarkan tanggal dengan pl.date

prices.filter(
    pl.col("time").dt.date() == 
)
Transformasi Data dengan Polars

Menyaring berdasarkan tanggal dengan pl.date

prices.filter(
    pl.col("time").dt.date() == pl.date(year=2025, month=7, day=5)
)
Transformasi Data dengan Polars

Menyaring berdasarkan tanggal dengan pl.date

prices.filter(
    pl.col("time").dt.date() == pl.date(year=2025, month=7, day=5)
)
| time                | price | solar |
| ---                 | ---   | ---   |
| datetime[µs]        | 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 23:00:00 | 72.3  | 0.0   |
Transformasi Data dengan Polars

Menyaring rentang datetime

prices.filter(
    pl.col("time").is_between(


    )
)
Transformasi Data dengan Polars

Menyaring rentang datetime

prices.filter(
    pl.col("time").is_between(
        pl.datetime(2025, 7, 5, 8),
        pl.datetime(2025, 7, 5, 18)
    )
)
Transformasi Data dengan Polars

Menyaring rentang datetime

prices.filter(
    pl.col("time").is_between(
        pl.datetime(2025, 7, 5, 8),
        pl.datetime(2025, 7, 5, 18)
    )
)
| time                | price | solar |
| ---                 | ---   | ---   |
| datetime[µs]        | f64   | f64   |
|---------------------|-------|-------|
| 2025-07-05 08:00:00 | 1.7   | 180.0 |
| 2025-07-05 09:00:00 | 1.3   | 243.0 |
| ...                 | ...   | ...   |
| 2025-07-05 17:00:00 | 77.8  | 153.0 |
| 2025-07-05 18:00:00 | 87.3  | 119.0 |
Transformasi Data dengan Polars

Mengagregasi per periode waktu

Baris untuk diagregasi ke jendela waktu

  • Agregasikan data dengan .group_by_dynamic()
Transformasi Data dengan Polars

Mengagregasi per periode waktu

prices.sort("time")


Transformasi Data dengan Polars

Mengagregasi per periode waktu

prices.sort("time").group_by_dynamic("time",          )


Transformasi Data dengan Polars

Mengagregasi per periode waktu

prices.sort("time").group_by_dynamic("time", every="6h")


Transformasi Data dengan Polars

Mengagregasi per jendela 6 jam

prices.sort("time").group_by_dynamic("time", every="6h").agg(

)
Transformasi Data dengan Polars

Mengagregasi per jendela 6 jam

prices.sort("time").group_by_dynamic("time", every="6h").agg(
    pl.col("price").mean().alias("avg_price")
)
Transformasi Data dengan Polars

Mengagregasi per jendela 6 jam

prices.sort("time").group_by_dynamic("time", every="6h").agg(
    pl.col("price").mean().alias("avg_price")
)
| time                | avg_price |
| ---                 | ---       |
| datetime[µs]        | f64       |
|---------------------|-----------|
| 2025-07-05 00:00:00 | 28.4      |
| 2025-07-05 06:00:00 | 15.2      |
| 2025-07-05 12:00:00 | 42.1      |
| 2025-07-05 18:00:00 | 68.7      |
Transformasi Data dengan Polars

Mengagregasi per hari

prices.sort("time").group_by_dynamic("time", every="1d").agg(

pl.col("price").mean().alias("avg_price"), pl.col("solar").mean().alias("avg_solar")
)
Transformasi Data dengan Polars

Mengagregasi per hari

prices.sort("time").group_by_dynamic("time", every="1d").agg(
    pl.col("price").mean().alias("avg_price"),
    pl.col("solar").mean().alias("avg_solar")
)
| time                | avg_price | avg_solar |
| ---                 | ---       | ---       |
| datetime[µs]        | f64       | f64       |
|---------------------|-----------|-----------|
| 2025-07-05 00:00:00 | 36.7      | 147.1     |
| 2025-07-06 00:00:00 | 42.1      | 133.8     |
Transformasi Data dengan Polars

Mengatur ukuran jendela

  • every - seberapa sering jendela baru dimulai
  • period - durasi tiap jendela
  • Bawaan: period sama dengan every
Transformasi Data dengan Polars

Mengatur ukuran jendela

prices.group_by_dynamic("time", every="2h")
Transformasi Data dengan Polars

Mengatur ukuran jendela

Jendela 2 jam tanpa tumpang tindih

Transformasi Data dengan Polars

Mengatur ukuran jendela

prices.group_by_dynamic("time", every="1h", period="2h")
Transformasi Data dengan Polars

Mengatur ukuran jendela

Jendela tumpang tindih pertama mulai pukul 10

Transformasi Data dengan Polars

Mengatur ukuran jendela

Jendela tumpang tindih kedua mulai pukul 11

Transformasi Data dengan Polars

Ayo berlatih!

Transformasi Data dengan Polars

Preparing Video For Download...