การกรองและรวมข้อมูลตามช่วงเวลา

การแปลงข้อมูลด้วย Polars

Liam Brannigan

Data Scientist & Polars Contributor

การค้นหาราคาที่ต้องการ

ตารางข้อมูล time series

การแปลงข้อมูลด้วย Polars

การค้นหาราคาที่ต้องการ

ตารางข้อมูล time series ที่ไฮไลต์ 1 แถว

การแปลงข้อมูลด้วย Polars

การค้นหาราคาที่ต้องการ

ตารางข้อมูล time series ที่ไฮไลต์ 3 แถว

การแปลงข้อมูลด้วย Polars

การกรองด้วย pl.datetime

prices.filter(

)

$$

$$

$$

$$

  • งาน: ค้นหาราคาตอนเที่ยงวันที่ 5 กรกฎาคม
การแปลงข้อมูลด้วย Polars

การกรองด้วย pl.datetime

prices.filter(
    pl.col("time") == 
)
การแปลงข้อมูลด้วย Polars

การกรองด้วย pl.datetime

prices.filter(
    pl.col("time") == pl.datetime(                                  )
)
การแปลงข้อมูลด้วย Polars

การกรองด้วย 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 |
การแปลงข้อมูลด้วย Polars

การกรองตามวันที่ด้วย pl.date

prices.filter(
    pl.col("time").dt.date() == 
)
การแปลงข้อมูลด้วย Polars

การกรองตามวันที่ด้วย pl.date

prices.filter(
    pl.col("time").dt.date() == pl.date(year=2025, month=7, day=5)
)
การแปลงข้อมูลด้วย Polars

การกรองตามวันที่ด้วย 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   |
การแปลงข้อมูลด้วย Polars

การกรองช่วง datetime

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


    )
)
การแปลงข้อมูลด้วย Polars

การกรองช่วง datetime

prices.filter(
    pl.col("time").is_between(
        pl.datetime(2025, 7, 5, 8),
        pl.datetime(2025, 7, 5, 18)
    )
)
การแปลงข้อมูลด้วย Polars

การกรองช่วง 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 |
การแปลงข้อมูลด้วย Polars

การรวมข้อมูลตามช่วงเวลา

แถวที่จะรวมเป็น time window

  • รวมข้อมูลด้วย .group_by_dynamic()
การแปลงข้อมูลด้วย Polars

การรวมข้อมูลตามช่วงเวลา

prices.sort("time")


การแปลงข้อมูลด้วย Polars

การรวมข้อมูลตามช่วงเวลา

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


การแปลงข้อมูลด้วย Polars

การรวมข้อมูลตามช่วงเวลา

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


การแปลงข้อมูลด้วย Polars

การรวมข้อมูลทุก 6 ชั่วโมง

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

)
การแปลงข้อมูลด้วย Polars

การรวมข้อมูลทุก 6 ชั่วโมง

prices.sort("time").group_by_dynamic("time", every="6h").agg(
    pl.col("price").mean().alias("avg_price")
)
การแปลงข้อมูลด้วย Polars

การรวมข้อมูลทุก 6 ชั่วโมง

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      |
การแปลงข้อมูลด้วย Polars

การรวมข้อมูลรายวัน

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

pl.col("price").mean().alias("avg_price"), pl.col("solar").mean().alias("avg_solar")
)
การแปลงข้อมูลด้วย Polars

การรวมข้อมูลรายวัน

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     |
การแปลงข้อมูลด้วย Polars

การควบคุมขนาด window

  • every - ความถี่ในการเริ่ม window ใหม่
  • period - ความยาวของแต่ละ window
  • โดยค่าเริ่มต้น period จะเท่ากับ every
การแปลงข้อมูลด้วย Polars

การควบคุมขนาด window

prices.group_by_dynamic("time", every="2h")
การแปลงข้อมูลด้วย Polars

การควบคุมขนาด window

window 2 ชั่วโมงที่ไม่ซ้อนทับกัน

การแปลงข้อมูลด้วย Polars

การควบคุมขนาด window

prices.group_by_dynamic("time", every="1h", period="2h")
การแปลงข้อมูลด้วย Polars

การควบคุมขนาด window

window ที่ซ้อนทับกันแรก เริ่มที่ 10

การแปลงข้อมูลด้วย Polars

การควบคุมขนาด window

window ที่ซ้อนทับกันที่สอง เริ่มที่ 11

การแปลงข้อมูลด้วย Polars

มาฝึกกันเถอะ!

การแปลงข้อมูลด้วย Polars

Preparing Video For Download...