Tutorial: Análisis de dependencias funcionales en un modelo semántico
En este tutorial, va a basarse en el trabajo anterior realizado por un analista de Power BI almacenado en forma de modelos semánticos (conjuntos de datos de Power BI). Al usar 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 con el fin de obtener información más precisa.
En este tutorial, aprenderá a:
- Aplique sus conocimientos de dominio para formular hipótesis sobre las dependencias funcionales de un modelo semántico.
- Familiarícese con los componentes de la biblioteca Python de vínculo semántico (SemPy), que admiten la integración con Power BI y le ayudarán 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.
Requisitos previos
Obtenga una suscripción a Microsoft Fabric. También puede registrarse para obtener una evaluación gratuita de Microsoft Fabric.
Inicie sesión en Microsoft Fabric.
Cambie a la experiencia de ciencia de datos de Synapse mediante el conmutador de experiencia en el lado izquierdo de la página principal.
Seleccione Áreas de trabajo en el panel de navegación izquierdo para buscar y seleccionar el área de trabajo. Esta área de trabajo se convertirá en el área de trabajo actual.
Descargue el modelo semánticoCustomer Profitability Sample.pbix del repositorio fabric-samples de GitHub y cárguelo en su área de trabajo.
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 en Preparación del sistema para los tutoriales de ciencia de datos para importar el cuaderno en el á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 los datos necesarios.
Instale
SemPy
desde PyPI mediante la funcionalidad de instalación en línea%pip
en el cuaderno:%pip install semantic-link
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.
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()
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.Compruebe el tipo de datos de
customer
:type(customer)
La salida confirma que
customer
es de tiposempy.fabric._dataframe._fabric_dataframe.FabricDataFrame
.Únase a los DataFrames
customer
ystate
:customer_state_df = customer.merge(state, left_on="State", right_on="StateCode", how='left') customer_state_df.head()
Identificación de las dependencias funcionales
Una dependencia funcional se manifiesta como una relación uno a varios entre los valores de dos (o más) columnas dentro de un DataFrame. Estas relaciones se pueden usar para detectar automáticamente problemas de calidad de datos.
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
Visualice las dependencias identificadas mediante la función
plot_dependency_metadata
de SemPy:plot_dependency_metadata(dependencies)
Como se esperaba, el grafo de dependencias funcionales muestra que la columna
Customer
determina algunas columnas comoCity
,Postal Code
yName
.Sorprendentemente, el grafo no muestra una dependencia funcional entre
City
yPostal Code
, probablemente porque hay muchas infracciones en las relaciones entre las columnas. Puede usar la funciónplot_dependency_violations
de SemPy para visualizar infracciones de dependencias entre columnas específicas.
Exploración de los datos para buscar problemas de calidad
Dibuje un grafo con la función de visualización
plot_dependency_violations
de SemPy.customer_state_df.plot_dependency_violations('Postal Code', 'City')
El trazado de infracciones de dependencia muestra los valores de
Postal Code
en el lado izquierdo y los valores deCity
en el lado derecho. Un borde conecta unPostal Code
en el lado izquierdo con unaCity
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 trazado muestra algunas infracciones y muchos valores vacíos.
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.
Quite filas con valores vacíos. A continuación, busque las dependencias mediante la función
find_dependencies
. Observe el parámetro adicionalverbose=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
yCity
es 0,049. Este valor indica que hay infracciones de la dependencia funcional. Antes de corregir las infracciones, aumente el umbral de la entropía condicional del valor predeterminado de0.01
a0.05
, solo para ver las dependencias. Los umbrales inferiores dan lugar a menos dependencias (o una mayor selectividad).Aumente el umbral de la entropía condicional del valor predeterminado de
0.01
a0.05
:plot_dependency_metadata(customer_state_df2.find_dependencies(threshold=0.05))
Si aplica conocimientos de dominio de qué entidad determina los valores de otras entidades, este grafo de dependencias parece preciso.
Explore más problemas de calidad de datos detectados. Por ejemplo, una flecha discontinua combina
City
yRegion
, 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')
Eche un vistazo 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 está en Illinois y Nebraska. Sin embargo, Downer's Grove es una ciudad de Illinois, no Nebraska.
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.
También es sospechoso ver infracciones de la dependencia entre
Name
yCountry/Region
, como indica la línea de puntos del grafo original de infracciones de dependencia (antes de quitar 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:
Eche un vistazo al cliente SDI Design:
customer_state_df[customer_state_df.Name=='SDI Design']
Una inspección adicional muestra que realmente se trata de dos clientes diferentes (de diferentes sectores) con el mismo nombre.
El análisis exploratorio de datos es un proceso apasionante, al igual que la limpieza de datos. Siempre hay algo que los datos ocultan, dependiendo de cómo se miren, de lo que se quiera preguntar, etc. El vínculo semántico proporciona nuevas herramientas que puede usar para lograr más con los datos.
Contenido relacionado
Consulte otros tutoriales para el vínculo semántico/SemPy:
- Tutorial: Limpieza de datos con dependencias funcionales
- Tutorial: Extracción y cálculo de medidas de Power BI de un cuaderno de Jupyter
- Tutorial: Detección de relaciones en un modelo semántico mediante el vínculo semántico
- Tutorial: Detección de relaciones en el conjunto de datos de Synthea con el vínculo semántico
- Tutorial: Validación de datos mediante SemPy y Grandes Expectativas (GX) (versión preliminar)