Condividi tramite


Esercitazione: analizzare le dipendenze funzionali in un modello semantico

In questa esercitazione si baserà sul lavoro di un analista di Power BI archiviato come modelli semantici (set di dati di Power BI). Usando SemPy (anteprima) nell'esperienza di data science di Synapse in Microsoft Fabric, si analizzano le dipendenze funzionali nelle colonne del 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 estraggono modelli semantici da un'area di lavoro infrastruttura nel 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. Caricare i dati di Power BI in un FabricDataFrame usando la fabric.read_table funzione .

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

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

    Anche se l'output è simile a un dataframe pandas, questo codice inizializza una struttura di dati denominata che FabricDataFrame aggiunge operazioni su 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 customer oggetti 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 semPy nell'oggetto unito DataFrame per identificare le dipendenze funzionali tra i valori di find_dependencies colonna.

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

    plot_dependency_metadata(dependencies)
    

    Screenshot del tracciato 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. 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 plot_dependency_violations di SemPy.

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

    Screenshot di un tracciato 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 hanno 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))
    

    Screenshot del tracciato dei metadati delle dipendenze con una soglia di entropia superiore.

    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: