Kurz: Vyčištění dat pomocí funkčních závislostí
V tomto kurzu použijete funkční závislosti pro čištění dat. Funkční závislost existuje, když jeden sloupec v sémantickém modelu (datová sada Power BI) je funkce jiného sloupce. Například sloupec PSČ může určit hodnoty ve sloupci města . Funkční závislost se projevuje jako relace 1:N mezi hodnotami ve dvou nebo více sloupcích v rámci datového rámce. V tomto kurzu se používá datová sada Synthea , která ukazuje, jak můžou funkční vztahy pomoct zjistit problémy s kvalitou dat.
V tomto kurzu se naučíte:
- Využijte znalosti domény k formulaci hypotéz o funkčních závislostech v sémantickém modelu.
- Seznamte se s komponentami sémantické knihovny Pythonu (SemPy), které pomáhají automatizovat analýzu kvality dat. Mezi tyto komponenty patří:
- FabricDataFrame – struktura podobná knihovně pandas rozšířená o další sémantické informace.
- Užitečné funkce, které automatizují vyhodnocení hypotéz o funkčních závislostech a identifikují porušení vztahů v sémantických modelech.
Požadavky
Získejte předplatné Microsoft Fabric. Nebo si zaregistrujte bezplatnou zkušební verzi Microsoft Fabricu.
Přihlaste se k Microsoft Fabric.
Pomocí přepínače prostředí na levé straně domovské stránky přepněte na prostředí Synapse Datová Věda.
- V levém navigačním podokně vyberte Pracovní prostory , abyste našli a vybrali pracovní prostor. Tento pracovní prostor se stane vaším aktuálním pracovním prostorem.
Sledování v poznámkovém bloku
Tento kurz doprovází poznámkový blok data_cleaning_functional_dependencies_tutorial.ipynb .
Pokud chcete otevřít doprovodný poznámkový blok pro tento kurz, postupujte podle pokynů v části Příprava systému na kurzy datových věd a importujte poznámkový blok do pracovního prostoru.
Pokud byste raději zkopírovali a vložili kód z této stránky, můžete vytvořit nový poznámkový blok.
Než začnete spouštět kód, nezapomeňte k poznámkovému bloku připojit lakehouse.
Nastavení poznámkového bloku
V této části nastavíte prostředí poznámkového bloku s potřebnými moduly a daty.
- Pro Spark 3.4 a vyšší je sémantický odkaz dostupný ve výchozím modulu runtime při použití prostředků infrastruktury a není nutné ho instalovat. Pokud používáte Spark 3.3 nebo novější nebo pokud chcete aktualizovat na nejnovější verzi sémantického odkazu, můžete příkaz spustit:
python %pip install -U semantic-link
Proveďte nezbytné importy modulů, které budete potřebovat později:
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
Stáhněte si ukázková data. Pro účely tohoto kurzu použijete datovou sadu Synthea syntetických lékařských záznamů (pro jednoduchost malou verzi):
download_synthea(which='small')
Prozkoumání dat
Inicializace
FabricDataFrame
obsahu souboru providers.csv :providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv")) providers.head()
Zkontrolujte problémy s kvalitou dat u funkce SemPy
find_dependencies
vykreslením grafu automaticky rozdetectovaných funkčních závislostí:deps = providers.find_dependencies() plot_dependency_metadata(deps)
Graf funkčních závislostí ukazuje, že
Id
určujeNAME
aORGANIZATION
(označuje je plná šipka), která je očekávaná, protožeId
je jedinečná:Ověřte, že
Id
je jedinečný:providers.Id.is_unique
Kód se vrátí
True
k potvrzení, žeId
je jedinečný.
Hloubková analýza funkčních závislostí
Graf funkčních závislostí také ukazuje, že ORGANIZATION
určuje ADDRESS
a ZIP
podle očekávání. Můžete ale očekávat ZIP
, že také určíte CITY
, ale přerušovaná šipka indikuje, že závislost je pouze přibližná a ukazuje na problém s kvalitou dat.
V grafu jsou další zvláštní vlastnosti. Například neurčí GENDER
, NAME
Id
, SPECIALITY
, nebo ORGANIZATION
. Každá z těchto zvláštních vlastností by mohla být za to prozkoumat.
Pokud chcete zobrazit tabulkový seznam porušení, podívejte se hlouběji na přibližný vztah mezi
ZIP
funkcemi aCITY
funkcí SemPylist_dependency_violations
:providers.list_dependency_violations('ZIP', 'CITY')
Nakreslete graf pomocí vizualizační funkce SemPy
plot_dependency_violations
. Tento graf je užitečný, pokud je počet porušení malý:providers.plot_dependency_violations('ZIP', 'CITY')
Graf porušení závislostí zobrazuje hodnoty na
ZIP
levé straně a hodnoty proCITY
pravou stranu. Hrana spojuje PSČ na levé straně grafu s městem na pravé straně, pokud je řádek obsahující tyto dvě hodnoty. Hrany jsou opatřeny poznámkami s počtem takových řádků. Například existují dva řádky se PSČ 02747-1242, jeden řádek s městem "NORTH DARTHMOUTH" a druhý s městem "DARTHMOUTH", jak je znázorněno v předchozím grafu a následujícím kódem:Spuštěním následujícího kódu potvrďte předchozí pozorování, která jste provedli s grafem porušení závislostí:
providers[providers.ZIP == '02747-1242'].CITY.value_counts()
Graf také ukazuje, že mezi řádky, které mají
CITY
hodnotu DARTHMOUTH, máZIP
devět řádků 02747-1262; jeden řádek máZIP
02747-1242; a jeden řádek máZIP
02747-2537. Tyto pozorování potvrdí následujícím kódem:providers[providers.CITY == 'DARTMOUTH'].ZIP.value_counts()
Existují další PSČ přidružené k dartMOUTH, ale tyto PSČ se nezobrazují v grafu porušení závislostí, protože neukazují na problémy s kvalitou dat. Například PSČ 02747-4302 je jedinečně přidružen k "DARTMOUTH" a nezobrazuje se v grafu porušení závislostí. Potvrďte spuštěním následujícího kódu:
providers[providers.ZIP == '02747-4302'].CITY.value_counts()
Shrnutí problémů s kvalitou dat zjištěných v SemPy
Když se vrátíte k grafu porušení závislostí, uvidíte, že v tomto sémantickém modelu existuje několik zajímavých problémů s kvalitou dat:
- Některé názvy měst jsou velká písmena. Tento problém je snadné opravit pomocí řetězcových metod.
- Některé názvy měst mají kvalifikátory (nebo předpony), například "Sever" a "Východ". Například PSČ "2128" se mapuje na "EAST BOSTON" jednou a jednou na "BOSTON". K podobnému problému dochází mezi "NORTH DARTHMOUTH" a "DARTHMOUTH". Tyto kvalifikátory můžete zkusit odstranit nebo namapovat PSČ na město s nejběžnějším výskytem.
- V některých městech existují překlepy, například PITTSFIELD vs. PITTSFILED a NEWBURGPORT vs. NEWBURYPORT. U newburgportu by tento překlep mohl být opraven pomocí nejběžnějšího výskytu. U "PITTSFIELD" je při každém výskytu mnohem obtížnější automatické nejednoznačnosti bez externích
- Někdy jsou předpony jako "West" zkráceny na jedno písmeno "W". Tento problém může být potenciálně opraven jednoduchým nahrazením, pokud všechny výskyty "W" stojí pro "West".
- PSČ "02130" se jednou mapuje na "BOSTON" a "Jamajka Plain" jednou. Tento problém se nedá snadno opravit, ale pokud došlo k více datům, může být mapování na nejběžnější výskyt potenciálním řešením.
Vyčištění dat
Opravte problémy s velkými písmeny tak, že změníte velká písmena na velká písmena:
providers['CITY'] = providers.CITY.str.title()
Znovu spusťte detekci porušení, abyste viděli, že některé nejednoznačnosti jsou pryč (počet porušení je menší):
providers.list_dependency_violations('ZIP', 'CITY')
V tomto okamžiku byste mohli data upřesnit ručně, ale jedním z možných úkolů čištění dat je vyřadit řádky, které porušují funkční omezení mezi sloupci v datech, pomocí funkce SemPy
drop_dependency_violations
.Pro každou hodnotu determinantní proměnné
drop_dependency_violations
funguje výběr nejběžnější hodnoty závislé proměnné a vyřazení všech řádků s jinými hodnotami. Tuto operaci byste měli použít jenom v případě, že máte jistotu, že tato statistická heuristika povede ke správným výsledkům vašich dat. Jinak byste měli napsat vlastní kód, který bude zpracovávat zjištěná porušení podle potřeby.drop_dependency_violations
Spusťte funkci naZIP
sloupcích aCITY
sloupcích:providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')
Uveďte všechna porušení závislostí mezi
ZIP
aCITY
:providers_clean.list_dependency_violations('ZIP', 'CITY')
Kód vrátí prázdný seznam, který označuje, že neexistují žádná další porušení funkčního omezení CITY -> ZIP.
Související obsah
Podívejte se na další kurzy pro sémantický odkaz / SemPy:
- Kurz: Analýza funkčních závislostí v ukázkovém sémantickém modelu
- Kurz: Extrakce a výpočet měr Power BI z poznámkového bloku Jupyter
- Kurz: Zjišťování relací v sémantickém modelu pomocí sémantického odkazu
- Kurz: Zjišťování relací v datové sadě Synthea pomocí sémantického odkazu
- Kurz: Ověření dat pomocí semPy a velkých očekávání (GX)