Condividi tramite


Rilevare, esplorare e convalidare le dipendenze funzionali nei dati utilizzando il collegamento semantico

Le dipendenze funzionali sono relazioni tra le colonne di una tabella, in cui i valori in una colonna vengono usati per determinare i valori in un'altra colonna. La comprensione di queste dipendenze consente di individuare modelli e relazioni nei dati, che a loro volta possono essere utili per la progettazione delle funzionalità, la pulizia dei dati e le attività di compilazione dei modelli. Le dipendenze funzionali fungono da invariante efficace che consente di trovare e risolvere problemi di qualità dei dati che potrebbero essere difficili da rilevare in caso contrario.

In questo articolo si usa il collegamento semantico per:

  • Trovare le dipendenze tra le colonne di un FabricDataFrame
  • Visualizza le dipendenze
  • Identificare i problemi relativi alla qualità dei dati
  • Visualizzare i problemi di qualità dei dati
  • Applicare vincoli funzionali tra colonne in un set di dati

Prerequisiti

  • Passare all'esperienza di data science disponibile in Microsoft Fabric.
  • Creare un nuovo notebook per copiare/incollare il codice nelle celle.
  • Per Spark 3.4 e versioni successive, il collegamento semantico è disponibile nel runtime predefinito quando si usa Fabric e non è necessario installarlo. Se si sta usando Spark 3.3 o versioni precedenti, o se si vuole eseguire l'aggiornamento alla versione più recente del collegamento semantico, è possibile eseguire il comando: python %pip install -U semantic-link  
  • Aggiungere un lakehouse al notebook.

Per Spark 3.4 e versioni successive, il collegamento semantico è disponibile nel runtime predefinito quando si usa Fabric e non è necessario installarlo. Se si usa Spark 3.3 o versione successiva o se si vuole eseguire l'aggiornamento alla versione più recente di Semantic Link, eseguire questo comando:

%pip install -U semantic-link
``` 

## Find functional dependencies in data

The SemPy `find_dependencies` function detects functional dependencies between the columns of a FabricDataFrame. The function uses a threshold on conditional entropy to discover approximate functional dependencies, where low conditional entropy indicates strong dependence between columns. To make the `find_dependencies` function more selective, you can set a lower threshold on conditional entropy. The lower threshold means that only stronger dependencies will be detected.

This Python code snippet demonstrates how to use `find_dependencies`:

```python
from sempy.fabric import FabricDataFrame
from sempy.dependencies import plot_dependency_metadata
import pandas as pd


df = FabricDataFrame(pd.read_csv("your_data.csv"))

deps = df.find_dependencies()

La funzione find_dependencies restituisce un FabricDataFrame con dipendenze rilevate tra colonne. Un elenco rappresenta le colonne con mapping 1:1. La funzione rimuove anche i bordi transitivi, per tentare di eliminare le potenziali dipendenze.

Quando si specifica l'opzione dropna=True, le righe con valore NaN in una delle colonne vengono eliminate dalla valutazione. Ciò può comportare dipendenze nontransitive, come illustrato in questo esempio:

Un B C
1 1 1
1 1 1
1 NaN 9
2 NaN 2
2 2 2

In alcuni casi, la catena di dipendenze può formare cicli quando si specifica l'opzione dropna=True , come illustrato in questo esempio:

Un B C
1 1 NaN
2 1 NaN
NaN 1 1
NaN 2 1
1 NaN 1
1 NaN 2

Visualizza le dipendenze nei dati

Dopo aver individuato le dipendenze funzionali in un set di dati (usando find_dependencies), è possibile visualizzare le dipendenze con la plot_dependency_metadata funzione . Questa funzione accetta l'oggetto FabricDataFrame risultante da find_dependencies e crea una rappresentazione visiva delle dipendenze tra colonne e gruppi di colonne.

Questo frammento di codice Python illustra come usare plot_dependencies:

from sempy.fabric import FabricDataFrame
from sempy.dependencies import plot_dependency_metadata
from sempy.samples import download_synthea

download_synthea(which='small')

df = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))

deps = df.find_dependencies()
plot_dependency_metadata(deps)

La funzione plot_dependency_metadata genera una visualizzazione che mostra i raggruppamenti 1:1 delle colonne. Le colonne che appartengono a un singolo gruppo vengono inserite in una singola cella. Se non vengono trovati candidati appropriati, viene restituito un FabricDataFrame vuoto.

Screenshot che mostra l'output della funzione plot_dependencies.

Identificare i problemi relativi alla qualità dei dati

I problemi di qualità dei dati possono avere diverse forme, ad esempio valori mancanti, incoerenze o imprecisioni. Identificare e risolvere questi problemi è importante per garantire l'affidabilità e la validità di qualsiasi analisi o modello basato sui dati. Un modo per rilevare i problemi di qualità dei dati consiste nell'esaminare le violazioni delle dipendenze funzionali tra colonne in un set di dati.

La list_dependency_violations funzione consente di identificare le violazioni delle dipendenze funzionali tra le colonne del set di dati. Data una colonna determinante e una colonna dipendente, questa funzione mostra i valori che violano la dipendenza funzionale, insieme al conteggio delle rispettive occorrenze. In questo modo è possibile esaminare le dipendenze approssimative e identificare i problemi di qualità dei dati.

Questo frammento di codice mostra come usare la list_dependency_violations funzione :

from sempy.fabric import FabricDataFrame
from sempy.samples import download_synthea

download_synthea(which='small')

df = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))

violations = df.list_dependency_violations(determinant_col="ZIP", dependent_col="CITY")

In questo esempio, la funzione presuppone una dipendenza funzionale tra le colonne ZIP (determinante) e CITY (dipendente). Se il set di dati presenta problemi di qualità dei dati, ad esempio lo stesso codice postale assegnato a più città, la funzione restituisce i dati con i problemi:

ZIP CITY numero
12345 Boston 2
12345 Seattle 1

Questo output indica che due città diverse (Boston e Seattle) hanno lo stesso valore di CAP (12345). Questo suggerisce un problema di qualità dei dati all'interno del set di dati.

La list_dependency_violations funzione offre altre opzioni che possono gestire i valori mancanti, mostrare i valori mappati ai valori violando i valori, limitare il numero di violazioni restituite e ordinare i risultati in base al conteggio o alla colonna determinante.

L'output list_dependency_violations consente di identificare i problemi di qualità dei dati del set di dati. Tuttavia, è necessario esaminare attentamente i risultati e considerare il contesto dei dati, per determinare il corso di azione più appropriato per risolvere i problemi identificati. Questo approccio potrebbe comportare una maggiore pulizia, convalida o esplorazione dei dati per garantire l'affidabilità e la validità dell'analisi o del modello.

Visualizzare i problemi di qualità dei dati

I problemi di qualità dei dati possono danneggiare l'affidabilità e la validità di qualsiasi analisi o modello basato su tali dati. Identificare e risolvere questi problemi è importante per garantire l'accuratezza dei risultati. Per rilevare i problemi di qualità dei dati, è possibile esaminare le violazioni delle dipendenze funzionali tra colonne in un set di dati. La visualizzazione di queste violazioni può mostrare più chiaramente i problemi e aiutarvi a risolverli in modo più efficace.

La funzione plot_dependency_violations consente di identificare le violazioni delle dipendenze funzionali tra colonne in un set di dati. Data una colonna determinante e una colonna dipendente, questa funzione mostra i valori violanti in un formato grafico, per semplificare la comprensione della natura e della portata dei problemi di qualità dei dati.

Questo frammento di codice mostra come usare la plot_dependency_violations funzione :

from sempy.fabric import FabricDataFrame
from sempy.dependencies import plot_dependency_violations
from sempy.samples import download_synthea

download_synthea(which='small')

df = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))

df.plot_dependency_violations(determinant_col="ZIP", dependent_col="CITY")

In questo esempio, la funzione presuppone una dipendenza funzionale esistente tra le colonne ZIP (determinante) e CITY (dipendente). Se il set di dati presenta problemi di qualità dei dati, ad esempio lo stesso codice POSTALE assegnato a più città, la funzione genera un grafico dei valori violanti.

La plot_dependency_violations funzione offre altre opzioni che possono gestire i valori mancanti, mostrare i valori mappati ai valori violando i valori, limitare il numero di violazioni restituite e ordinare i risultati in base al conteggio o alla colonna determinante.

La plot_dependency_violations funzione genera una visualizzazione che consente di identificare i problemi di qualità dei dati del set di dati. Tuttavia, è necessario esaminare attentamente i risultati e considerare il contesto dei dati, per determinare il corso di azione più appropriato per risolvere i problemi identificati. Questo approccio potrebbe comportare una maggiore pulizia, convalida o esplorazione dei dati per garantire l'affidabilità e la validità dell'analisi o del modello.

Screenshot che mostra l'output della funzione plot_dependency_violations.

Applicare vincoli funzionali

La qualità dei dati è fondamentale per garantire l'affidabilità e la validità di qualsiasi analisi o modello basato su un set di dati. L'applicazione di vincoli funzionali tra colonne in un set di dati può contribuire a migliorare la qualità dei dati. I vincoli funzionali consentono di garantire che le relazioni tra colonne abbiano precisione e coerenza, che possono portare a un'analisi o a risultati del modello più accurati.

La drop_dependency_violations funzione consente di applicare vincoli funzionali tra le colonne di un set di dati. Elimina le righe che violano un determinato vincolo. Data una colonna determinante e una colonna dipendente, questa funzione rimuove le righe con valori non conformi al vincolo funzionale tra le due colonne.

Questo frammento di codice mostra come usare la drop_dependency_violations funzione :

from sempy.fabric import FabricDataFrame
from sempy.samples import download_synthea

download_synthea(which='small')

df = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))

cleaned_df = df.drop_dependency_violations(determinant_col="ZIP", dependent_col="CITY")

In questo caso, la funzione applica un vincolo funzionale tra le colonne ZIP (determinante) e CITY (dipendente). Per ogni valore della determinante, viene selezionato il valore più comune della dipendente e tutte le righe con altri valori vengono escluse. Ad esempio, dato questo set di dati, la riga con CITY=Seattle verrà eliminata e la dipendenza funzionale ZIP -> CITY contiene nell'output:

ZIP CITY
12345 Seattle
12345 Boston
12345 Boston
98765 Baltimore
00000 San Francisco

La drop_dependency_violations funzione fornisce l'opzione verbose per controllare il livello di dettaglio dell'output. Impostando verbose=1è possibile visualizzare il numero di righe eliminate. Un verbose=2 valore mostra l'intero contenuto della riga delle righe eliminate.

La drop_dependency_violations funzione può applicare vincoli funzionali tra le colonne nel set di dati, che consentono di migliorare la qualità dei dati e di ottenere risultati più accurati nell'analisi o nel modello. Tuttavia, è necessario considerare attentamente il contesto dei dati e i vincoli funzionali che si sceglie di applicare, per assicurarsi di non rimuovere accidentalmente informazioni preziose dal set di dati.