Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Usare le dipendenze funzionali per pulire i dati. Esiste una dipendenza funzionale quando una colonna in un modello semantico (un set di dati di Power BI) dipende da un'altra colonna. Ad esempio, una ZIP code colonna può determinare il valore in una city colonna. Una dipendenza funzionale viene visualizzata come relazione uno-a-molti tra i valori in due o più colonne di un oggetto DataFrame. Questa esercitazione usa il set di dati Synthea per illustrare in che modo le dipendenze funzionali consentono di rilevare i problemi di qualità dei dati.
In questa esercitazione si apprenderà come:
- Applicare le conoscenze di dominio per formare ipotesi sulle dipendenze funzionali in un modello semantico.
- Acquisire familiarità con i componenti della libreria Semantic Link Python (SemPy) che automatizzano l'analisi della qualità dei dati. Questi componenti includono:
-
FabricDataFrame— una struttura simile a pandas con informazioni semantiche aggiuntive. - Funzioni che automatizzano la valutazione delle ipotesi sulle dipendenze funzionali e identificano le violazioni nei modelli semantici.
-
Prerequisiti
Ottieni una sottoscrizione Microsoft Fabric . In alternativa, iscriviti per una prova gratuita di Microsoft Fabric.
Accedi a Microsoft Fabric.
Usare l'interruttore dell'esperienza in basso a sinistra della home page per passare a Fabric.
- Selezionare Aree di lavoro nel riquadro di spostamento, quindi selezionare l'area di lavoro per impostarla come area di lavoro corrente.
Seguire la procedura nel notebook
Usare il notebook data_cleaning_functional_dependencies_tutorial.ipynb per seguire questa esercitazione.
Per aprire il notebook di accompagnamento per questa esercitazione, seguire le istruzioni riportate in Preparare il sistema per le esercitazioni di data science per importare il notebook nell'area di lavoro.
Se preferisci copiare e incollare il codice da questa pagina, puoi creare un nuovo notebook.
Assicurati di collegare una lakehouse al notebook prima di iniziare l'esecuzione del codice.
Configurare il notebook
In questa sezione viene configurato un ambiente notebook.
Controllare la versione di Spark. Se si usa Spark 3.4 o versione successiva in Microsoft Fabric, Il collegamento semantico è incluso per impostazione predefinita, quindi non è necessario installarlo. Se si usa Spark 3.3 o versione precedente o si vuole eseguire l'aggiornamento al collegamento semantico più recente, eseguire il comando seguente.
%pip install -U semantic-linkImportare i moduli usati in questo notebook.
import pandas as pd import sempy.fabric as fabric from sempy.fabric import FabricDataFrame from sempy.dependencies import plot_dependency_metadataScaricare i dati di esempio. In questa esercitazione usare il set di dati Synthea di record medici sintetici (versione ridotta per semplicità).
download_synthea(which='small')
Esplora i dati
Inizializzare un
FabricDataFrameoggetto con il contenuto del file providers.csv .providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv")) providers.head()Verificare la presenza di problemi di qualità dei dati con la funzione di
find_dependenciesSemPy tracciando un grafico delle dipendenze funzionali rilevate automaticamente.deps = providers.find_dependencies() plot_dependency_metadata(deps)Il grafico mostra che
IddeterminaNAMEeORGANIZATION. Questo risultato è previsto perchéIdè univoco.Verificare che
Idsia univoco.providers.Id.is_uniqueIl codice restituisce
Trueper verificare cheIdsia univoco.
Analizzare in profondità le dipendenze funzionali
Il grafico delle dipendenze funzionali mostra anche che ORGANIZATION determina ADDRESS e ZIP, come previsto. Tuttavia, ma è possibile che ZIP determini anche CITY, la freccia tratteggiata indica che la dipendenza è solo approssimativa, evidenziando un problema di qualità dei dati.
Ci sono altre peculiarità nel grafico. Ad esempio, NAME non determina GENDER, Id, SPECIALITYo ORGANIZATION. Ognuna di queste peculiarità potrebbe essere utile indagare.
- Esaminare in modo più approfondito la relazione approssimativa tra
ZIPeCITYusando la funzione dilist_dependency_violationsSemPy per elencare le violazioni:
providers.list_dependency_violations('ZIP', 'CITY')
- Disegnare un grafico con la funzione di visualizzazione
plot_dependency_violationsdi SemPy. Questo grafico è utile se il numero di violazioni è ridotto:
providers.plot_dependency_violations('ZIP', 'CITY')
Il grafico delle violazioni delle dipendenze mostra i valori per ZIP sul lato sinistro e i valori per CITY sul lato destro. Un bordo collega un codice postale sul lato sinistro del tracciato con una città sul lato destro se è presente una riga che contiene questi due valori. I bordi vengono annotati con il conteggio di tali righe. Ad esempio, sono presenti due righe con codice postale 02747-1242, una riga con città "NORTH DARTHMOUTH" e l'altra con città "DARTHMOUTH", come illustrato nel tracciato precedente e nel codice seguente:
- Verificare le osservazioni del tracciato eseguendo il codice seguente:
providers[providers.ZIP == '02747-1242'].CITY.value_counts()
Il tracciato mostra anche che, tra le righe che hanno
CITYcome "DARTHMOUTH", nove righe hanno unZIPvalore 02747-1262. Una riga ha unZIPvalore pari a 02747-1242. Una riga ha unZIPvalore 02747-2537. Verificare queste osservazioni con il codice seguente:providers[providers.CITY == 'DARTHMOUTH'].ZIP.value_counts()Esistono altri codici postali associati a "DARTMOUTH", ma questi codici postali non vengono visualizzati nel grafico delle violazioni delle dipendenze perché non indicano problemi di qualità dei dati. Ad esempio, il codice postale "02747-4302" è associato in modo univoco a "DARTMOUTH" e non viene visualizzato nel grafico delle violazioni delle dipendenze. Verificare eseguendo il codice seguente:
providers[providers.ZIP == '02747-4302'].CITY.value_counts()
Riepilogare i problemi di qualità dei dati rilevati con SemPy
Il grafico delle violazioni delle dipendenze mostra diversi problemi di qualità dei dati in questo modello semantico:
- Alcuni nomi di città sono maiuscoli. Usare i metodi stringa per risolvere questo problema.
- Alcuni nomi di città hanno qualificatori (o prefissi), ad esempio "North" e "East". Ad esempio, il codice postale "2128" esegue il mapping a "EAST BOSTON" una sola volta e a "BOSTON". Si verifica un problema simile tra "NORTH DARTMOUTH" e "DARTMOUTH". Eliminare questi qualificatori o mappare i codici POSTALI alla città con l'occorrenza più comune.
- Ci sono errori di digitazioni in alcuni nomi di città, ad esempio "PITTSFIELD" e "PITTSFILED" e "NEWBURGPORT" e "NEWBURYPORT". Per "NEWBURGPORT", correggere questo errore di digitamento usando l'occorrenza più comune. Per "PITTSFIELD", con una sola occorrenza, la disambiguazione automatica è molto più difficile senza conoscenze esterne o un modello linguistico.
- In alcuni casi, i prefissi come "West" sono abbreviati con la singola lettera "W". Sostituire "W" con "West" se tutte le occorrenze di "W" sono "West".
- Il codice postale "02130" è mappato a "BOSTON" una volta e "Giamaica Plain" una volta. Questo problema non è facile da risolvere. Con più dati, eseguire il mapping all'occorrenza più comune.
Pulire i dati
Correggere la combinazione di maiuscole e minuscole modificando i valori in lettere maiuscole/minuscole del titolo.
providers['CITY'] = providers.CITY.str.title()Eseguire di nuovo il rilevamento delle violazioni per verificare che siano presenti meno ambiguità.
providers.list_dependency_violations('ZIP', 'CITY')
Perfezionare i dati manualmente o eliminare righe che violano i vincoli funzionali tra le colonne usando la funzione di drop_dependency_violations SemPy.
Per ogni valore della variabile determinante, drop_dependency_violations seleziona il valore più comune della variabile dipendente e elimina tutte le righe con altri valori. Applicare questa operazione solo se si è certi che questa euristica statistica porti a risultati corretti per i dati. In caso contrario, scrivere codice personalizzato per gestire le violazioni rilevate.
Eseguire la
drop_dependency_violationsfunzione nelleZIPcolonne eCITY.providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')Elencare eventuali violazioni delle dipendenze tra
ZIPeCITY.providers_clean.list_dependency_violations('ZIP', 'CITY')
Il codice restituisce un elenco vuoto per indicare che non sono presenti altre violazioni del vincolo ZIP -> CITYfunzionale .
Contenuto correlato
Vedere altre esercitazioni per il collegamento semantico o SemPy:
- Esercitazione: Analizzare le dipendenze funzionali in un modello semantico di esempio
- esercitazione : Estrarre e calcolare le misure di Power BI da un notebook di Jupyter
- Esercitazione: Individuare le relazioni in un modello semantico usando il collegamento semantico
- Esercitazione: Individuare le relazioni nel set di dati Synthea usando il collegamento semantico
- Esercitazione: Convalidare i dati usando SemPy e Great Expectations (GX)