Samouczek: analizowanie zależności funkcjonalnych w modelu semantycznym

W tym samouczku bazujesz na pracy analityka usługi Power BI, która jest przechowywana w postaci modeli semantycznych (zestawów danych usługi Power BI). Korzystając z SemPy (podglądu) w obciążeniu Fabric Data Science, analizujesz zależności funkcjonalne w kolumnach DataFrame. Ta analiza pomaga odkryć subtelne problemy z jakością danych, aby uzyskać dokładniejsze szczegółowe informacje.

Z tego samouczka dowiesz się, jak wykonywać następujące działania:

  • Zastosuj wiedzę na temat domeny, aby sformułować hipotezy dotyczące zależności funkcjonalnych w modelu semantycznym.
  • Zapoznaj się ze składnikami biblioteki języka Python (SemPy) usługi Semantic Link, które integrują się z usługą Power BI i pomagają zautomatyzować analizę jakości danych. Te składniki obejmują:
    • FabricDataFrame—struktura podobna do pandas rozszerzona o dodatkowe informacje semantyczne
    • Funkcje ściągające modele semantyczne z obszaru roboczego usługi Fabric do notesu
    • Funkcje, które oceniają hipotezy zależności funkcjonalnych i identyfikują naruszenia relacji w modelach semantycznych

Warunki wstępne

  1. Wybierz pozycję Obszary robocze w okienku nawigacji, aby znaleźć i wybrać obszar roboczy. To środowisko pracy staje się bieżącym środowiskiem pracy.

  2. Pobierz plik Customer Profitability Sample.pbix z repozytorium GitHub fabric-samples.

  3. W obszarze roboczym wybierz pozycję Importuj raport>lub raport podzielony na strony>Z tego komputera, aby przekazać plik Customer Profitability Sample.pbix do obszaru roboczego.

Śledź w zeszycie

Notatnik powerbi_dependencies_tutorial.ipynb towarzyszy temu samouczkowi.

Skonfiguruj notebooka

Skonfiguruj środowisko notatnika z modułami i danymi, których potrzebujesz.

  1. Użyj polecenia %pip, aby zainstalować SemPy z PyPI w notesie.

    %pip install semantic-link
    
  2. Zaimportuj potrzebne moduły.

    import sempy.fabric as fabric
    from sempy.dependencies import plot_dependency_metadata
    

Ładowanie i wstępne przetwarzanie danych

W tym samouczku użyto standardowego przykładowego modelu semantycznego Customer Profitability Sample.pbix. Aby zapoznać się z opisem modelu semantycznego, zobacz Przykład Customer Profitability dla usługi Power BI.

  1. Załaduj dane usługi Power BI do FabricDataFrame, używając funkcji fabric.read_table.

    dataset = "Customer Profitability Sample"
    customer = fabric.read_table(dataset, "Customer")
    customer.head()
    
  2. Załaduj tabelę State do obiektu FabricDataFrame.

    state = fabric.read_table(dataset, "State")
    state.head()
    

    Mimo że dane wyjściowe wyglądają jak DataFrame biblioteki pandas, ten kod inicjalizuje strukturę danych o nazwie FabricDataFrame, która rozszerza bibliotekę pandas o dodatkowe operacje.

  3. Sprawdź typ danych customer.

    type(customer)
    

    Dane wyjściowe wskazują, że customer to sempy.fabric._dataframe._fabric_dataframe.FabricDataFrame.

  4. Połącz obiekty customer i stateDataFrame.

    customer_state_df = customer.merge(state, left_on="State", right_on="StateCode", how='left')
    customer_state_df.head()
    

Identyfikowanie zależności funkcjonalnych

Zależność funkcjonalna to relacja jeden do wielu między wartościami w co najmniej dwóch kolumnach w obiekcie DataFrame. Użyj tych relacji, aby automatycznie wykrywać problemy z jakością danych.

  1. Uruchom funkcję find_dependencies biblioteki SemPy na scalonym elemencie DataFrame, aby zidentyfikować zależności funkcjonalne między wartościami kolumn.

    dependencies = customer_state_df.find_dependencies()
    dependencies
    
  2. Wizualizuj zależności przy użyciu funkcji SemPy plot_dependency_metadata .

    plot_dependency_metadata(dependencies)
    

    Zrzut ekranu przedstawiający wykres metadanych zależności.

    Wykres zależności funkcjonalnych pokazuje, że kolumna Customer określa kolumny, takie jak City, Postal Codei Name.

    Wykres nie pokazuje zależności funkcjonalnej między City i Postal Code, prawdopodobnie dlatego, że istnieje wiele naruszeń relacji między kolumnami. Użyj funkcji SemPy plot_dependency_violations do wizualizacji naruszeń zależności między określonymi kolumnami.

Eksplorowanie danych pod kątem problemów z jakością

  1. Rysuj graf za pomocą funkcji wizualizacji plot_dependency_violations SemPy.

    customer_state_df.plot_dependency_violations('Postal Code', 'City')
    

    Zrzut ekranu przedstawiający wykres pokazujący naruszenia zależności.

    Wykres naruszeń zależności przedstawia wartości dla Postal Code po lewej stronie oraz wartości dla City po prawej stronie. Krawędź łączy Postal Code po lewej stronie z City po prawej stronie, jeśli istnieje wiersz zawierający te dwie wartości. Krawędzie są oznaczone adnotacjami z liczbą takich wierszy. Na przykład są dwa wiersze z kodem pocztowym 20004: jeden z miastem "North Tower" i drugi z miastem "Waszyngton".

    Wykres przedstawia również kilka naruszeń i wiele pustych wartości.

  2. Potwierdź liczbę pustych wartości dla Postal Code:

    customer_state_df['Postal Code'].isna().sum()
    

    50 wierszy zawiera wartość NA dla Postal Code.

  3. Usuwanie wierszy z pustymi wartościami. Następnie znajdź zależności przy użyciu funkcji find_dependencies. Zwróć uwagę na dodatkowy parametr verbose=1, który oferuje wgląd w wewnętrzne działania SemPy:

    customer_state_df2=customer_state_df.dropna()
    customer_state_df2.find_dependencies(verbose=1)
    

    Entropia warunkowa dla Postal Code i City wynosi 0,049. Ta wartość wskazuje, że istnieją naruszenia zależności funkcjonalnych. Przed naprawieniem naruszeń podnieś próg dla entropii warunkowej z wartości domyślnej 0.01 do 0.05, aby zobaczyć zależności. Niższe progi powodują zmniejszenie zależności (lub wyższą selektywność).

  4. Podnieś próg entropii warunkowej z wartości domyślnej 0.01 do 0.05:

    plot_dependency_metadata(customer_state_df2.find_dependencies(threshold=0.05))
    

    Zrzut ekranu przedstawiający wykres metadanych zależności z wyższym progiem entropii.

    Jeśli zastosujesz wiedzę o domenie, która jednostka określa wartości innych jednostek, ten wykres zależności wydaje się dokładny.

  5. Poznaj więcej wykrytych problemów z jakością danych. Na przykład strzałka przerywana łączy City i Region, co wskazuje, że zależność jest jedynie przybliżona. Przybliżona relacja może oznaczać, że istnieje częściowa zależność funkcjonalna.

    customer_state_df.list_dependency_violations('City', 'Region')
    
  6. Przyjrzyj się bliżej każdemu z przypadków, w których niepusta wartość Region powoduje naruszenie.

    customer_state_df[customer_state_df.City=='Downers Grove']
    

    Wynik pokazuje miasto Downers Grove w Illinois i Nebraska. Jednak Downers Grove jest miastem w Illinois, a nie Nebraska.

  7. Przyjrzyj się miastu Fremont:

    customer_state_df[customer_state_df.City=='Fremont']
    

    Istnieje miasto o nazwie Fremont w Kalifornii. Jednak w przypadku Teksasu wyszukiwarka zwraca Premont, a nie Fremont.

  8. Podejrzane jest również widzieć naruszenia zależności między Name i Country/Region, oznaczone linią przerywaną w oryginalnym wykresie naruszeń zależności (przed usunięciem wierszy z brakującymi wartościami).

    customer_state_df.list_dependency_violations('Name', 'Country/Region')
    

    Jeden klient, SDI Design, pojawia się w dwóch regionach — Stanach Zjednoczonych i Kanadzie. Ten przypadek może nie być naruszeniem semantycznym, po prostu nietypowym. Mimo to warto przyjrzeć się bliżej:

  9. Przyjrzyj się bliżej projektowi SDIklienta:

    customer_state_df[customer_state_df.Name=='SDI Design']
    

    Dalsza kontrola pokazuje dwóch różnych klientów z różnych branż o tej samej nazwie.

Eksploracyjna analiza danych i czyszczenie danych są iteracyjne. To, co znajdziesz, zależy od pytań i perspektywy. Usługa Semantic Link udostępnia nowe narzędzia do uzyskiwania większej ilości danych.

Zapoznaj się z innymi samouczkami dotyczącymi linku semantycznego i biblioteki SemPy: