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.
Wybierz pozycję Obszary robocze w okienku nawigacji po lewej stronie, aby znaleźć i wybrać obszar roboczy. Ten obszar roboczy staje się bieżącym obszarem roboczym.
Pobierz model semantyczny Customer Profitability Sample.pbix z repozytorium GitHub fabric-samples i przekaż go do obszaru roboczego.
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.
Zainstaluj z
SemPy
poziomu interfejsu%pip
PyPI przy użyciu funkcji instalacji wbudowanej w notesie:%pip install semantic-link
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).
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()
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.Sprawdź typ danych :
customer
type(customer)
Dane wyjściowe potwierdzają, że
customer
jest typusempy.fabric._dataframe._fabric_dataframe.FabricDataFrame
."Dołącz do ramek
customer
danych istate
: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.
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
Zwizualizuj zidentyfikowane zależności przy użyciu funkcji biblioteki
plot_dependency_metadata
SemPy:plot_dependency_metadata(dependencies)
Zgodnie z oczekiwaniami wykres zależności funkcjonalnych pokazuje, że kolumna
Customer
określa niektóre kolumny, takie jakCity
,Postal Code
iName
.Co zaskakujące, wykres nie pokazuje zależności funkcjonalnej między
City
iPostal Code
, prawdopodobnie dlatego, że istnieje wiele naruszeń w relacjach między kolumnami. Funkcja SemPyplot_dependency_violations
umożliwia wizualizowanie naruszeń zależności między określonymi kolumnami.
Eksplorowanie danych pod kątem problemów z jakością
Rysuj graf za pomocą funkcji wizualizacji SemPy
plot_dependency_violations
.customer_state_df.plot_dependency_violations('Postal Code', 'City')
Wykres naruszeń zależności pokazuje wartości po
Postal Code
lewej stronie i wartości dlaCity
po prawej stronie. Krawędź łączyPostal 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.
Potwierdź liczbę pustych wartości dla elementu
Postal Code
:customer_state_df['Postal Code'].isna().sum()
50 wierszy ma wartość NA dla kodu pocztowego.
Usuwanie wierszy z pustymi wartościami. Następnie znajdź zależności przy użyciu
find_dependencies
funkcji . Zwróć uwagę na dodatkowy parametrverbose=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 iCity
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ślnej0.01
na0.05
, aby zobaczyć zależności. Niższe progi powodują zmniejszenie zależności (lub wyższą selektywność).Podnieś próg dla entropii warunkowej z wartości domyślnej
0.01
na0.05
:plot_dependency_metadata(customer_state_df2.find_dependencies(threshold=0.05))
Jeśli zastosujesz wiedzę o domenie, która jednostka określa wartości innych jednostek, ten wykres zależności wydaje się dokładny.
Poznaj więcej wykrytych problemów z jakością danych. Na przykład sprzężenia
City
ze strzałką przerywaną iRegion
, 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')
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.
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.
Podejrzane jest również, aby zobaczyć naruszenia zależności między
Name
iCountry/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:
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.
Powiązana zawartość
Zapoznaj się z innymi samouczkami dotyczącymi linku semantycznego /SemPy:
- Samouczek: czyszczenie danych przy użyciu zależności funkcjonalnych
- Samouczek: wyodrębnianie i obliczanie miar usługi Power BI z notesu Jupyter
- Samouczek: odnajdywanie relacji w modelu semantycznym przy użyciu linku semantycznego
- Samouczek: odnajdywanie relacji w zestawie danych Synthea przy użyciu linku semantycznego
- Samouczek: weryfikowanie danych przy użyciu bibliotekI SemPy i wielkich oczekiwań (GX) (wersja zapoznawcza)