Polars Boru Hatlarını Test Etme

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Liam Brannigan

Data Scientist & Polars Contributor

Neden boru hatlarını test ederiz?

Bir hücresi farklı olan iki DataFrame gösteren diyagram.

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Neden boru hatlarını test ederiz?

Beklenen bir DataFrame'e karşı test edilen bir Polars dönüşümünü gösteren diyagram.

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Bölüme göre tamamlanan talepler

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






Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Bölüme göre tamamlanan talepler

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




    )
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Bölüme göre tamamlanan talepler

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


    )
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Bölüme göre tamamlanan talepler

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 ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Test girdisi

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 ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Beklenen çıktı

expected = pl.DataFrame(
    {
        "DEPARTMENT": ["Aviation", "Sanitation"],
        "len": [1, 2],
    }
)
shape: (2, 2)
| DEPARTMENT | len |
| ---        | --- |
| str        | i64 |
|------------|-----|
| Aviation   | 1   |
| Sanitation | 2   |
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Gerçek sonucu alma

actual = completed_by_department(


Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Gerçek sonucu alma

actual = completed_by_department(
    sample.lazy()
).collect()
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Gerçek sonucu alma

actual = completed_by_department(
    sample.lazy()
).collect()
shape: (3, 2)
| DEPARTMENT | len |
| ---        | --- |
| str        | i32 |
|------------|-----|
| Aviation   | 1   |
| Sanitation | 2   |
| Water      | 1   |
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

equals ile karşılaştırma

actual.equals(expected)
False
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Polars test modüllerini içe aktarma

from polars.testing import (
    assert_frame_equal,
    assert_schema_equal,
)
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Şemayı test etme

assert_schema_equal(


)
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Şemayı test etme

assert_schema_equal(
    actual.schema,
    expected.schema,
)
AssertionError: Schemas are different (dtypes do not match)
[left]: [String, Int32]
[right]: [String, Int64]
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Beklenen şemayı düzeltme

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 ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Şemayı test etme

assert_schema_equal(
    actual.schema,
    expected.schema,
)
print("Schema test passed!")
Schema test passed!
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Çerçeveyi test etme

assert_frame_equal(


)
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Çerçeveyi test etme

assert_frame_equal(
    actual,
    expected,
)
AssertionError: DataFrames are different height (row count) mismatch
[left]: 3
[right]: 2
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Gerçek ve beklenenin karşılaştırılması

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 ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Sorguyu düzeltme

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 ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Son doğrulamalar

assert_schema_equal(actual.schema, expected.schema)
assert_frame_equal(actual, expected)
print("All tests passed!")
All tests passed!
Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Hadi pratik yapalım!

Polars ile Veri Hatlarını Ölçeklendirme ve Optimize Etme

Preparing Video For Download...