Oktatóanyag: Funkcionális függőségek elemzése szemantikai modellben

Ebben az oktatóanyagban egy szemantikai modellként (Power BI-adathalmazként) tárolt Power BI-elemző munkájára épít. A SemPy (előzetes verzió) használatával a Microsoft Fabric Synapse Data Science felületén elemezheti a DataFrame-oszlopok funkcionális függőségeit. Ez az elemzés segít felderíteni a finom adatminőségi problémákat, hogy pontosabb megállapításokat kapjon.

Ebben az oktatóanyagban a következőket sajátíthatja el:

  • Használjon tartományismeretet a szemantikai modell funkcionális függőségeiről szóló hipotézisek megfogalmazásához.
  • Megismerkedhet a Szemantic Link Python-kódtárának (SemPy) azon összetevőivel, amelyek integrálhatók a Power BI-val, és segítenek automatizálni az adatminőség-elemzést. Ezek az összetevők a következők:
    • FabricDataFrame – további szemantikai információkkal bővített pandas-szerű struktúra
    • Olyan függvények, amelyek szemantikai modelleket kérnek le egy Fabric-munkaterületről a jegyzetfüzetbe
    • Függvények, amelyek kiértékelik a funkcionális függőségi hipotéziseket, és azonosítják a szemantikai modellek kapcsolati megsértését

Előfeltételek

  1. A munkaterület megkereséséhez és kijelöléséhez válassza ki a munkaterületeket a navigációs panelen. Ez a munkaterület lesz az aktuális munkaterület.

  2. Töltse le a Customer Profitability Sample.pbix fájlt a hálóminták GitHub-adattárából.

  3. A munkaterületen válassza >jelentés vagy lapszámozott jelentés importálása>A számítógépről lehetőséget a Customer Profitability Sample.pbix fájl munkaterületre való feltöltéséhez.

Követés a jegyzetfüzetben

A powerbi_dependencies_tutorial.ipynb jegyzetfüzet kíséri ezt az oktatóanyagot.

A jegyzetfüzet beállítása

Állítson be egy jegyzetfüzet-környezetet a szükséges modulokkal és adatokkal.

  1. A SemPy a PyPI-ból való telepítéséhez használható %pip a jegyzetfüzetben.

    %pip install semantic-link
    
  2. Importálja a szükséges modulokat.

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

Adatok betöltése és előfeldolgozása

Ez az oktatóanyag egy standard szemantikai mintamodellt használ: Customer Profitability Sample.pbix. A szemantikai modell leírását a Power BIügyfél-jövedelmezőségi mintájában talál.

  1. Power BI-adatok betöltése a FabricDataFrame függvény használatával fabric.read_table .

    dataset = "Customer Profitability Sample"
    customer = fabric.read_table(dataset, "Customer")
    customer.head()
    
  2. Töltse be a State táblát egy FabricDataFrame.

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

    Bár a kimenet úgy néz ki, mint egy pandas DataFrame, ez a kód inicializál egy úgynevezett adatstruktúrát FabricDataFrame , amely műveleteket ad hozzá a pandas fölé.

  3. Ellenőrizze a következő adattípust customer: .

    type(customer)
    

    A kimenet azt mutatja, hogy customer az .sempy.fabric._dataframe._fabric_dataframe.FabricDataFrame

  4. Csatlakozzon az és customerstate az DataFrame objektumokhoz.

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

Funkcionális függőségek azonosítása

A funkcionális függőség egy egy-a-többhöz kapcsolat az értékek között két vagy több oszlopban egy DataFrameoszlopban. Ezekkel a kapcsolatokkal automatikusan észlelhet adatminőségi problémákat.

  1. Futtassa a SemPy függvényét find_dependencies az egyesített DataFrame rendszeren az oszlopértékek közötti funkcionális függőségek azonosításához.

    dependencies = customer_state_df.find_dependencies()
    dependencies
    
  2. A függőségek vizualizációja a SemPy függvényével plot_dependency_metadata .

    plot_dependency_metadata(dependencies)
    

    Képernyőkép a függőség metaadatainak ábrázolásáról.

    A funkcionális függőségek grafikonja azt mutatja, hogy az oszlop olyan Customer oszlopokat határoz meg, mint a City, Postal Codeés Name.

    A gráf nem jelenít meg funkcionális függőséget az és Citya közöttPostal Code, valószínűleg azért, mert sok szabálysértés van az oszlopok közötti kapcsolatban. A SemPy függvény használatával plot_dependency_violations megjeleníthet függőségi szabálysértéseket adott oszlopok között.

Az adatok megismerése minőségi problémák esetén

  1. Rajzoljunk egy diagramot a(z) SemPy plot_dependency_violations vizualizációs függvényével.

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

    A függőségi szabálysértéseket megjelenítő diagram képernyőképe.

    A függőségi szabálysértések ábrázolása a bal oldalon lévő értékeket Postal Code , a jobb oldalon pedig az értékeket City jeleníti meg. Egy él összekapcsol egy Postal Code a bal oldalon egy City a jobb oldalon, ha van egy sor, amely tartalmazza ezt a két értéket. Az élek az ilyen sorok számával vannak megjelölve. Van például két sor 20004 irányítószámmal, az egyik az "Északi torony" várossal, a másik pedig "Washington" várossal.

    A diagramon néhány szabálysértés és sok üres érték is látható.

  2. Ellenőrizze a Postal Codeüres értékeinek számát:

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

    50 sorhoz tartoznak a na for Postal Code.

  3. Üres értékeket tartalmazó sorok elvetése. Ezután keresse meg a függőségeket a find_dependencies függvénnyel. Figyelje meg az extra paramétert verbose=1, amely betekintést nyújt a SemPy belső működésébe:

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

    A Postal Code és City feltételes entrópia 0,049. Ez az érték azt jelzi, hogy működési függőségi szabálysértések vannak. A szabálysértések kijavítása előtt emelje fel a feltételes entrópia küszöbértékét a 0.01 alapértelmezett értékéről 0.05, csak a függőségek megtekintéséhez. Az alacsonyabb küszöbértékek kevesebb függőséget (vagy nagyobb szelektivitást) eredményeznek.

  4. A feltételes entrópia küszöbértékének növelése az alapértelmezett 0.01 értékről 0.05:

    plot_dependency_metadata(customer_state_df2.find_dependencies(threshold=0.05))
    

    Képernyőkép a függőség metaadatainak ábrázolásáról magasabb entrópia küszöbértékkel.

    Ha tartományismeretet alkalmaz arra vonatkozóan, hogy melyik entitás határozza meg más entitások értékeit, ez a függőségi gráf pontosnak tűnik.

  5. További, észlelt adatminőségi problémák megismerése. Például egy szaggatott nyíl összekapcsolja City és Region, ami azt jelzi, hogy a függőség csak hozzávetőleges. Ez a közelítő kapcsolat azt jelentheti, hogy részleges funkcionális függőség áll fenn.

    customer_state_df.list_dependency_violations('City', 'Region')
    
  6. Tekintse meg közelebbről azokat az eseteket, amikor egy érvénytelen Region érték szabálysértést okoz:

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

    Az eredmény Downers Grove városát mutatja Illinois-ban és Nebraska-ban. Downers Grove azonban illinois-i város, nem Nebraska.

  7. Tekintse meg Fremontvárosát:

    customer_state_df[customer_state_df.City=='Fremont']
    

    Van egy Fremont nevű város Kaliforniában. Texas esetében azonban a keresőmotor Premont, nem Fremontot adja vissza.

  8. Az is gyanús, hogy a Name és a Country/Regionközötti függőség megsértései láthatók, amit az eredeti függőségi szabálysértések grafikonján a szaggatott vonal jelez (mielőtt eltávolítanánk a sorokat, melyek üres értékeket tartalmaznak).

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

    Az egyik ügyfél, az SDI Design két régióban jelenik meg: az Egyesült Államokban és Kanadában. Ez az eset nem lehet szemantikai szabálysértés, csak nem ritka. Mégis érdemes közelebbről megnézni:

  9. Nézze meg közelebbről a SDI Designügyfél:

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

    A további vizsgálatok két különböző, azonos nevű iparágból származó ügyfelet mutatnak be.

A feltáró jellegű adatelemzés és az adattisztítás iteratív. Az, hogy mit talál, a kérdéseitől és perspektívájától függ. A Szemantic Link új eszközöket biztosít az adatok további kinyeréséhez.

Tekintse meg a szemantikai hivatkozásra és a SemPy-ra vonatkozó egyéb oktatóanyagokat: