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ěsto. 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 zjišťovat 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, která je rozšířena 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 Fabric.
Přihlaste se k Microsoft Fabric.
Pomocí přepínače zkušeností v levém dolním rohu domovské stránky přepněte na Fabric.
- V levém navigačním podokně vyberte Pracovní prostory a vyhledejte a vyberte pracovní prostor. Tento pracovní prostor se stane vaším aktuálním pracovním prostorem.
Postupujte podle pokynů v poznámkovém bloku
Tento kurz doprovází soubor poznámkového bloku data_cleaning_functional_dependencies_tutorial.ipynb.
Pokud chcete otevřít doprovodný poznámkový blok pro tento tutoriál, postupujte podle pokynů v části připravte svůj systém pro tutoriály datové vědy a importujte poznámkový blok do svého pracovního prostoru.
Pokud chcete raději zkopírovat a vložit kód z této stránky, můžete vytvořit nový poznámkový blok.
Nezapomeňte před spuštěním kódu připojit lakehouse k poznámkovému bloku.
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í Fabric, 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 malá verze):
download_synthea(which='small')
Prozkoumání dat
Inicializujte
FabricDataFrame
obsahem souboru providers.csv:providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv")) providers.head()
Zkontrolujte problémy s kvalitou dat u funkce
find_dependencies
SemPy vykreslením grafu automaticky rozdetekovaný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čené plnými šipkami), což je očekávané, protožeId
je jedinečné:Ověřte, že
Id
je jedinečný:providers.Id.is_unique
Kód vrátí
True
, aby potvrdil, ž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, že ZIP
také určí 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 NAME
neurčí GENDER
, Id
, SPECIALITY
nebo ORGANIZATION
. Každá z těchto zvláštních vlastností by mohla být za to prozkoumat.
Podívejte se podrobněji na přibližný vztah mezi
ZIP
aCITY
pomocí funkcelist_dependency_violations
SemPy a prohlédněte si tabulkový seznam porušení:providers.list_dependency_violations('ZIP', 'CITY')
Nakreslete graf pomocí
plot_dependency_violations
vizualizační funkce SemPy. 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 pro
ZIP
na levé straně a hodnoty proCITY
na pravé straně. 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
jako "DARTHMOUTH", devět řádků máZIP
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" je jednou spojené s "EAST BOSTON" a jednou s "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", kde se vyskytuje pouze jednou, je mnohem těžší automatické rozlišení bez externích znalostí nebo použití jazykového modelu.
- Někdy jsou předpony jako "West" zkráceny na jedno písmeno "W". Tento problém může být možná opraven jednoduchým nahrazením, pokud všechny výskyty "W" znamenají "West".
- PSČ "02130" odpovídá jednou "BOSTON" a jednou "Jamaica Plain". 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 iniciály:
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 jednou z možných úloh čištění dat je vyřadit řádky, které porušují funkční omezení mezi sloupci v datech, pomocí funkce
drop_dependency_violations
SemPy.Pro každou hodnotu determinantní proměnné funguje
drop_dependency_violations
výběrem nejběžnější hodnoty závislé proměnné a vyřazením 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.Ve sloupcích
ZIP
aCITY
spusťte funkcidrop_dependency_violations
: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ý indikuje, ž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 : Extrahování 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ých odkazů
- Výukový program : Ověřování dat pomocí SemPy a Great Expectations (GX)