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ám oszlop például meghatározhatja egy város oszlop értékeit. A funkcionális függőség egy-a-többhöz kapcsolatként nyilvánul meg a DataFrame két vagy több oszlopában található értékek között. Ez az oktatóanyag a Synthea adatkészletet használja annak bemutatására, hogy a funkcionális kapcsolatok hogyan segíthetnek az adatminőségi problémák észlelésében.

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.
  • 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

  • A bal oldali navigációs panelen válassza Munkaterületek lehetőséget a munkaterület megkereséséhez és kijelöléséhez. Ez a munkaterület válik az aktuális munkaterületté.

Követés a jegyzetfüzetben

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

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 Synthea szintetikus orvosi rekordok adatkészletét használja (kis verzió az egyszerűség kedvéért):

    download_synthea(which='small')
    

Az adatok megismerése

  1. Inicializáljon egy FabricDataFrame 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 ábrázoló képernyőkép.

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

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

    providers.Id.is_unique
    

    A kód visszaadja a True értéket annak megerősítésére, hogy a Id egyedi.

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

A funkcionális függőségek grafikonja azt is mutatja, hogy ORGANIZATION a várt módon határozza meg ADDRESS és ZIP. Előfordulhat azonban, hogy ZIP is meghatározza a 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. A NAME például nem határozza meg GENDER, Id, SPECIALITYvagy ORGANIZATION. Érdemes lehet megvizsgálni ezeket a sajátosságokat.

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

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

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

    A függőségi szabálysértések ábrázolását bemutató képernyőkép.

    A függőségi szabálysértések ábrázolása a bal oldali ZIP értékeit, a jobb oldalon pedig a CITY értékeit 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 megjegyzéssel ellátva. 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 CITY sorok között, ahol a "DARTHMOUTH" szerepel, kilenc sornak van ZIP értéke 02747-1262; az egyik sornak ZIP értéke 02747-1242; és egy másik sornak ZIP értéke 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ó sztring metódusokkal.
  • Egyes városnevek rendelkeznek minősítőkkel (vagy előtagokkal), például "Észak" és "Kelet". Például a "2128" irányítószám egyszer a "KELET-BOSTON"-hoz, egyszer pedig a "BOSTON"-hoz tartozik. Hasonló probléma a "NORTH DARTHMOUTH" és a "DARTHMOUTH" között fordul elő. Megpróbálhatja elhagyni ezeket a minősítőket, vagy hozzárendelni az irányítószámokat a városra, amelyben a leggyakrabban előfordulnak.
  • Egyes városok neveiben elírások találhatók, például: "PITTSFIELD" szemben "PITTSFILED" és "NEWBURGPORT" szemben "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.
  • Az "02130" irányítószám egyszer a "BOSTON"-hoz, egyszer pedig a "Jamaica Plain"-hez van rendelve. 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 törlése

  1. A nagybetűsítéssel kapcsolatos problémák megoldása érdekében módosítsa az összes szöveget kezdőbetűs formátumúra.

    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 sértő sorok elvetése a SemPy drop_dependency_violations függvényével.

    A determináns változó minden egyes értékéhez drop_dependency_violations 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 drop_dependency_violations függvényt a ZIP és CITY oszlopokon:

    providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')
    
  4. Az ZIP és CITYközötti függőségi szabálysértések felsorolása:

    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 funkcionális korlátozás CITY -> ZIP.

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