Udostępnij za pośrednictwem


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

W tym samouczku przedstawiono wcześniejsze prace wykonywane przez analityka usługi Power BI i przechowywane w postaci modeli semantycznych (zestawów danych usługi Power BI). Korzystając z biblioteki SemPy (wersja zapoznawcza) w środowisku usługi Synapse Nauka o danych w usłudze Microsoft Fabric, analizujesz zależności funkcjonalne, które istnieją w kolumnach ramki danych. Ta analiza ułatwia odnajdywanie problemów z jakością danych nietrivial, aby uzyskać dokładniejsze szczegółowe informacje.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • 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 linku semantycznego (SemPy), które obsługują integrację 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.
    • Przydatne funkcje ściągania modeli semantycznych z obszaru roboczego usługi Fabric do notesu.
    • Przydatne funkcje automatyzujące ocenę hipotez dotyczących zależności funkcjonalnych i identyfikujące naruszenia relacji w modelach semantycznych.

Wymagania wstępne

  • Uzyskaj subskrypcję usługi Microsoft Fabric. Możesz też utworzyć konto bezpłatnej wersji próbnej usługi Microsoft Fabric.

  • Zaloguj się do usługi Microsoft Fabric.

  • Użyj przełącznika środowiska po lewej stronie głównej, aby przełączyć się na środowisko usługi Synapse Nauka o danych.

    Zrzut ekranu przedstawiający menu przełącznika środowiska pokazujące, gdzie wybrać Nauka o danych.

Postępuj zgodnie z instrukcjami w notesie

Notes powerbi_dependencies_tutorial.ipynb towarzyszy temu samouczkowi.

Aby otworzyć towarzyszący notes na potrzeby tego samouczka, postępuj zgodnie z instrukcjami w temacie Przygotowywanie systemu do celów nauki o danych, aby zaimportować notes do obszaru roboczego.

Jeśli wolisz skopiować i wkleić kod z tej strony, możesz utworzyć nowy notes.

Przed rozpoczęciem uruchamiania kodu pamiętaj, aby dołączyć usługę Lakehouse do notesu .

Konfigurowanie notesu

W tej sekcji skonfigurujesz środowisko notesu z niezbędnymi modułami i danymi.

  1. Zainstaluj z SemPy poziomu interfejsu %pip PyPI przy użyciu funkcji instalacji wbudowanej w notesie:

    %pip install semantic-link
    
  2. Wykonaj niezbędne importy modułów, które będą potrzebne później:

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

Ładowanie i wstępne przetwarzanie danych

W tym samouczku jest używany standardowy przykładowy model semantyczny Customer Profitability Sample.pbix. Opis modelu semantycznego można znaleźć w artykule Customer Profitability sample for Power BI (Przykład Customer Profitability dla usługi Power BI).

  1. Załaduj dane usługi Power BI do elementu FabricDataFrames przy użyciu funkcji SemPy read_table :

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

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

    Chociaż dane wyjściowe tego kodu wyglądają jak ramka danych biblioteki pandas, faktycznie zainicjowano strukturę danych o nazwie , FabricDataFrame która obsługuje niektóre przydatne operacje na bibliotece pandas.

  3. Sprawdź typ danych :customer

    type(customer)
    

    Dane wyjściowe potwierdzają, że customer jest typu sempy.fabric._dataframe._fabric_dataframe.FabricDataFrame."

  4. Dołącz do ramek customer danych i state :

    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 manifestuje się jako relacja jeden do wielu między wartościami w dwóch (lub więcej) kolumnach w ramce danych. Te relacje mogą służyć do automatycznego wykrywania problemów z jakością danych.

  1. Uruchom funkcję SemPy find_dependencies na scalonej ramce danych, aby zidentyfikować wszelkie istniejące zależności funkcjonalne między wartościami w kolumnach:

    dependencies = customer_state_df.find_dependencies()
    dependencies
    
  2. Zwizualizuj zidentyfikowane zależności przy użyciu funkcji biblioteki plot_dependency_metadata SemPy:

    plot_dependency_metadata(dependencies)
    

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

    Zgodnie z oczekiwaniami wykres zależności funkcjonalnych pokazuje, że kolumna Customer określa niektóre kolumny, takie jak City, Postal Codei Name.

    Co zaskakujące, wykres nie pokazuje zależności funkcjonalnej między City i Postal Code, prawdopodobnie dlatego, że istnieje wiele naruszeń w relacjach między kolumnami. Funkcja SemPy plot_dependency_violations umożliwia 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 SemPy plot_dependency_violations .

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

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

    Wykres naruszeń zależności pokazuje wartości po Postal Code lewej stronie i wartości dla City po prawej stronie. Krawędź łączy Postal Code element po lewej stronie z krawędzią 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 istnieją dwa wiersze z kodem pocztowym 20004, jeden z miastem "North Tower" i drugim z miastem "Waszyngton".

    Ponadto wykres przedstawia kilka naruszeń i wiele pustych wartości.

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

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

    50 wierszy ma wartość NA dla kodu pocztowego.

  3. Usuwanie wierszy z pustymi wartościami. Następnie znajdź zależności przy użyciu find_dependencies funkcji . 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 elementu 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 na 0.05, aby zobaczyć zależności. Niższe progi powodują zmniejszenie zależności (lub wyższą selektywność).

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

    plot_dependency_metadata(customer_state_df2.find_dependencies(threshold=0.05))
    

    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 sprzężenia City ze strzałką przerywaną i Region, która wskazuje, że zależność jest 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 wartość nonempty Region powoduje naruszenie:

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

    Wynik pokazuje Downers Grove miasto występujące w Illinois i Nebraska. Jednak Downer's Grove jest miastem w Illinois, a nie Nebraska.

  7. Przyjrzyj się miastu Fremont:

    customer_state_df[customer_state_df.City=='Fremont']
    

    Jest miasto o nazwie Fremont w Kalifornii. Jednak dla Teksasu wyszukiwarka zwraca Premont, a nie Fremont.

  8. Podejrzane jest również, aby zobaczyć naruszenia zależności między Name i Country/Region, oznaczone przez kropkowany wiersz w oryginalnym grafie naruszeń zależności (przed usunięciem wierszy z pustymi wartościami).

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

    Wygląda na to, że jeden klient, SDI Design jest obecny w dwóch regionach - Stany Zjednoczone i Kanada. To zdarzenie może nie być naruszeniem semantycznym, ale może być po prostu rzadkim przypadkiem. Mimo to warto przyjrzeć się bliżej:

  9. Przyjrzyj się bliżej projektowi SDI klienta:

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

    Dalsza kontrola pokazuje, że w rzeczywistości dwóch różnych klientów (z różnych branż) o tej samej nazwie.

Eksploracyjna analiza danych to ekscytujący proces, a więc czyszczenie danych. Zawsze jest coś, co ukrywa dane, w zależności od tego, jak patrzysz na to, co chcesz zapytać itd. Link semantyczny udostępnia nowe narzędzia, których można użyć do osiągnięcia większej ilości danych.

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