Thực thi truy vấn hiệu quả

Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Liam Brannigan

Data Scientist & Polars Contributor

Gặp gỡ giảng viên

$$

$$

  • Liam Brannigan, Trưởng nhóm Khoa học Dữ liệu
  • Chuyên gia ML và Kỹ thuật Dữ liệu
  • Cộng tác viên Polars

Ảnh của Liam Brannigan - giảng viên khóa học

Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Từ laptop lên đám mây

Pipeline Polars mở rộng từ laptop lên đám mây

Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Khóa học này có phù hợp với bạn?

Trang khóa học Polars

  • Tạo truy vấn lười với scan_csv
  • Viết biểu thức với filter, select, và group_by
Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Chương 1 - tối ưu hóa

Tối ưu truy vấn

Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Chương 1 - tối ưu hóa

Tối ưu truy vấn

Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Chương 2 - I/O hiệu quả

Hình ảnh Polars nạp nhiều loại tệp

Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Chương 3 - kiểu dữ liệu phong phú hơn

Sơ đồ dữ liệu lồng nhau được chuyển thành bảng.

Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Chương 4 - mở rộng pipeline

Hình ảnh bảng lớn được truyền theo luồng.

Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Bộ dữ liệu yêu cầu của Chicago

Nhóm phân tích dữ liệu của Thị trưởng Chicago

Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Khám sát bộ dữ liệu

requests = pl.scan_csv("311_Service_Requests.csv",try_parse_dates=True)

Một bộ dữ liệu khổng lồ ghi lại mọi yêu cầu dịch vụ của người dân Chicago

Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Khám sát bộ dữ liệu

requests.collect()
Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Khám sát bộ dữ liệu

requests.collect().head(5)
shape: (5, 39)
| TYPE                          | STATUS    | DEPARTMENT     | CREATED_DATE        | ... |
| ---                           | ---       | ---            | ---                 | --- |
| str                           | str       | str            | str                 | ... |
|-------------------------------|-----------|----------------|---------------------|-----|
| Pothole in Street Complaint   | Completed | Transportation | 2019-12-16T10:09:08 | ... |
| Tree Trim Request             | Cancelled | Sanitation     | 2019-09-18T01:05:08 | ... |
| Garbage Cart Maintenance      | Completed | Sanitation     | 2021-01-24T09:14:58 | ... |
| Pothole in Street Complaint   | Completed | Transportation | 2019-03-21T10:41:01 | ... |
| Recycling Pick Up             | Completed | Sanitation     | 2021-02-16T08:28:59 | ... |
Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Giới hạn số hàng xử lý

requests.head(5)
Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Giới hạn số hàng xử lý

requests.head(5).collect()
shape: (5, 39)
| TYPE                            | STATUS    | DEPARTMENT     | CREATED_DATE        | ... |
| ---                             | ---       | ---            | ---                 | --- |
| str                             | str       | str            | str                 | ... |
|---------------------------------|-----------|----------------|---------------------|-----|
| Pothole in Street Complaint     | Completed | Transportation | 2019-12-16T10:09:08 | ... |
| Tree Trim Request | Completed | Sanitation     | 2019-09-18T01:05:08 | ... |
| Garbage Cart Maintenance        | Completed | Sanitation     | 2021-01-24T09:14:58 | ... |
| Pothole in Street Complaint     | Completed | Transportation | 2019-03-21T10:41:01 | ... |
| Recycling Pick Up               | Completed | Sanitation     | 2021-02-16T08:28:59 | ... |
  • Trì hoãn gọi collect
Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Truy vấn tổng hợp theo phòng ban

completed_by_department


Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Truy vấn tổng hợp theo phòng ban

completed_by_department = requests


Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Truy vấn tổng hợp theo phòng ban

completed_by_department = requests.filter(
    pl.col("STATUS") == "Completed"
)
Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Truy vấn tổng hợp theo phòng ban

completed_by_department = requests.filter(
    pl.col("STATUS") == "Completed"
).collect()
Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Truy vấn tổng hợp theo phòng ban

completed_by_department = requests.filter(
    pl.col("STATUS") == "Completed"
).collect().group_by("DEPARTMENT").len()
Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Truy vấn tổng hợp theo phòng ban

completed_by_department = requests.filter(
    pl.col("STATUS") == "Completed"
).group_by("DEPARTMENT").len().collect()
shape: (10, 2)
| DEPARTMENT                     | len     |
| ---                            | ---     |
| str                            | u32     |
|-------------------------------|---------|
| 311 City Services              | 4859161 |
| Sanitation                     | 3406631 |
| Aviation                       | 2337842 |
| CDOT - Department of Transport | 1468240 |
Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Nhánh truy vấn phân kỳ

completed_by_department = requests.filter(
    pl.col("STATUS") == "Completed"
).group_by("DEPARTMENT").len()
completed_by_month = requests.filter(
    pl.col("STATUS") == "Completed"
).group_by("MONTH").len()
Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Cách nhóm đang chạy hiện nay

completed_by_department.collect()
completed_by_month.collect()
Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Thực thi các truy vấn phân kỳ

results = pl.collect_all(


)
Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Thực thi các truy vấn phân kỳ

results = pl.collect_all([
    completed_by_department,
    completed_by_month,
])
Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Thực thi các truy vấn phân kỳ

results[0]  # completed_by_department
shape: (10, 2)
| DEPARTMENT           | len     |
| ---                  | ---     |
| str                  | u32     |
|----------------------|---------|
| 311 City Services    | 4859161 |
| Sanitation           | 3406631 |
| Aviation             | 2337842 |
| Transport            | 1468240 |
results[1]  # completed_by_month
shape: (12, 2)
| MONTH | len  |
| ---   | ---  |
| i64   | u32  |
|-------|------|
| 1     | 2506 |
| 2     | 4566 |
| 3     | 2739 |
| 4     | 2922 |
Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

¡Vamos a practicar!

Mở rộng và tối ưu hóa pipeline dữ liệu với Polars

Preparing Video For Download...