Mengurai dan memanipulasi tanggal

Transformasi Data dengan Polars

Liam Brannigan

Data Scientist & Polars Contributor

Data deret waktu

Deret waktu harga pasar

Transformasi Data dengan Polars

Data deret waktu

Deret waktu penjualan

Transformasi Data dengan Polars

Data deret waktu

Deret waktu streaming

Transformasi Data dengan Polars

Data deret waktu

Deret waktu jumlah

Transformasi Data dengan Polars

Dataset harga listrik

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 - nilai per jam
  • price - £ per Megawatt jam
  • solar - W per meter persegi
  • solar > 400 = hari musim panas yang hangat
Transformasi Data dengan Polars

Hubungan harga dan surya

Deret waktu harga listrik

Transformasi Data dengan Polars

Hubungan harga dan surya

Deret waktu harga listrik

Transformasi Data dengan Polars

Tipe datetime di Polars

  • Date - tanggal kalender - 2000-01-01
  • Datetime - tanggal dan waktu - 2000-01-01 12:00:00
  • Time - waktu dalam hari - 12:00:00
  • Duration - rentang waktu - 3 hours
Transformasi Data dengan Polars

Parsing datetime otomatis

pl.read_csv(
  "electricity_prices",

)
Transformasi Data dengan Polars

Parsing datetime otomatis

pl.read_csv(
  "electricity_prices",
  try_parse_dates=True
)
  • format: YYYY-MM-DD
  • mis. 2025-07-05
  • mis. 2025-07-05 12:00:00
Transformasi Data dengan Polars

Data kita perlu parsing manual

| time             | price | solar |
| ---              | ---   | ---   |
| str              | f64   | f64   |
|------------------|-------|-------|
| 05/07/2025 00:00 | 34.2  | 0.0   |
| 05/07/2025 01:00 | 28.7  | 0.0   |
  • format: DD/MM/YYYY HH:MM
  • tidak terdeteksi otomatis oleh Polars
Transformasi Data dengan Polars

Parsing dengan strptime

prices.with_columns(
    pl.col("time").str.strptime(                             )
)
Transformasi Data dengan Polars

Parsing dengan strptime

prices.with_columns(
    pl.col("time").str.strptime(pl.Datetime,                 )
)
Transformasi Data dengan Polars

Parsing dengan strptime

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

Parsing dengan strptime

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

Parsing dengan 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   |
Transformasi Data dengan Polars

Mengekstrak komponen datetime

Tabel data deret waktu

Transformasi Data dengan Polars

Mengekstrak komponen datetime

Tabel deret waktu dengan tanggal disorot pada satu baris

Transformasi Data dengan Polars

Mengekstrak komponen datetime

Tabel deret waktu dengan waktu disorot pada satu baris

Transformasi Data dengan Polars

Mengekstrak komponen datetime

Tabel deret waktu dengan jam disorot pada satu baris

Transformasi Data dengan Polars

Mengekstrak tanggal

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

Mengekstrak tanggal

prices.with_columns(
    pl.col("time").dt.date().alias("date")
)
Transformasi Data dengan Polars

Mengekstrak tanggal

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 |
Transformasi Data dengan Polars

Mengekstrak waktu

prices.with_columns(
    pl.col("time").dt.time().alias("time_of_day")
)
Transformasi Data dengan Polars

Mengekstrak waktu

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    |
Transformasi Data dengan Polars

Mengekstrak jam

prices.with_columns(
    pl.col("time").dt.hour().alias("hour")
)
Transformasi Data dengan Polars

Mengekstrak jam

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   |
Transformasi Data dengan Polars

Komponen datetime lain

  • .dt.year() - ambil tahun
  • .dt.month() - ambil bulan (1-12)
  • .dt.day() - ambil hari dalam bulan
  • .dt.minute() - ambil menit
  • ...
1 https://docs.pola.rs/api/python/dev/reference/expressions/temporal.html
Transformasi Data dengan Polars

Menyetel datetime

  • .dt.offset_by() - sesuaikan datetime
  • "1h" - maju 1 jam
  • "-2d" - mundur 2 hari
Transformasi Data dengan Polars

Menyetel datetime

  • .dt.offset_by() - sesuaikan datetime
  • "1h" - maju 1 jam
  • "-2d" - mundur 2 hari
1 https://docs.pola.rs/api/python/stable/reference/expressions/api/polars.Expr.dt.offset_by.html
Transformasi Data dengan Polars

Menambah akhir jendela waktu

prices.with_columns(
    pl.col("time").dt.offset_by("1h")
)
Transformasi Data dengan Polars

Menambah akhir jendela waktu

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

Menambah akhir jendela waktu

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 |
Transformasi Data dengan Polars

Ayo berlatih!

Transformasi Data dengan Polars

Preparing Video For Download...