Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
Szerezze be a Microsoft Fabric-előfizetést. Vagy regisztráljon egy ingyenes Microsoft Fabric próbaverziós.
Jelentkezzen be a Microsoft Fabric.
A kezdőlap bal alsó részén található élménykapcsolóval válthat Fabricre.
- 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 jelen oktatóanyaghoz tartozó jegyzetfüzet megnyitásához kövesse a Rendszer előkészítése az adatelemzési oktatóanyagokhoz című utasításokat, hogy importálja a jegyzetfüzetet a munkaterületére.
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.
- 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
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
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
Inicializáljon egy
FabricDataFrame
a providers.csv fájl tartalmával:providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv")) providers.head()
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 grafikonja azt mutatja, hogy
Id
határozza megNAME
ésORGANIZATION
(a folytonos nyilak jelzik), ami várható, mivelId
egyedi: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 aId
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
, SPECIALITY
vagy ORGANIZATION
. Érdemes lehet megvizsgálni ezeket a sajátosságokat.
Tekintse meg részletesebben a
ZIP
ésCITY
közötti hozzávetőleges kapcsolatot a SemPylist_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')
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ása a bal oldali
ZIP
értékeit, a jobb oldalon pedig aCITY
é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ó: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()
A diagram azt is mutatja, hogy a
CITY
sorok között, ahol a "DARTHMOUTH" szerepel, kilenc sornak vanZIP
értéke 02747-1262; az egyik sornakZIP
értéke 02747-1242; és egy másik sornakZIP
értéke 02747-2537. A következő kóddal megerősíti ezeket a megfigyeléseket:providers[providers.CITY == 'DARTMOUTH'].ZIP.value_counts()
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
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()
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.Futtassa a
drop_dependency_violations
függvényt aZIP
ésCITY
oszlopokon:providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')
Az
ZIP
ésCITY
kö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.
Kapcsolódó tartalom
Tekintse meg a szemantikai hivatkozás / SemPy egyéb oktatóanyagait:
- oktatóanyag: Funkcionális függőségek elemzése szemantikai mintamodellben
- oktatóanyag: Power BI-mértékek kinyerása és kiszámítása Jupyter-jegyzetfüzetből
- oktatóanyag: Kapcsolatok felderítése szemantikai modellben szemantikai hivatkozással
- oktatóanyag: Kapcsolatok felderítése a Synthea adatkészletben szemantikai hivatkozással
- Oktatóanyag: Az adatok érvényesítése a SemPy és a Great Expectations (GX) segítségével