Udostępnij przez


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

W tym samouczku utworzysz pracę analityka usługi Power BI, który jest przechowywany jako modele semantyczne (zestawy danych usługi Power BI). Korzystając z biblioteki SemPy (wersja zapoznawcza) w środowisku nauki o danych usługi Synapse w usłudze Microsoft Fabric, 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 biblioteki 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 notesu przy użyciu potrzebnych modułów i danych.

  1. Użyj %pip polecenia , aby zainstalować oprogramowanie SemPy z poziomu interfejsu 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 FabricDataFramefabric.read_table dane usługi Power BI do obiektu przy użyciu funkcji .

    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 ramka danych pandas, ten kod inicjuje strukturę danych o nazwie , FabricDataFrame która dodaje operacje na wierzchu biblioteki pandas.

  3. Sprawdź typ danych .customer

    type(customer)
    

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

  4. Sprzężenia obiektów 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ę SemPy find_dependencies na scalonej 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. Funkcja SemPy umożliwia plot_dependency_violations wizualizowanie 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 po Postal Code lewej stronie i wartości dla City wartości 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 ma 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: