Compartir a través de


Tutorial: Análisis de dependencias funcionales en un modelo semántico

En este tutorial, se basa en el trabajo anterior realizado por un analista de Power BI y se almacena en forma de modelos semánticos (conjuntos de datos de Power BI). Mediante el uso de SemPy (versión preliminar) en la experiencia de ciencia de datos de Synapse en Microsoft Fabric, se analizan las dependencias funcionales que existen en columnas de un DataFrame. Este análisis ayuda a detectar problemas de calidad de datos no triviales para obtener información más precisa.

En este tutorial, aprenderá a:

  • Aplique conocimientos de dominio para formular hipótesis sobre las dependencias funcionales en un modelo semántico.
  • Familiarícese con los componentes de la biblioteca de Python del vínculo semántico (SemPy) que admiten la integración con Power BI y ayudan a automatizar el análisis de calidad de los datos. Estos componentes incluyen:
    • FabricDataFrame: una estructura similar a Pandas mejorada con información semántica adicional.
    • Funciones útiles ara extraer modelos semánticos de un área de trabajo de Fabric en el cuaderno.
    • Funciones útiles que automatizan la evaluación de hipótesis sobre dependencias funcionales y que identifican infracciones de relaciones en los modelos semánticos.

Prerrequisitos

  • Obtenga una suscripción para Microsoft Fabric . También puede registrarse para obtener una evaluación gratuita de Microsoft Fabric.

  • Inicie sesión en Microsoft Fabric.

  • Use el conmutador de experiencia en el lado izquierdo de la página principal para cambiar a la experiencia de ciencia de datos de Synapse.

    Captura de pantalla del menú del conmutador de experiencia, en la que se muestra dónde seleccionar Ciencia de datos.

Seguimiento en el cuaderno

El cuaderno powerbi_relationships_tutorial.ipynb acompaña a este tutorial.

Para abrir el cuaderno complementario para este tutorial, siga las instrucciones de Preparar el sistema para tutoriales de ciencia de datos, para importar el cuaderno al área de trabajo.

Si prefiere copiar y pegar el código de esta página, puede crear un cuaderno nuevo.

Asegúrese de adjuntar una instancia de lakehouse al cuaderno antes de empezar a ejecutar código.

Configuración del cuaderno

En esta sección, configurará un entorno de cuaderno con los módulos y datos necesarios.

  1. Instale SemPy desde PyPI mediante la funcionalidad de instalación en línea %pip en el cuaderno:

    %pip install semantic-link
    
  2. Realice las importaciones necesarias de módulos que necesitará más adelante:

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

Carga y preprocesamiento de los datos

En este tutorial se usa un modelo semántico de ejemplo estándar Customer Profitability Sample.pbix. Para obtener una descripción del modelo semántico, consulte ejemplo de rentabilidad del cliente para Power BI.

  1. Cargue los datos de Power BI en FabricDataFrames mediante la función read_table de SemPy:

    dataset = "Customer Profitability Sample"
    customer = fabric.read_table(dataset, "Customer")
    customer.head()
    
  2. Cargue la tabla State en un FabricDataFrame:

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

    Aunque la salida de este código es similar a un DataFrame de Pandas, en realidad ha inicializado una estructura de datos denominada FabricDataFrame que admite algunas operaciones útiles sobre Pandas.

  3. Compruebe el tipo de datos de customer:

    type(customer)
    

    La salida confirma que customer es de tipo sempy.fabric._dataframe._fabric_dataframe.FabricDataFrame.

  4. Únase al customer y state DataFrames:

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

Identificación de dependencias funcionales

Una dependencia funcional se manifiesta como una relación uno a varios entre los valores de dos columnas (o más) dentro de un DataFrame. Estas relaciones se pueden usar para detectar automáticamente problemas de calidad de datos.

  1. Ejecute la función find_dependencies de SemPy en el DataFrame combinado para identificar las dependencias funcionales existentes entre los valores de las columnas:

    dependencies = customer_state_df.find_dependencies()
    dependencies
    
  2. Visualice las dependencias identificadas mediante la función plot_dependency_metadata de SemPy:

    plot_dependency_metadata(dependencies)
    

    Captura de pantalla que muestra el trazado de metadatos de dependencia.

    Como se esperaba, el gráfico de dependencias funcionales muestra que la columna Customer determina algunas columnas como City, Postal Codey Name.

    Sorprendentemente, el gráfico no muestra una dependencia funcional entre City y Postal Code, probablemente porque hay muchas infracciones en las relaciones entre las columnas. Puede usar la función plot_dependency_violations de SemPy para visualizar infracciones de dependencias entre columnas específicas.

Explorar los datos en busca de problemas de calidad

  1. Dibujar un gráfico con la función de visualización plot_dependency_violations de SemPy.

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

    Captura de pantalla que muestra el gráfico de infracciones de dependencia.

    El trazado de infracciones de dependencia muestra los valores de Postal Code en el lado izquierdo y los valores de City en el lado derecho. Un borde conecta un Postal Code en el lado izquierdo con un City en el lado derecho si hay una fila que contiene estos dos valores. Los bordes se anotan con el recuento de dichas filas. Por ejemplo, hay dos filas con código postal 20004, una con la ciudad "North Tower" y la otra con la ciudad "Washington".

    Además, el gráfico muestra algunas infracciones y muchos valores vacíos.

  2. Confirme el número de valores vacíos para Postal Code:

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

    50 filas tienen NA en el código postal.

  3. Quite filas con valores vacíos. A continuación, busque las dependencias mediante la función find_dependencies. Observe el parámetro adicional verbose=1 que ofrece una visión del funcionamiento interno de SemPy:

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

    La entropía condicional para Postal Code y City es 0,049. Este valor indica que hay infracciones de dependencia funcional. Antes de corregir las infracciones, aumente el umbral en la entropía condicional del valor predeterminado de 0.01 a 0.05, solo para ver las dependencias. Los umbrales inferiores dan lugar a menos dependencias (o una mayor selectividad).

  4. Aumente el umbral en la entropía condicional del valor predeterminado de 0.01 a 0.05:

    plot_dependency_metadata(customer_state_df2.find_dependencies(threshold=0.05))
    

    Trazado de los metadatos de dependencia con un umbral superior para la entropía.

    Si aplica conocimientos de dominio de qué entidad determina los valores de otras entidades, este gráfico de dependencias parece preciso.

  5. Explore más problemas de calidad de datos detectados. Por ejemplo, una flecha discontinua combina City y Region, lo que indica que la dependencia solo es aproximada. Esta relación aproximada podría implicar que hay una dependencia funcional parcial.

    customer_state_df.list_dependency_violations('City', 'Region')
    
  6. Eche un vistazo más detallado a cada uno de los casos en los que un valor Region no vacío provoca una infracción:

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

    El resultado muestra que la ciudad de Downers Grove se produjo en Illinois y Nebraska. Sin embargo, Downer's Grove es una ciudad en Illinois, no Nebraska.

  7. Eche un vistazo a la ciudad de Fremont:

    customer_state_df[customer_state_df.City=='Fremont']
    

    Hay una ciudad llamada Fremont en California. Sin embargo, para Texas, el motor de búsqueda devuelve Premont, no Fremont.

  8. También es sospechoso ver violaciones de la dependencia entre Name y Country/Region, como indica la línea de puntos en el gráfico original de violaciones de dependencia (antes de eliminar las filas con valores vacíos).

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

    Parece que un cliente, SDI Design está presente en dos regiones: Estados Unidos y Canadá. Esta aparición puede no ser una infracción semántica, pero puede ser un caso poco común. Sin embargo, vale la pena echar un vistazo cercano:

  9. Eche un vistazo más detallado al cliente SDI Design:

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

    Una inspección adicional muestra que es realmente dos clientes diferentes (de diferentes sectores) con el mismo nombre.

El análisis de datos exploratorios es un proceso emocionante, al igual que la limpieza de datos. Siempre hay algo que los datos esconden, dependiendo de cómo se analicen, lo que quieras preguntar, etc. El vínculo semántico proporciona nuevas herramientas que puede usar para lograr más con los datos.

Consulte otros tutoriales para el vínculo semántico/SemPy: