Jaa


Opetusohjelma: Funktionaalisia riippuvuuksia sisältävien tietojen siistiminen

Tässä opetusohjelmassa opit käyttämään funktionaalisia riippuvuuksia tietojen puhdistamiseen. Toiminnallinen riippuvuus on olemassa, kun semanttisen mallin (Power BI -tietojoukko) yksi sarake on toisen sarakkeen funktio. Postinumerosarake voi esimerkiksi määrittää kaupunkisarakkeen arvot. Toiminnallinen riippuvuus ilmenee yksi moneen -suhteena kahden tai useamman DataFrame-kehyksen sarakkeen arvojen välillä. Tässä opetusohjelmassa käytetään Synthea-tietojoukkoa näyttämään, miten toiminnalliset suhteet voivat auttaa havaitsemaan tietojen laatuun liittyviä ongelmia.

Tässä opetusohjelmassa opit:

  • Käytä toimialuetietoa semanttisen mallin toiminnallisia riippuvuuksia koskevien hypoteesien muotoilemiseen.
  • Tutustu semanttisen linkin Python-kirjaston (SemPy) komponentteihin, jotka auttavat tietojen laadun analyysin automatisoinnissa. Näitä osia ovat seuraavat:
    • FabricDataFrame – pandas-kaltainen rakenne, joka on parannettu semanttisten lisätietojen avulla.
    • Hyödylliset funktiot, jotka automatisoivat oletuksia toiminnallisista riippuvuuksista ja jotka tunnistavat semanttisten mallien suhteiden rikkomuksia.

Edellytykset

  • Etsi ja valitse työtila valitsemalla vasemmasta siirtymisruudusta Työtilat . Tästä työtilasta tulee nykyinen työtilasi.

Seuraa mukana muistikirjassa

data_cleaning_functional_dependencies_tutorial.ipynb-muistikirja on tämän opetusohjelman mukana.

Jos haluat avata tämän opetusohjelman liitteenä olevan muistikirjan, tuo muistikirja työtilaasi noudattamalla ohjeita kohdassa Järjestelmän valmisteleminen datatieteen opetusohjelmia varten.

Jos haluat kopioida ja liittää koodin tältä sivulta, voit luoda uuden muistikirjan.

Muista liittää lakehouse muistikirjaan ennen kuin aloitat koodin suorittamisen.

Muistikirjan asettaminen

Tässä osiossa määrität muistikirjaympäristön, joka sisältää tarvittavat moduulit ja tiedot.

  1. Spark 3.4:ssä ja tätä uudemmat versioissa semanttinen linkki on käytettävissä oletusarvoisessa suorituspalvelussa Fabricia käytettäessä, eikä sitä tarvitse asentaa. Jos käytät Spark 3.3:a tai uudempaa versiota tai haluat päivittää semanttisen linkin uusimpaan versioon, voit suorittaa komennon:

python %pip install -U semantic-link  

  1. Suorita myöhemmin tarvittavien moduulien tuonti:

    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. Hae mallitiedot. Tässä opetusohjelmassa käytetään synteettisten potilastietojen Synthea-tietojoukkoa (pieni versio selvyyden vuoksi):

    download_synthea(which='small')
    

Tietojen tutkiminen

  1. Alusta -FabricDataFramearvo providers.csv tiedoston sisällöllä:

    providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))
    providers.head()
    
  2. Tarkista SemPy-funktion find_dependencies tietojen laatuongelmat piirtämällä automaattisesti havaittujen toiminnallisten riippuvuuksien kaavio:

    deps = providers.find_dependencies()
    plot_dependency_metadata(deps)
    

    Näyttökuva, jossa näkyy toiminnallisten riippuvuuksien kaavio.

    Funktionaalisten riippuvuuksien kaavio näyttää, että Id määrittää NAME ja ORGANIZATION (ilmaistuna kiinteillä nuolilla), mikä on odotettavissa, koska Id se on ainutlaatuinen:

  3. Vahvista, että on Id yksilöivä:

    providers.Id.is_unique
    

    Koodi palaa True vahvistamaan, että se Id on yksilöivä.

Analysoi funktionaalisia riippuvuuksia perusteellisesti

Funktionaalisten riippuvuuksien kaavio näyttää myös, että ORGANIZATION määrittää ADDRESS - ja ZIP-kohteen odotetulla tavalla. Saatat kuitenkin myös ZIP päätellä CITYkohteen , mutta katkoviivanuoli ilmaisee, että riippuvuus on vain likimääräinen ja osoittaa tietojen laatuun ongelmaan.

Kaaviossa on muita erikoisuuksia. Esimerkiksi ei määritä kohdetta NAME , , SPECIALITYId, tai .ORGANIZATIONGENDER Kaikkia näitä erikoisuuksia kannattaa tutkia.

  1. Tarkastele tarkemmin kohteiden ja CITYvälistä ZIP likimääräistä suhdetta käyttämällä SemPy-funktiotalist_dependency_violations, niin näet taulukkomuotoisen luettelon rikkomuksista:

    providers.list_dependency_violations('ZIP', 'CITY')
    
  2. Piirrä kaavio SemPy:n visualisointifunktiolla plot_dependency_violations . Tästä kaaviosta on hyötyä, jos rikkomusten määrä on pieni:

    providers.plot_dependency_violations('ZIP', 'CITY')
    

    Näyttökuva, jossa näkyy riippuvuusrikkomusten kaavio.

    Riippuvuusrikkomusten kaaviossa näkyvät vasemmalla puolella olevat ZIP arvot ja oikealla puolella olevat arvot CITY . Reunassa on postinumero, joka on kaavion vasemmalla puolella ja jossa kaupunki on oikealla puolella, jos rivi sisältää nämä kaksi arvoa. Reunoilla on merkintä tällaisten rivien määrällä. Postinumerolla 02747-1242 on esimerkiksi kaksi riviä, joista toisessa on kaupunki "NORTH DARTHMOUTH" ja toisessa kaupunki "DARTHMOUTH", kuten edellisessä kaaviossa ja seuraavassa koodissa on esitetty:

  3. Vahvista edelliset havainnot, jotka olet tehnyt riippuvuusrikkomusten kaaviosta, suorittamalla seuraava koodi:

    providers[providers.ZIP == '02747-1242'].CITY.value_counts()
    
  4. Juoni osoittaa myös, että riveillä, joissa on CITY "DARTHMOUTH", yhdeksällä rivillä on ZIP 02747-1262, yhdellä rivillä on ZIP 02747-1242 ja yhdellä rivillä on ZIP 02747-2537. Vahvistaa nämä havainnot seuraavalla koodilla:

    providers[providers.CITY == 'DARTMOUTH'].ZIP.value_counts()
    
  5. On olemassa muita postinumeroita, jotka liittyvät DARTMOUTH-tiedostoon, mutta näitä postinumeroita ei näytetä riippuvuusrikkomusten kaaviossa, koska ne eivät viittaa tietojen laatuun liittyviin ongelmiin. Esimerkiksi postinumero "02747-4302" liittyy yksilöllisesti kohteeseen "DARTMOUTH", eikä sitä näy riippuvuusrikkomusten kaaviossa. Vahvista suorittamalla seuraava koodi:

    providers[providers.ZIP == '02747-4302'].CITY.value_counts()
    

SemPy-funktiolla havaittujen tietojen laatuongelmien yhteenveto

Kun palaat riippuvuusrikkomusten kaavioon, huomaat, että tässä semanttisessa mallissa on useita kiinnostavia tietojen laatuun liittyviä ongelmia:

  • Jotkin kaupunkien nimet ovat kaikki isoja kirjaimia. Tämä ongelma on helppo korjata merkkijonomenetelmillä.
  • Joillakin kaupunkien nimillä on tarkenneet (tai etuliitteet), kuten "Pohjoinen" ja "Itä". Esimerkiksi postinumero "2128" yhdistetään kerran "EAST BOSTON" -arvoon ja kerran "BOSTON"-arvoon. Samantapaista ongelmaa esiintyy "NORTH DARTHMOUTHIN" ja "DARTHMOUTHIN" välillä. Voit yrittää pudottaa tarkenteet tai yhdistää postinumerot kaupunkiin yleisimmän esiintymän avulla.
  • Joissakin kaupungeissa on kirjoitusvirheitä, kuten "PITTSFIELD" vs. "PITTSFILED" ja "NEWBURGPORT vs. "NEWBURYPORT". "NEWBURGPORT"-funktiolle tämä kirjoitusvirhe voidaan korjata käyttämällä yleisintä esiintymää. Jos kohteen "PITTSFIELD" esiintymä on vain yksi, automaattinen selvitys on huomattavasti vaikeampaa ilman ulkoista tietoa tai kielimallin käyttöä.
  • Joskus "West"-etuliitteet lyhennetään yksittäiseksi kirjaimeksi "W". Tämä ongelma voidaan mahdollisesti korjata yksinkertaisella korvaamisella, jos kaikki "W"-esiintymät tarkoittavat "West"-kirjainta.
  • Postinumero 02130 yhdistää kerran "BOSTONIIN" ja "Jamaika Plainiin" kerran. Tätä ongelmaa ei ole helppo korjata, mutta jos tietoja olisi enemmän, yleisimmän esiintymän yhdistäminen voisi olla mahdollinen ratkaisu.

Tietojen siistiminen

  1. Korjaa isot kirjaimet muuttamalla kaikki isot kirjaimet otsikkoon:

    providers['CITY'] = providers.CITY.str.title()
    
  2. Suorita rikkomuksen havaitseminen uudelleen nähdäksesi, että joitakin moniselitteisyyksiä on poistettu (rikkomusten määrä on pienempi):

    providers.list_dependency_violations('ZIP', 'CITY')
    

    Tässä vaiheessa tietoja voi tarkentaa manuaalisesti, mutta yksi mahdollinen tietojen puhdistustehtävä on pudottaa rivejä, jotka rikkovat tietojen sarakkeiden välisiä toiminnallisia rajoituksia SemPy-funktion drop_dependency_violations avulla.

    Kunkin määräävän muuttujan drop_dependency_violations arvon kohdalla se toimii poimimalla riippuvaisen muuttujan yleisimmän arvon ja pudottamalla kaikki rivit muiden arvojen kanssa. Sinun tulisi käyttää tätä toimintoa vain, jos olet varma, että tämä tilastollinen heuristiikko johtaa oikeisiin tuloksiin tiedoillesi. Muussa tapauksessa sinun tulee kirjoittaa oma koodi, jotta voit käsitellä tunnistettuja rikkomuksia tarpeen mukaan.

  3. Suorita funktio - drop_dependency_violations ja CITY -ZIPsarakkeissa:

    providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')
    
  4. Luettele and-funktion väliset ZIP riippuvuusloukkaukset CITY:

    providers_clean.list_dependency_violations('ZIP', 'CITY')
    

    Koodi palauttaa tyhjän luettelon, joka osoittaa, että toiminnallista rajoitetta CITY -> ZIP ei enää rikota.

Katso muut opetusohjelmat semanttisesta linkistä /SemPy:stä: