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.
Seleccione Áreas de trabajo en el panel de navegación izquierdo para buscar y seleccionar el área de trabajo. Este área de trabajo pasa a ser tu á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 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.
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 al
customer
ystate
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.
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 gráfico de dependencias funcionales muestra que la columna
Customer
determina algunas columnas comoCity
,Postal Code
yName
.Sorprendentemente, el gráfico 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.
Explorar los datos en busca de problemas de calidad
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')
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 unCity
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.
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 dependencia funcional. Antes de corregir las infracciones, aumente el umbral en 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 en 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 gráfico 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 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.
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 violaciones de la dependencia entre
Name
yCountry/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:
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.
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 desde un cuaderno de Jupyter
- Tutorial: Detección de relaciones en un modelo semántico mediante el vínculo semántico
- Tutorial : Descubrir relaciones en el conjunto de datos Synthea, mediante el vínculo semántico
- Tutorial de : Validación de datos usando SemPy y Great Expectations (GX)