Detección, exploración y validación de dependencias funcionales en los datos mediante el vínculo semántico

Las dependencias funcionales son relaciones entre columnas de una tabla, donde los valores de una columna se usan para determinar los valores de otra columna. La comprensión de estas dependencias puede ayudarle a descubrir patrones y relaciones en los datos, lo que puede ser útil para la ingeniería de características, la limpieza de datos y la creación de modelos. Las dependencias funcionales actúan como una invariante eficaz que permite encontrar y corregir problemas de calidad de los datos que, de otro modo, serían difíciles de detectar.

En este artículo, usará el vínculo semántico para:

  • Buscar dependencias entre columnas de fabricDataFrame
  • Visualización de dependencias
  • Identificar problemas de calidad de datos
  • Visualizar problemas de calidad de datos
  • Aplicar restricciones funcionales entre columnas de un conjunto de datos

Requisitos previos

  • Vaya a la experiencia de Ciencia de datos en Microsoft Fabric.
  • Cree un nuevo cuaderno, para copiar/pegar código en las celdas.
  • Para Spark 3.4 y versiones posteriores, el vínculo semántico está disponible en el entorno de ejecución predeterminado al usar Fabric y no es necesario instalarlo. Si usa Spark 3.3 o inferior, o si desea actualizar a la versión más reciente del vínculo semántico, puede ejecutar el comando: python %pip install -U semantic-link  
  • Adición de un almacén de lago de datos al cuaderno. Para Spark 3.4 y versiones posteriores, el vínculo semántico está disponible en el entorno de ejecución predeterminado al usar Fabric y no es necesario instalarlo. Si usa Spark 3.3 o inferior, o si desea actualizar a la versión más reciente del vínculo semántico, puede ejecutar el comando:

python %pip install -U semantic-link  

Buscar dependencias funcionales en datos

La función find_dependencies de SemPy detecta dependencias funcionales entre las columnas de un FabricDataFrame. La función utiliza un umbral de entropía condicional para descubrir dependencias funcionales aproximadas, donde una entropía condicional baja indica una fuerte dependencia entre columnas. Para que la función find_dependencies sea más selectiva, puede establecer un umbral inferior en la entropía condicional. El umbral inferior significa que solo se detectarán dependencias más fuertes.

El siguiente fragmento de código de Python muestra cómo usar find_dependencies.

from sempy.fabric import FabricDataFrame
from sempy.dependencies import plot_dependency_metadata
import pandas as pd


df = FabricDataFrame(pd.read_csv("your_data.csv"))

deps = df.find_dependencies()

La función find_dependencies devuelve un FabricDataFrame con dependencias detectadas entre columnas. Las columnas que tienen una asignación 1:1 se representarán como una lista. La función también intenta eliminar las posibles dependencias quitando bordes transitivos.

Al especificar la opción dropna=True, las filas que tienen un valor NaN en cualquiera de las columnas se eliminan de la evaluación. Esto puede dar lugar a que las dependencias no sean transitivas, como en el ejemplo siguiente:

A B C
1 1 1
1 1 1
1 NaN 9
2 NaN 2
2 2 2

En algunos casos, la cadena de dependencias puede formar ciclos al especificar la opción dropna=True, como se muestra en el ejemplo siguiente:

A B C
1 1 NaN
2 1 NaN
NaN 1 1
NaN 2 1
1 NaN 1
1 NaN 2

Visualizar dependencias en datos

Después de buscar dependencias funcionales en un conjunto de datos (mediante find_dependencies), puede visualizar las dependencias mediante la función plot_dependency_metadata. Esta función toma el fabricDataFrame resultante de find_dependencies y crea una representación visual de las dependencias entre columnas y grupos de columnas.

El siguiente fragmento de código de Python muestra cómo usar plot_dependencies.

from sempy.fabric import FabricDataFrame
from sempy.dependencies import plot_dependency_metadata
from sempy.samples import download_synthea

download_synthea(which='small')

df = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))

deps = df.find_dependencies()
plot_dependency_metadata(deps)

La función plot_dependency_metadata genera una visualización que muestra las agrupaciones individuales de columnas. Las columnas que pertenecen a un único grupo se colocan en una sola celda. Si no se encuentra ningún candidato adecuado, se devuelve un FabricDataFrame vacío.

Captura de pantalla que muestra la salida de la función plot_dependencies.

Identificar problemas de calidad de datos

Los problemas de calidad de los datos pueden surgir en varias formas, como valores que faltan, incoherencias o imprecisiones. Identificar y solucionar estos problemas es fundamental para garantizar la confiabilidad y validez de cualquier análisis o modelo basado en los datos. Una manera de detectar problemas de calidad de datos es examinar las infracciones de las dependencias funcionales entre las columnas de un conjunto de datos.

La función list_dependency_violations puede ayudarle a identificar infracciones de dependencias funcionales entre columnas de un conjunto de datos. Dada una columna determinante y una columna dependiente, esta función muestra valores que infringen la dependencia funcional, junto con el recuento de sus respectivas apariciones. Esto puede ser útil para inspeccionar dependencias aproximadas e identificar problemas de calidad de datos.

En el código siguiente se muestra un ejemplo de cómo usar la función list_dependency_violations:

from sempy.fabric import FabricDataFrame
from sempy.samples import download_synthea

download_synthea(which='small')

df = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))

violations = df.list_dependency_violations(determinant_col="ZIP", dependent_col="CITY")

En este ejemplo, la función supone que existe una dependencia funcional entre las columnas ZIP (determinante) y CITY (dependiente). Si el conjunto de datos presenta problemas de calidad, como la asignación de un mismo código postal a varias ciudades, la función mostrará los valores infractores:

ZIP CITY count
12345 Boston 2
12345 Seattle 1

Esta salida indica que el mismo código postal (12345) está asociado a dos ciudades diferentes (Boston y Seattle), lo que sugiere un problema de calidad de datos dentro del conjunto de datos.

La función list_dependency_violations proporciona más opciones para controlar los valores que faltan, mostrar los valores asignados a los valores de infracción, limitar el número de infracciones devueltas y ordenar los resultados por recuento o columna determinante.

La salida de list_dependency_violations puede ayudar a identificar problemas de calidad de datos en el conjunto de datos. Sin embargo, es esencial examinar cuidadosamente los resultados y tener en cuenta el contexto de los datos para determinar el curso de acción más adecuado para abordar los problemas identificados. Esta acción puede implicar una mayor limpieza, validación o exploración de datos para garantizar la confiabilidad y validez del análisis o modelo.

Visualizar problemas de calidad de datos

Los problemas de calidad de los datos pueden afectar negativamente a la confiabilidad y validez de cualquier análisis o modelo basado en los datos. Identificar y solucionar estos problemas es fundamental para garantizar la precisión de los resultados. Una manera de detectar problemas de calidad de datos es examinar las infracciones de las dependencias funcionales entre las columnas de un conjunto de datos. La visualización de estas infracciones puede proporcionar una mejor comprensión de los problemas y ayudarle a abordarlos de forma más eficaz.

La función plot_dependency_violations puede ayudar a visualizar las infracciones de las dependencias funcionales entre las columnas de un conjunto de datos. Dada una columna determinante y una columna dependiente, esta función muestra los valores infractores en un formato gráfico, lo que facilita la comprensión de la naturaleza y la extensión de los problemas de calidad de los datos.

En el código siguiente se muestra un ejemplo de cómo usar la función plot_dependency_violations:

from sempy.fabric import FabricDataFrame
from sempy.dependencies import plot_dependency_violations
from sempy.samples import download_synthea

download_synthea(which='small')

df = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))

df.plot_dependency_violations(determinant_col="ZIP", dependent_col="CITY")

En este ejemplo, la función supone que existe una dependencia funcional entre las columnas ZIP (determinante) y CITY (dependiente). Si el conjunto de datos presenta problemas de calidad, como la asignación de un mismo código postal a varias ciudades, la función genera un gráfico de los valores infractores.

La función plot_dependency_violations ofrece más opciones para tratar los valores que faltan, mostrar los valores asignados a los valores de infracción, limitar el número de infracciones devueltas y ordenar los resultados en función del número o columna determinante.

La visualización generada por plot_dependency_violations puede ayudarle a identificar problemas de calidad de datos en el conjunto de datos y comprender su naturaleza y extensión. Al examinar el gráfico, puede obtener información sobre las relaciones entre las columnas determinantes y dependientes e identificar posibles errores o incoherencias en los datos.

Captura de pantalla que muestra la salida de la función plot_dependency_violations.

Aplicar restricciones funcionales

La calidad de los datos es fundamental para garantizar la confiabilidad y validez de cualquier análisis o modelo basado en un conjunto de datos. Una manera de mejorar la calidad de los datos es aplicar restricciones funcionales entre columnas de un conjunto de datos. Las restricciones funcionales pueden ayudar a garantizar que las relaciones entre columnas sean coherentes y precisas, lo que puede dar lugar a resultados más precisos en el análisis o modelo.

La función drop_dependency_violations puede ayudar a aplicar restricciones funcionales entre columnas de un conjunto de datos quitando filas que infringen una restricción determinada. Dada una columna determinante y una columna dependiente, esta función quita las filas con valores que no cumplen la restricción funcional entre las dos columnas.

En el código siguiente se muestra un ejemplo de cómo usar la función drop_dependency_violations:

from sempy.fabric import FabricDataFrame
from sempy.samples import download_synthea

download_synthea(which='small')

df = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))

cleaned_df = df.drop_dependency_violations(determinant_col="ZIP", dependent_col="CITY")

En este ejemplo, la función aplica una restricción funcional entre las columnas ZIP (determinante) y CITY (dependiente). Para cada valor del determinante, se selecciona el valor más común del dependiente y se quitan todas las filas con otros valores. Por ejemplo, dado el siguiente conjunto de datos:

ZIP CITY
12345 Seattle
12345 Boston
12345 Boston
98765 Baltimore
00000 San Francisco

La fila con CITY=Seattle se quitaría y la dependencia funcional ZIP:> CITY se mantendría en la salida.

La función drop_dependency_violations proporciona la opción verbose para controlar el nivel de detalle de la salida. Al establecer verbose=1, puede ver el número de filas eliminadas y verbose=2 le permite ver todo el contenido de fila de las filas eliminadas.

Mediante la función drop_dependency_violations, puede aplicar restricciones funcionales entre columnas del conjunto de datos, lo que puede ayudar a mejorar la calidad de los datos y dar lugar a resultados más precisos en el análisis o el modelo. Sin embargo, es fundamental considerar detenidamente el contexto de los datos y las restricciones funcionales que se decida imponer para asegurarse de que no se está quitando información valiosa del conjunto de datos sin querer.