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.
A kezdőlap bal oldalán található élménykapcsolóval válthat a Synapse Adattudomány felületre.
- 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.
- 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 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
Inicializáljon egy
FabricDataFrame
fájlt 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
meghatározzaNAME
ésORGANIZATION
(a szilárd nyilak jelzik), ami várható, mivelId
egyedi:Ellenőrizze, hogy egyedi-e
Id
:providers.Id.is_unique
A kód visszatér, hogy megerősítse
True
, hogyId
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
Id
SPECIALITY
ORGANIZATION
vagy nem határozza meg.GENDER
Érdemes lehet megvizsgálni ezeket a sajátosságokat.
Tekintse meg részletesebben az és
CITY
– a SemPy függvényévellist_dependency_violations
– közöttiZIP
hozzávetőleges kapcsolatot a szabálysértések táblázatos listájának megtekintéséhez:providers.list_dependency_violations('ZIP', 'CITY')
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')
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ékeketCITY
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ó: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 "DARTHMUT" néven szereplő sorok
CITY
között kilenc sorZIP
02747-1262; egy sorZIP
02747-1242; egy sorZIP
pedig 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ó 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
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()
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.Futtassa a függvényt
drop_dependency_violations
az ésCITY
azZIP
oszlopokon:providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')
Listázz minden függőségi szabálysértést a következők
CITY
kö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.
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ás használatával
- Oktatóanyag: Kapcsolatok felderítése a Synthea-adatkészletben szemantikai hivatkozás használatával
- Oktatóanyag: Adatok ellenőrzése a SemPy és a Nagy elvárások (GX) használatával