Sdílet prostřednictvím


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

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

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

  1. 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
    
  2. 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

  1. Inicializace FabricDataFrame obsahu souboru providers.csv :

    providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))
    providers.head()
    
  2. 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)
    

    Snímek obrazovky znázorňující graf funkčních závislostí

    Graf funkčních závislostí ukazuje, že Id určuje NAME a ORGANIZATION (označuje je plná šipka), která je očekávaná, protože Id je jedinečná:

  3. Ověřte, že Id je jedinečný:

    providers.Id.is_unique
    

    Kód se vrátí True k potvrzení, že Id 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 ZIPpodle 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.

  1. Pokud chcete zobrazit tabulkový seznam porušení, podívejte se hlouběji na přibližný vztah mezi ZIP funkcemi a CITYfunkcí SemPy list_dependency_violations :

    providers.list_dependency_violations('ZIP', 'CITY')
    
  2. 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')
    

    Snímek obrazovky znázorňující graf porušení závislostí

    Graf porušení závislostí zobrazuje hodnoty na ZIP levé straně a hodnoty pro CITY 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:

  3. 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()
    
  4. 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()
    
  5. 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

  1. 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()
    
  2. 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.

  3. drop_dependency_violations Spusťte funkci na ZIP sloupcích a CITY sloupcích:

    providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')
    
  4. Uveďte všechna porušení závislostí mezi ZIP a CITY:

    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.

Podívejte se na další kurzy pro sémantický odkaz / SemPy: