Lọc và tổng hợp theo khoảng thời gian

Biến đổi dữ liệu với Polars

Liam Brannigan

Data Scientist & Polars Contributor

Tìm giá cụ thể

Bảng dữ liệu chuỗi thời gian

Biến đổi dữ liệu với Polars

Tìm giá cụ thể

Bảng dữ liệu chuỗi thời gian với 1 hàng được tô sáng

Biến đổi dữ liệu với Polars

Tìm giá cụ thể

Bảng dữ liệu chuỗi thời gian với 3 hàng được tô sáng

Biến đổi dữ liệu với Polars

Lọc với pl.datetime

prices.filter(

)

$$

$$

$$

$$

  • Nhiệm vụ: tìm giá vào lúc 12:00 trưa ngày 5 tháng 7
Biến đổi dữ liệu với Polars

Lọc với pl.datetime

prices.filter(
    pl.col("time") == 
)
Biến đổi dữ liệu với Polars

Lọc với pl.datetime

prices.filter(
    pl.col("time") == pl.datetime(                                  )
)
Biến đổi dữ liệu với Polars

Lọc với 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 |
Biến đổi dữ liệu với Polars

Lọc theo ngày với pl.date

prices.filter(
    pl.col("time").dt.date() == 
)
Biến đổi dữ liệu với Polars

Lọc theo ngày với pl.date

prices.filter(
    pl.col("time").dt.date() == pl.date(year=2025, month=7, day=5)
)
Biến đổi dữ liệu với Polars

Lọc theo ngày với 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   |
Biến đổi dữ liệu với Polars

Lọc theo khoảng thời gian datetime

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


    )
)
Biến đổi dữ liệu với Polars

Lọc theo khoảng thời gian datetime

prices.filter(
    pl.col("time").is_between(
        pl.datetime(2025, 7, 5, 8),
        pl.datetime(2025, 7, 5, 18)
    )
)
Biến đổi dữ liệu với Polars

Lọc theo khoảng thời gian 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 |
Biến đổi dữ liệu với Polars

Tổng hợp theo khoảng thời gian

Các hàng để tổng hợp theo cửa sổ thời gian

  • Tổng hợp dữ liệu với .group_by_dynamic()
Biến đổi dữ liệu với Polars

Tổng hợp theo khoảng thời gian

prices.sort("time")


Biến đổi dữ liệu với Polars

Tổng hợp theo khoảng thời gian

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


Biến đổi dữ liệu với Polars

Tổng hợp theo khoảng thời gian

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


Biến đổi dữ liệu với Polars

Tổng hợp theo cửa sổ 6 giờ

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

)
Biến đổi dữ liệu với Polars

Tổng hợp theo cửa sổ 6 giờ

prices.sort("time").group_by_dynamic("time", every="6h").agg(
    pl.col("price").mean().alias("avg_price")
)
Biến đổi dữ liệu với Polars

Tổng hợp theo cửa sổ 6 giờ

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      |
Biến đổi dữ liệu với Polars

Tổng hợp theo ngày

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

pl.col("price").mean().alias("avg_price"), pl.col("solar").mean().alias("avg_solar")
)
Biến đổi dữ liệu với Polars

Tổng hợp theo ngày

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     |
Biến đổi dữ liệu với Polars

Điều chỉnh kích thước cửa sổ

  • every - tần suất bắt đầu cửa sổ mới
  • period - độ dài mỗi cửa sổ
  • Mặc định, period bằng every
Biến đổi dữ liệu với Polars

Điều chỉnh kích thước cửa sổ

prices.group_by_dynamic("time", every="2h")
Biến đổi dữ liệu với Polars

Điều chỉnh kích thước cửa sổ

Cửa sổ 2 giờ không chồng lấp

Biến đổi dữ liệu với Polars

Điều chỉnh kích thước cửa sổ

prices.group_by_dynamic("time", every="1h", period="2h")
Biến đổi dữ liệu với Polars

Điều chỉnh kích thước cửa sổ

Cửa sổ chồng lấp đầu tiên bắt đầu lúc 10 giờ

Biến đổi dữ liệu với Polars

Điều chỉnh kích thước cửa sổ

Cửa sổ chồng lấp thứ hai bắt đầu lúc 11 giờ

Biến đổi dữ liệu với Polars

Hãy thực hành!

Biến đổi dữ liệu với Polars

Preparing Video For Download...