Condividi tramite


Esercitazione: Analizzare le dipendenze funzionali in un modello semantico

In questa esercitazione si basa sul lavoro precedente svolto da un analista di Power BI e archiviato sotto forma di modelli semantici (set di dati di Power BI). Usando SemPy (anteprima) nell'esperienza di data science di Synapse all'interno di Microsoft Fabric, si analizzano le dipendenze funzionali presenti nelle colonne di un dataframe. Questa analisi consente di individuare problemi di qualità dei dati non intermedi per ottenere informazioni più accurate.

In questa esercitazione apprenderai a:

  • Applicare le conoscenze di dominio per formulare ipotesi sulle dipendenze funzionali in un modello semantico.
  • Acquisire familiarità con i componenti della libreria Python (SemPy) del collegamento semantico che supportano l'integrazione con Power BI e consentono di automatizzare l'analisi della qualità dei dati. Questi componenti includono:
    • FabricDataFrame: struttura simile a pandas migliorata con informazioni semantiche aggiuntive.
    • Funzioni utili per il pull di modelli semantici da un'area di lavoro infrastruttura nel notebook.
    • Funzioni utili che automatizzano la valutazione delle ipotesi sulle dipendenze funzionali e che identificano le violazioni delle relazioni nei modelli semantici.

Prerequisiti

Seguire la procedura nel notebook

Il notebook powerbi_dependencies_tutorial.ipynb accompagna questa esercitazione.

Per aprire il notebook a accompagnamento per questa esercitazione, seguire le istruzioni riportate in Preparare il sistema per le esercitazioni sull'analisi scientifica dei dati per importare il notebook nell'area di lavoro.

Se si preferisce copiare e incollare il codice da questa pagina, è possibile creare un nuovo notebook.

Assicurarsi di collegare un lakehouse al notebook prima di iniziare a eseguire il codice.

Configurare il notebook

In questa sezione viene configurato un ambiente notebook con i moduli e i dati necessari.

  1. Eseguire l'installazione SemPy da PyPI usando la %pip funzionalità di installazione in linea all'interno del notebook:

    %pip install semantic-link
    
  2. Eseguire le importazioni necessarie di moduli necessari in un secondo momento:

    import sempy.fabric as fabric
    from sempy.dependencies import plot_dependency_metadata
    

Caricare e pre-elaborare i dati

Questa esercitazione usa un modello semantico di esempio standard Customer Profitability Sample.pbix. Per una descrizione del modello semantico, vedere Esempio di redditività dei clienti per Power BI.

  1. Caricare i dati di Power BI in FabricDataFrames usando la funzione di read_table SemPy:

    dataset = "Customer Profitability Sample"
    customer = fabric.read_table(dataset, "Customer")
    customer.head()
    
  2. Caricare la State tabella in un FabricDataFrame:

    state = fabric.read_table(dataset, "State")
    state.head()
    

    Mentre l'output di questo codice è simile a un dataframe pandas, è stata effettivamente inizializzata una struttura di dati denominata che FabricDataFrame supporta alcune operazioni utili su pandas.

  3. Controllare il tipo di dati di customer:

    type(customer)
    

    L'output conferma che customer è di tipo sempy.fabric._dataframe._fabric_dataframe.FabricDataFrame.'

  4. Unire i customer dataframe e state :

    customer_state_df = customer.merge(state, left_on="State", right_on="StateCode",  how='left')
    customer_state_df.head()
    

Identificare le dipendenze funzionali

Una dipendenza funzionale si manifesta come una relazione uno-a-molti tra i valori in due o più colonne all'interno di un dataframe. Queste relazioni possono essere usate per rilevare automaticamente i problemi di qualità dei dati.

  1. Eseguire la funzione semPy find_dependencies nel dataframe unito per identificare eventuali dipendenze funzionali esistenti tra i valori nelle colonne:

    dependencies = customer_state_df.find_dependencies()
    dependencies
    
  2. Visualizzare le dipendenze identificate usando la funzione di plot_dependency_metadata SemPy:

    plot_dependency_metadata(dependencies)
    

    Screenshot che mostra il tracciato dei metadati delle dipendenze.

    Come previsto, il grafico delle dipendenze funzionali mostra che la Customer colonna determina alcune colonne come City, Postal Codee Name.

    Sorprendentemente, il grafico non mostra una dipendenza funzionale tra City e Postal Code, probabilmente perché esistono molte violazioni nelle relazioni tra le colonne. È possibile usare la funzione di plot_dependency_violations SemPy per visualizzare le violazioni delle dipendenze tra colonne specifiche.

Esplorare i dati per i problemi di qualità

  1. Disegnare un grafico con la funzione di visualizzazione di plot_dependency_violations SemPy.

    customer_state_df.plot_dependency_violations('Postal Code', 'City')
    

    Screenshot che mostra il tracciato delle violazioni delle dipendenze.

    Il grafico delle violazioni delle dipendenze mostra i valori per Postal Code sul lato sinistro e i valori per City sul lato destro. Un bordo collega un oggetto Postal Code sul lato sinistro con un City oggetto sul lato destro se è presente una riga che contiene questi due valori. I bordi vengono annotati con il conteggio di tali righe. Ad esempio, ci sono due righe con codice postale 20004, una con città "North Tower" e l'altra con città "Washington".

    Inoltre, il tracciato mostra alcune violazioni e molti valori vuoti.

  2. Confermare il numero di valori vuoti per Postal Code:

    customer_state_df['Postal Code'].isna().sum()
    

    50 righe hanno NA per il codice postale.

  3. Eliminare righe con valori vuoti. Trovare quindi le dipendenze usando la find_dependencies funzione . Si noti il parametro aggiuntivo verbose=1 che offre un'occhiata ai lavori interni di SemPy:

    customer_state_df2=customer_state_df.dropna()
    customer_state_df2.find_dependencies(verbose=1)
    

    L'entropia condizionale per Postal Code e City è 0,049. Questo valore indica che sono presenti violazioni delle dipendenze funzionali. Prima di correggere le violazioni, aumentare la soglia sull'entropia condizionale dal valore predefinito di 0.01 a 0.05, solo per visualizzare le dipendenze. Le soglie inferiori comportano un minor numero di dipendenze (o una selettività superiore).

  4. Aumentare la soglia per l'entropia condizionale dal valore predefinito di 0.01 a 0.05:

    plot_dependency_metadata(customer_state_df2.find_dependencies(threshold=0.05))
    

    Tracciato dei metadati delle dipendenze con una soglia superiore per l'entropia.

    Se si applica la conoscenza del dominio di quale entità determina i valori di altre entità, questo grafico delle dipendenze sembra accurato.

  5. Esplorare altri problemi di qualità dei dati rilevati. Ad esempio, un join City di frecce tratteggiate e Region, che indica che la dipendenza è solo approssimativa. Questa relazione approssimativa potrebbe implicare che esiste una dipendenza funzionale parziale.

    customer_state_df.list_dependency_violations('City', 'Region')
    
  6. Esaminare in modo più approfondito ognuno dei casi in cui un valore nonempty Region causa una violazione:

    customer_state_df[customer_state_df.City=='Downers Grove']
    

    Il risultato mostra la città di Downers Grove che si è verificata in Illinois e Nebraska. Tuttavia, Downer's Grove è una città dell'Illinois, non nebraska.

  7. Dai un'occhiata alla città di Fremont:

    customer_state_df[customer_state_df.City=='Fremont']
    

    C'è una città chiamata Fremont in California. Tuttavia, per il Texas, il motore di ricerca restituisce Premont, non Fremont.

  8. È anche sospetto vedere le violazioni della dipendenza tra Name e Country/Region, come indicato dalla linea punteggiata nel grafico originale delle violazioni delle dipendenze (prima di eliminare le righe con valori vuoti).

    customer_state_df.list_dependency_violations('Name', 'Country/Region')
    

    Sembra che un cliente, SDI Design sia presente in due aree, Stati Uniti e Canada. Questa occorrenza può non essere una violazione semantica, ma può essere semplicemente un caso non comune. Comunque, vale la pena dare un'occhiata:

  9. Esaminare più in dettaglio la progettazione SDI del cliente:

    customer_state_df[customer_state_df.Name=='SDI Design']
    

    Un'ulteriore ispezione mostra che sono in realtà due clienti diversi (da settori diversi) con lo stesso nome.

L'analisi esplorativa dei dati è un processo interessante, quindi è la pulizia dei dati. C'è sempre qualcosa che i dati nascondono, a seconda di come si esaminano, cosa si vuole chiedere e così via. Il collegamento semantico offre nuovi strumenti che è possibile usare per ottenere di più con i dati.

Vedere altre esercitazioni per il collegamento semantico/SemPy: