Esercitazione: analizzare le dipendenze funzionali in un modello semantico

In questa esercitazione, ci si basa sul lavoro di un analista Power BI, archiviato come modelli semantici (dataset di Power BI). Utilizzando SemPy (anteprima) nel carico di lavoro Fabric Data Science, si analizzano le dipendenze funzionali nelle colonne DataFrame. Questa analisi consente di individuare problemi di qualità dei dati sottili per ottenere informazioni più accurate.

In questa esercitazione apprenderai a:

  • Applicare le conoscenze del dominio per formulare ipotesi sulle dipendenze funzionali in un modello semantico.
  • Acquisire familiarità con i componenti della libreria Python (SemPy) di Semantic Link che si integrano 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 che importano modelli semantici da un workspace di Fabric nel tuo notebook
    • Funzioni che valutano le ipotesi di dipendenza funzionale e identificano le violazioni delle relazioni nei modelli semantici

Prerequisiti

  1. Selezionare Aree di lavoro nel riquadro di spostamento per trovare e selezionare l'area di lavoro. Questa area di lavoro diventa l'area di lavoro corrente.

  2. Scaricare il file Customer Profitability Sample.pbix dal repository GitHub fabric-samples.

  3. Nella tua area di lavoro, seleziona Importa>Report o Report impaginato>da questo computer per caricare il file Customer Profitability Sample.pbix nell'area di lavoro.

Seguire la procedura nel notebook

Il notebook powerbi_dependencies_tutorial.ipynb accompagna questa esercitazione.

Configurare il notebook

Configurare un ambiente notebook con i moduli e i dati necessari.

  1. Usare %pip per installare SemPy da PyPI nel notebook.

    %pip install semantic-link
    
  2. Importare i moduli necessari.

    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. Carica i dati di Power BI in un FabricDataFrame usando la funzione fabric.read_table.

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

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

    Sebbene l'output sembri un DataFrame pandas, questo codice inizializza una struttura dati chiamata FabricDataFrame che aggiunge operazioni a quelle di pandas.

  3. Controllare il tipo di dati di customer.

    type(customer)
    

    L'output mostra che customer è sempy.fabric._dataframe._fabric_dataframe.FabricDataFrame.

  4. Unire gli oggetti customer e stateDataFrame.

    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 è una relazione uno-a-molti tra i valori in due o più colonne di un oggetto DataFrame. Usare queste relazioni per rilevare automaticamente i problemi di qualità dei dati.

  1. Eseguire la funzione find_dependencies di SemPy sull'DataFrame unito per identificare le dipendenze funzionali tra i valori delle colonne.

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

    plot_dependency_metadata(dependencies)
    

    Schermata del grafico dei metadati delle dipendenze.

    Il grafico delle dipendenze funzionali mostra che la Customer colonna determina colonne come City, Postal Codee Name.

    Il grafico non mostra una dipendenza funzionale tra City e Postal Code, probabilmente perché sono presenti molte violazioni nella relazione tra le colonne. Usa la funzione plot_dependency_violations di 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 plot_dependency_violations di SemPy.

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

    Schermata di un grafico che mostra le 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. Una linea collega un Postal Code sul lato sinistro del tracciato a una City sul lato destro dello stesso, se esiste almeno una riga che contiene entrambi i valori. I bordi sono 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".

    Il tracciato mostra anche 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 presentano il valore NA per Postal Code.

  3. Eliminare righe con valori vuoti. Trovare quindi le dipendenze usando la funzione find_dependencies. 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))
    

    Schermata del grafico dei metadati di dipendenza con una soglia di entropia più elevata.

    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, una freccia tratteggiata unisce City e Region, il 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 in Illinois e Nebraska. Tuttavia, Downers 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')
    

    Un cliente, SDI Design, viene visualizzato in due aree: Stati Uniti e Canada. Questo caso potrebbe non essere una violazione semantica, solo insolito. Comunque, vale la pena un aspetto da vicino:

  9. Dare uno sguardo più approfondito al cliente SDI Design:

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

    Un'ulteriore ispezione mostra due clienti diversi di settori diversi con lo stesso nome.

L'analisi esplorativa dei dati e la pulizia dei dati sono iterativi. Ciò che trovi dipende dalle tue domande e dalla tua prospettiva. Il collegamento semantico offre nuovi strumenti per ottenere di più dai dati.

Vedere altre esercitazioni per il collegamento semantico e SemPy: