Aracılığıyla paylaş


Öğretici: SemPy ve Büyük Beklentileri (GX) kullanarak verileri doğrulama

Bu öğreticide, Power BI anlam modellerinde veri doğrulama gerçekleştirmek için SemPy'yi Büyük Beklentiler (GX) ile birlikte kullanmayı öğreneceksiniz.

Bu öğretici şunların nasıl yapıldığını gösterir:

  • Büyük Beklenti'nin Doku Veri Kaynağı (semantik bağlantı üzerine kurulu) ile Doku çalışma alanınızdaki bir veri kümesindeki kısıtlamaları doğrulayın.
    • GX Veri Bağlamı, Veri Varlıkları ve Beklentiler'i yapılandırın.
    • GX Denetim Noktası ile doğrulama sonuçlarını görüntüleyin.
  • Ham verileri analiz etmek için anlamsal bağlantıyı kullanın.

Önkoşullar

  • Çalışma alanınızı bulmak ve seçmek için sol gezinti bölmesinden Çalışma Alanları'nı seçin. Bu çalışma alanı, geçerli çalışma alanınız olur.
  • Perakende Analizi Örneği PBIX.pbix dosyasını indirin.
  • Çalışma alanınızda, Perakende Analizi Örneği PBIX.pbix dosyasını çalışma alanına yüklemek için Karşıya Yükle düğmesini kullanın.

Not defterinde birlikte izleyin

great_expectations_tutorial.ipynb , bu öğreticiye eşlik eden not defteridir.

Bu öğreticide eşlik eden not defterini açmak için, not defterini çalışma alanınıza aktarmak üzere Sisteminizi veri bilimi öğreticilerine hazırlama başlığındaki yönergeleri izleyin.

Bu sayfadaki kodu kopyalayıp yapıştırmayı tercih ederseniz, yeni bir not defteri oluşturabilirsiniz.

Kod çalıştırmaya başlamadan önce not defterine bir göl evi eklediğinizden emin olun.

Not defterini ayarlama

Bu bölümde, gerekli modüller ve verilerle bir not defteri ortamı ayarlarsınız.

  1. Not defterindeki satır içi yükleme özelliğini kullanarak %pip PyPI'den ve ilgili Great Expectations kitaplıkları yükleyinSemPy.
# install libraries
%pip install semantic-link great-expectations great_expectations_experimental great_expectations_zipcode_expectations

# load %%dax cell magic
%load_ext sempy
  1. Daha sonra ihtiyacınız olacak modüllerin gerekli içeri aktarmalarını gerçekleştirin:
import great_expectations as gx
from great_expectations.expectations.expectation import ExpectationConfiguration
from great_expectations_zipcode_expectations.expectations import expect_column_values_to_be_valid_zip5

GX Veri Bağlamı ve Veri Kaynağını Ayarlama

Büyük Beklentiler'i kullanmaya başlamak için önce bir GX Veri Bağlamı ayarlamanız gerekir. Bağlam, GX işlemleri için bir giriş noktası görevi görür ve tüm ilgili yapılandırmaları tutar.

context = gx.get_context()

Artık verilerle etkileşime geçmek için Doku veri kümenizi bu bağlama Veri Kaynağı olarak ekleyebilirsiniz. Bu öğreticide standart bir Power BI örnek anlam modeli Perakende Analizi Örneği .pbix dosyası kullanılmaktadır.

ds = context.sources.add_fabric_powerbi("Retail Analysis Data Source", dataset="Retail Analysis Sample PBIX")

Veri Varlıklarını Belirtme

Çalışmak istediğiniz verilerin alt kümesini belirtmek için Veri Varlıkları tanımlayın. Varlık tam tablolar kadar basit veya özel Veri Çözümleme İfadeleri (DAX) sorgusu kadar karmaşık olabilir.

Burada birden çok varlık ekleyeceksiniz:

Power BI tablosu

Power BI tablosunu veri varlığı olarak ekleyin.

ds.add_powerbi_table_asset("Store Asset", table="Store")

Power BI ölçüsü

Veri kümeniz önceden yapılandırılmış ölçüler içeriyorsa, ölçüleri SemPy'ninkine benzer bir API'yi evaluate_measureizleyen varlıklar olarak eklersiniz.

ds.add_powerbi_measure_asset(
    "Total Units Asset",
    measure="TotalUnits",
    groupby_columns=["Time[FiscalYear]", "Time[FiscalMonth]"]
)

DAX

Kendi ölçülerinizi tanımlamak veya belirli satırlar üzerinde daha fazla denetim sahibi olmak istiyorsanız, özel bir DAX sorgusuyla bir DAX varlığı ekleyebilirsiniz. Burada mevcut iki ölçüyü bölerek bir Total Units Ratio ölçü tanımlayacağız.

ds.add_powerbi_dax_asset(
    "Total Units YoY Asset",
    dax_string=
    """
    EVALUATE SUMMARIZECOLUMNS(
        'Time'[FiscalYear],
        'Time'[FiscalMonth],
        "Total Units Ratio", DIVIDE([Total Units This Year], [Total Units Last Year])
    )    
    """
)

DMV sorgusu

Bazı durumlarda, veri doğrulama işleminin bir parçası olarak Dinamik Yönetim Görünümü (DMV) hesaplamalarını kullanmak yararlı olabilir. Örneğin, veri kümenizdeki bilgi tutarlılığı ihlallerinin sayısını izleyebilirsiniz. Daha fazla bilgi için bkz . Verileri temizleme = daha hızlı raporlar.

ds.add_powerbi_dax_asset(
    "Referential Integrity Violation",
    dax_string=
    """
    SELECT
        [Database_name],
        [Dimension_Name],
        [RIVIOLATION_COUNT]
    FROM $SYSTEM.DISCOVER_STORAGE_TABLES
    """
)

Beklenti

Varlıklara belirli kısıtlamalar eklemek için öncelikle Expectation Suites'i yapılandırmanız gerekir. Her pakete tek tek Beklentiler ekledikten sonra, yeni paketin başında ayarlanan Veri Bağlamı'nı güncelleştirebilirsiniz. Kullanılabilir beklentilerin tam listesi için bkz . GX Beklenti Galerisi.

İki beklentiye sahip bir "Retail Store Suite" ekleyerek başlayın:

  • geçerli bir posta kodu
  • 80 ile 200 arasında satır sayısı olan bir tablo
suite_store = context.add_expectation_suite("Retail Store Suite")

suite_store.add_expectation(ExpectationConfiguration("expect_column_values_to_be_valid_zip5", { "column": "PostalCode" }))
suite_store.add_expectation(ExpectationConfiguration("expect_table_row_count_to_be_between", { "min_value": 80, "max_value": 200 }))

context.add_or_update_expectation_suite(expectation_suite=suite_store)

TotalUnits Ölçü

Tek bir beklentiyle "Retail Measure Suite" ekleyin:

  • Sütun değerleri 50.000'den büyük olmalıdır
suite_measure = context.add_expectation_suite("Retail Measure Suite")
suite_measure.add_expectation(ExpectationConfiguration(
    "expect_column_values_to_be_between", 
    {
        "column": "TotalUnits",
        "min_value": 50000
    }
))

context.add_or_update_expectation_suite(expectation_suite=suite_measure)

Total Units Ratio DAX

Tek bir beklentiyle "Retail DAX Suite" ekleyin:

  • Toplam Birim Oranı için sütun değerleri 0,8 ile 1,5 arasında olmalıdır
suite_dax = context.add_expectation_suite("Retail DAX Suite")
suite_dax.add_expectation(ExpectationConfiguration(
    "expect_column_values_to_be_between", 
    {
        "column": "[Total Units Ratio]",
        "min_value": 0.8,
        "max_value": 1.5
    }
))

context.add_or_update_expectation_suite(expectation_suite=suite_dax)

Bilgi Tutarlılığı İhlalleri (DMV)

Tek bir beklentiyle "Retail DMV Suite" ekleyin:

  • RIVIOLATION_COUNT 0 olmalıdır
suite_dmv = context.add_expectation_suite("Retail DMV Suite")
# There should be no RI violations
suite_dmv.add_expectation(ExpectationConfiguration(
    "expect_column_values_to_be_in_set", 
    {
        "column": "RIVIOLATION_COUNT",
        "value_set": [0]
    }
))
context.add_or_update_expectation_suite(expectation_suite=suite_dmv)

Doğrulama

Verilerde belirtilen beklentileri gerçekten çalıştırmak için önce bir Denetim Noktası oluşturun ve bağlama ekleyin. Checkpoint yapılandırması hakkında daha fazla bilgi için bkz . Veri Doğrulama iş akışı.

checkpoint_config = {
    "name": f"Retail Analysis Checkpoint",
    "validations": [
        {
            "expectation_suite_name": "Retail Store Suite",
            "batch_request": {
                "datasource_name": "Retail Analysis Data Source",
                "data_asset_name": "Store Asset",
            },
        },
        {
            "expectation_suite_name": "Retail Measure Suite",
            "batch_request": {
                "datasource_name": "Retail Analysis Data Source",
                "data_asset_name": "Total Units Asset",
            },
        },
        {
            "expectation_suite_name": "Retail DAX Suite",
            "batch_request": {
                "datasource_name": "Retail Analysis Data Source",
                "data_asset_name": "Total Units YoY Asset",
            },
        },
        {
            "expectation_suite_name": "Retail DMV Suite",
            "batch_request": {
                "datasource_name": "Retail Analysis Data Source",
                "data_asset_name": "Referential Integrity Violation",
            },
        },
    ],
}
checkpoint = context.add_checkpoint(
    **checkpoint_config
)

Şimdi denetim noktasını çalıştırın ve basit biçimlendirme için sonuçları pandas DataFrame olarak ayıklayın.

result = checkpoint.run()

Sonuçlarınızı işleyin ve yazdırın.

import pandas as pd

data = []

for run_result in result.run_results:
    for validation_result in result.run_results[run_result]["validation_result"]["results"]:
        row = {
            "Batch ID": run_result.batch_identifier,
            "type": validation_result.expectation_config.expectation_type,
            "success": validation_result.success
        }

        row.update(dict(validation_result.result))
        
        data.append(row)

result_df = pd.DataFrame.from_records(data)    

result_df[["Batch ID", "type", "success", "element_count", "unexpected_count", "partial_unexpected_list"]]

Tabloda doğrulama sonuçları gösterilir.

Bu sonuçlardan, özel bir DAX sorgusu aracılığıyla tanımladığınız "Toplam Birim YoY Varlığı" dışında tüm beklentilerinizin doğrulamayı geçtiğini görebilirsiniz.

Tanılama

Anlamsal bağlantıyı kullanarak, hangi yılların aralık dışında olduğunu anlamak için kaynak verileri getirebilirsiniz. Anlamsal bağlantı, DAX sorgularını yürütmek için satır içi bir sihir sağlar. GX Veri Varlığı'na ilettiğiniz sorguyu yürütmek ve sonuçta elde edilen değerleri görselleştirmek için anlamsal bağlantıyı kullanın.

%%dax "Retail Analysis Sample PBIX"

EVALUATE SUMMARIZECOLUMNS(
    'Time'[FiscalYear],
    'Time'[FiscalMonth],
    "Total Units Ratio", DIVIDE([Total Units This Year], [Total Units Last Year])
)

Tablo, DAX sorgu özetlemesinin sonuçlarını gösterir.

Bu sonuçları bir DataFrame'e kaydedin.

df = _

Sonuçları çizin.

import matplotlib.pyplot as plt

df["Total Units % Change YoY"] = (df["[Total Units Ratio]"] - 1)

df.set_index(["Time[FiscalYear]", "Time[FiscalMonth]"]).plot.bar(y="Total Units % Change YoY")

plt.axhline(0)

plt.axhline(-0.2, color="red", linestyle="dotted")
plt.axhline( 0.5, color="red", linestyle="dotted")

None

Çizim, DAX sorgu özetlemesinin sonuçlarını gösterir.

Çizimden Nisan ve Temmuz'un biraz aralık dışında olduğunu görebilir ve araştırmak için daha fazla adım atabilirsiniz.

GX yapılandırmasını depolama

Veri kümenizdeki veriler zaman içinde değiştikçe, az önce gerçekleştirdiğiniz GX doğrulamalarını yeniden çalıştırmak isteyebilirsiniz. Şu anda Veri Bağlamı (bağlı Veri Varlıklarını, Expectation Suites'i ve Checkpoint'i içeren) kısa süreli olarak yaşamaktadır, ancak gelecekte kullanmak üzere Dosya Bağlamı'na dönüştürülebilir. Alternatif olarak, bir Dosya Bağlamı örneği oluşturabilirsiniz (bkz . Veri Bağlamı Örneği Oluşturma).

context = context.convert_to_file_context()

Bağlamı kaydettiğinize göre dizini göle kopyalayın gx .

Önemli

Bu hücre, not defterine bir göl evi eklediğinizi varsayar. Ekli göl evi yoksa bir hata görmezsiniz, ancak daha sonra bağlamı da alamazsınız. Şimdi bir lakehouse eklerseniz çekirdek yeniden başlatılır, bu nedenle bu noktaya geri dönmek için not defterinin tamamını yeniden çalıştırmanız gerekir.

# copy GX directory to attached lakehouse
!cp -r gx/ /lakehouse/default/Files/gx

Artık bu öğreticideki tüm yapılandırmaları kullanmak için ile context = gx.get_context(project_root_dir="<your path here>") gelecek bağlamlar oluşturulabilir.

Örneğin, yeni bir not defterinde aynı lakehouse'u ekleyin ve bağlamı almak için kullanın context = gx.get_context(project_root_dir="/lakehouse/default/Files/gx") .

Anlamsal bağlantı / SemPy için diğer öğreticilere göz atın: