Polars पाइपलाइन का परीक्षण

Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

Liam Brannigan

Data Scientist & Polars Contributor

पाइपलाइन का परीक्षण क्यों?

एक आरेख जिसमें दो DataFrames दिखते हैं, जिनमें एक सेल अलग है.

Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

पाइपलाइन का परीक्षण क्यों?

एक आरेख: Polars ट्रांसफॉर्मेशन को अपेक्षित DataFrame के विरुद्ध टेस्ट किया गया है.

Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

विभाग अनुसार पूर्ण अनुरोध

def completed_by_department(requests: pl.LazyFrame) -> pl.LazyFrame:
    return






Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

विभाग अनुसार पूर्ण अनुरोध

def completed_by_department(requests: pl.LazyFrame) -> pl.LazyFrame:
    return (
        requests




    )
Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

विभाग अनुसार पूर्ण अनुरोध

def completed_by_department(requests: pl.LazyFrame) -> pl.LazyFrame:
    return (
        requests
        .group_by("DEPARTMENT")
        .len()


    )
Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

विभाग अनुसार पूर्ण अनुरोध

def completed_by_department(requests: pl.LazyFrame) -> pl.LazyFrame:
    return (
        requests
        .group_by("DEPARTMENT")
        .len()
        .with_columns(pl.col("len").cast(pl.Int32))
        .sort("DEPARTMENT")
    )
Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

टेस्ट इनपुट

sample = pl.DataFrame({
    "SR_NUMBER": ["SR1", "SR2", "SR3", "SR4"],
    "DEPARTMENT": ["Sanitation", "Water", "Sanitation", "Aviation"],
    "STATUS": ["Completed", "Open", "Completed", "Completed"],
})
shape: (4, 3)
| SR_NUMBER | DEPARTMENT | STATUS    |
| ---       | ---        | ---       |
| str       | str        | str       |
|-----------|------------|-----------|
| SR1       | Sanitation | Completed |
| SR2       | Water      | Open      |
| SR3       | Sanitation | Completed |
| SR4       | Aviation   | Completed |
Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

अपेक्षित आउटपुट

expected = pl.DataFrame(
    {
        "DEPARTMENT": ["Aviation", "Sanitation"],
        "len": [1, 2],
    }
)
shape: (2, 2)
| DEPARTMENT | len |
| ---        | --- |
| str        | i64 |
|------------|-----|
| Aviation   | 1   |
| Sanitation | 2   |
Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

वास्तविक परिणाम निकालना

actual = completed_by_department(


Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

वास्तविक परिणाम निकालना

actual = completed_by_department(
    sample.lazy()
).collect()
Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

वास्तविक परिणाम निकालना

actual = completed_by_department(
    sample.lazy()
).collect()
shape: (3, 2)
| DEPARTMENT | len |
| ---        | --- |
| str        | i32 |
|------------|-----|
| Aviation   | 1   |
| Sanitation | 2   |
| Water      | 1   |
Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

equals से तुलना

actual.equals(expected)
False
Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

Polars testing इम्पोर्ट करना

from polars.testing import (
    assert_frame_equal,
    assert_schema_equal,
)
Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

स्कीमा का परीक्षण

assert_schema_equal(


)
Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

स्कीमा का परीक्षण

assert_schema_equal(
    actual.schema,
    expected.schema,
)
AssertionError: Schemas are different (dtypes do not match)
[left]: [String, Int32]
[right]: [String, Int64]
Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

अपेक्षित स्कीमा ठीक करना

expected = pl.DataFrame(
    {
        "DEPARTMENT": ["Aviation", "Sanitation"], "len": [1, 2],
    },
    schema={"DEPARTMENT": pl.String, "len": pl.Int32},
)
shape: (2, 2)
| DEPARTMENT | len |
| ---        | --- |
| str        | i32 |
|------------|-----|
| Aviation   | 1   |
| Sanitation | 2   |
Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

स्कीमा का परीक्षण

assert_schema_equal(
    actual.schema,
    expected.schema,
)
print("Schema test passed!")
Schema test passed!
Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

फ्रेम का परीक्षण

assert_frame_equal(


)
Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

फ्रेम का परीक्षण

assert_frame_equal(
    actual,
    expected,
)
AssertionError: DataFrames are different height (row count) mismatch
[left]: 3
[right]: 2
Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

वास्तविक बनाम अपेक्षित तुलना

shape: (3, 2)
| DEPARTMENT | len |
| ---        | --- |
| str        | i32 |
|------------|-----|
| Aviation   | 1   |
| Sanitation | 2   |
| Water      | 1   |
shape: (2, 2)
| DEPARTMENT | len |
| ---        | --- |
| str        | i32 |
|------------|-----|
| Aviation   | 1   |
| Sanitation | 2   |
Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

क्वेरी ठीक करना

def completed_by_department(requests: pl.LazyFrame) -> pl.LazyFrame:
    return (
        requests
        .filter(pl.col("STATUS") == "Completed")
        .group_by("DEPARTMENT")
        .len()
        .with_columns(pl.col("len").cast(pl.Int32))
        .sort("DEPARTMENT")
    )
actual = completed_by_department(
    sample.lazy()
).collect()
Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

अंतिम असेर्शन

assert_schema_equal(actual.schema, expected.schema)
assert_frame_equal(actual, expected)
print("All tests passed!")
All tests passed!
Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

अभ्यास करते हैं!

Polars के साथ Data Pipelines का स्केलिंग और ऑप्टिमाइज़ेशन

Preparing Video For Download...