Megosztás a következőn keresztül:


Oktatóanyag: Adatok tisztítása funkcionális függőségekkel

Ebben az oktatóanyagban funkcionális függőségeket használ az adattisztításhoz. Funkcionális függőség akkor létezik, ha egy szemantikai modell egyik oszlopa (Power BI-adatkészlet) egy másik oszlop függvénye. Egy irányítószámoszlop például meghatározhatja egy várososzlop értékeit. A funkcionális függőségek egy-a-többhöz kapcsolatként nyilvánulnak meg a DataFrame két vagy több oszlopában lévő értékek között. Ez az oktatóanyag a Synthea-adatkészlet használatával mutatja be, hogyan segíthetnek a funkcionális kapcsolatok az adatminőségi problémák észlelésében.

Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:

  • Használjon tartományismeretet a szemantikai modell funkcionális függőségeiről szóló hipotézisek megfogalmazásához.
  • Ismerkedjen meg a szemantikai hivatkozás Python-kódtárának (SemPy) összetevőivel, amelyek segítenek automatizálni az adatminőség-elemzést. Ezek az összetevők a következők:
    • FabricDataFrame – egy pandas-szerű struktúra, amely további szemantikai információkkal bővül.
    • Hasznos függvények, amelyek automatizálják a funkcionális függőségekkel kapcsolatos hipotézisek kiértékelését, és amelyek azonosítják a szemantikai modellek kapcsolatainak megsértését.

Előfeltételek

  • Microsoft Fabric-előfizetés lekérése. Vagy regisztráljon egy ingyenes Microsoft Fabric-próbaverzióra.

  • Jelentkezzen be a Microsoft Fabricbe.

  • A kezdőlap bal oldalán található élménykapcsolóval válthat a Synapse Adattudomány felületre.

    Képernyőkép a felületváltó menüjéről, amelyen látható, hogy hol válassza ki a Adattudomány.

  • A munkaterület megkereséséhez és kijelöléséhez válassza a bal oldali navigációs panel munkaterületeit. Ez a munkaterület lesz az aktuális munkaterület.

Követés a jegyzetfüzetben

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

Az oktatóanyaghoz mellékelt jegyzetfüzet megnyitásához kövesse a Rendszer előkészítése adatelemzési oktatóanyagokhoz című témakör utasításait, és importálja a jegyzetfüzetet a munkaterületre.

Ha inkább erről a lapról másolja és illessze be a kódot, létrehozhat egy új jegyzetfüzetet.

A kód futtatása előtt mindenképpen csatoljon egy lakehouse-t a jegyzetfüzethez .

A jegyzetfüzet beállítása

Ebben a szakaszban egy jegyzetfüzet-környezetet állít be a szükséges modulokkal és adatokkal.

  1. A Spark 3.4-hez és újabb verziókhoz a Szemantikus hivatkozás az alapértelmezett futtatókörnyezetben érhető el a Fabric használatakor, és nincs szükség a telepítésre. Ha a Spark 3.3-at vagy az alábbi verziót használja, vagy a Szemantic Link legújabb verziójára szeretne frissíteni, futtassa a parancsot:

python %pip install -U semantic-link  

  1. Végezze el a szükséges modulok importálását, amelyekre később szüksége lesz:

    import pandas as pd
    import sempy.fabric as fabric
    from sempy.fabric import FabricDataFrame
    from sempy.dependencies import plot_dependency_metadata
    from sempy.samples import download_synthea
    
  2. Kérje le a mintaadatokat. Ebben az oktatóanyagban a szintetikus orvosi rekordok Synthea-adatkészletét használja (az egyszerűség kedvéért kis verzió):

    download_synthea(which='small')
    

Az adatok feltárása

  1. Inicializáljon egy FabricDataFrame fájlt a providers.csv fájl tartalmával:

    providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))
    providers.head()
    
  2. Ellenőrizze a SemPy find_dependencies függvényével kapcsolatos adatminőségi problémákat az automatikusan észlelt funkcionális függőségek grafikonjának ábrázolásával:

    deps = providers.find_dependencies()
    plot_dependency_metadata(deps)
    

    A funkcionális függőségek grafikonját bemutató képernyőkép.

    A funkcionális függőségek grafikonja azt mutatja, hogy Id meghatározza NAME és ORGANIZATION (a szilárd nyilak jelzik), ami várható, mivel Id egyedi:

  3. Ellenőrizze, hogy egyedi-e Id :

    providers.Id.is_unique
    

    A kód visszatér, hogy megerősítse True , hogy Id egyedi.

Funkcionális függőségek részletes elemzése

A funkcionális függőségek grafikonja azt is mutatja, hogy meghatározza ORGANIZATION ADDRESS és ZIP, a várt módon. Előfordulhat ZIP azonban, hogy azt is meg kell határoznia CITY, de a szaggatott nyíl azt jelzi, hogy a függőség csak hozzávetőleges, és egy adatminőségi problémára mutat.

A gráfban más sajátosságok is vannak. Például nem határozza meg, NAME IdSPECIALITYORGANIZATIONvagy nem határozza meg.GENDER Érdemes lehet megvizsgálni ezeket a sajátosságokat.

  1. Tekintse meg részletesebben az és CITY– a SemPy függvényével list_dependency_violations – közötti ZIP hozzávetőleges kapcsolatot a szabálysértések táblázatos listájának megtekintéséhez:

    providers.list_dependency_violations('ZIP', 'CITY')
    
  2. Diagram rajzolása SemPy vizualizációs függvényével plot_dependency_violations . Ez a grafikon akkor hasznos, ha a szabálysértések száma kicsi:

    providers.plot_dependency_violations('ZIP', 'CITY')
    

    Képernyőkép a függőségi szabálysértések ábrázolásáról.

    A függőségi szabálysértések ábrázolása a bal oldalon lévő értékeket ZIP , a jobb oldalon pedig az értékeket CITY jeleníti meg. Az élek a rajz bal oldalán lévő irányítószámot kötik össze egy várossal a jobb oldalon, ha van egy sor, amely tartalmazza ezt a két értéket. Az élek az ilyen sorok számával vannak széljegyzetekkel eljegyzve. Például két sor van 02747-1242 irányítószámmal, az egyik a "NORTH DARTHMOUTH" várossal, a másik a "DARTHMUT" várossal, ahogy az előző ábrán és a következő kódban látható:

  3. Az alábbi kód futtatásával erősítse meg a függőségi szabálysértések ábrázolásával végzett korábbi megfigyeléseket:

    providers[providers.ZIP == '02747-1242'].CITY.value_counts()
    
  4. A diagram azt is mutatja, hogy a "DARTHMUT" néven szereplő sorok CITY között kilenc sor ZIP 02747-1262; egy sor ZIP 02747-1242; egy sor ZIP pedig 02747-2537. A következő kóddal megerősíti ezeket a megfigyeléseket:

    providers[providers.CITY == 'DARTMOUTH'].ZIP.value_counts()
    
  5. A "DARTMUT"-hoz más irányítószámok is tartoznak, de ezek az irányítószámok nem jelennek meg a függőségi szabálysértések grafikonján, mivel nem utalnak az adatminőségi problémákra. A "02747-4302" irányítószám például egyedileg van társítva a "DARTMUT"-hoz, és nem jelenik meg a függőségi szabálysértések gráfjában. Erősítse meg a következő kód futtatásával:

    providers[providers.ZIP == '02747-4302'].CITY.value_counts()
    

A SemPy-val észlelt adatminőségi problémák összegzése

Visszatérve a függőségi szabálysértések grafikonjára, láthatja, hogy ebben a szemantikai modellben számos érdekes adatminőségi probléma található:

  • Egyes városnevek nagybetűsek. Ez a probléma könnyen megoldható sztringmetszetekkel.
  • Egyes városnevek rendelkeznek minősítőkkel (vagy előtagokkal), például "Észak" és "Kelet". A "2128" irányítószám például egyszer "KELET-BOSTON" és "BOSTON" lesz. Hasonló probléma a "NORTH DARTHMUT" és a "DARTHMUT" között fordul elő. Megpróbálhatja elvetni ezeket a minősítőket, vagy leképezni az irányítószámokat a városra a leggyakoribb előfordulással.
  • Egyes városokban vannak elírások, például a "PITTSFIELD" és a "PITTSFILED" és a "NEWBURGPORT vs. "NEWBURYPORT". A "NEWBURGPORT" esetében ez az elírás a leggyakoribb előfordulással javítható. A "PITTSFIELD" esetében, ha csak egy előfordulással rendelkezik, sokkal nehezebbé válik az automatikus egyértelműsítés külső ismeretek vagy nyelvi modell használata nélkül.
  • Néha az olyan előtagok, mint a "West" egy "W" betűre vannak rövidítve. Ez a probléma egy egyszerű cserével javítható, ha a "W" összes előfordulása a "Nyugat" értéket adja.
  • A "02130" irányítószám egyszer "BOSTON" és "Jamaica Plain" lesz. Ezt a problémát nem könnyű kijavítani, de ha több adat áll rendelkezésre, lehetséges megoldás lehet a leggyakoribb előfordulásra való leképezés.

Az adatok megtisztítása

  1. A nagybetűsítéssel kapcsolatos problémák megoldásához módosítsa az összes nagybetűt címesre:

    providers['CITY'] = providers.CITY.str.title()
    
  2. Futtassa újra a szabálysértésészlelést, és ellenőrizze, hogy a kétértelműségek némelyike eltűnt-e (a szabálysértések száma kisebb):

    providers.list_dependency_violations('ZIP', 'CITY')
    

    Ezen a ponton manuálisan finomíthatja az adatokat, de az egyik lehetséges adattisztítási feladat az adatok oszlopai közötti funkcionális korlátozásokat megsértő sorok elvetése a SemPy függvényével drop_dependency_violations .

    A determináns változó drop_dependency_violations minden egyes értéke esetében a függő változó leggyakoribb értékének kiválasztásával és az összes sor más értékekkel való elvetésével működik. Ezt a műveletet csak akkor alkalmazza, ha biztos abban, hogy ez a statisztikai heurisztikus az adatok megfelelő eredményeihez vezet. Ellenkező esetben saját kódot kell írnia az észlelt szabálysértések szükség szerinti kezeléséhez.

  3. Futtassa a függvényt drop_dependency_violations az és CITY az ZIP oszlopokon:

    providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')
    
  4. Listázz minden függőségi szabálysértést a következők CITYközöttZIP:

    providers_clean.list_dependency_violations('ZIP', 'CITY')
    

    A kód egy üres listát ad vissza, amely azt jelzi, hogy nincs több szabálysértés a CITY –> ZIP funkcionális kényszerben.

Tekintse meg a szemantikai hivatkozás / SemPy egyéb oktatóanyagait: