Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Use dependencias funcionales para limpiar los datos. Existe una dependencia funcional cuando una columna de un modelo semántico (un conjunto de datos de Power BI) depende de otra columna. Por ejemplo, una ZIP code columna puede determinar el valor de una city columna. Una dependencia funcional aparece como una relación de uno a varios entre los valores de dos o más columnas de un DataFrame. En este tutorial se usa el conjunto de datos de Synthea para mostrar cómo las dependencias funcionales ayudan a detectar problemas de calidad de datos.
En este tutorial, aprenderá a:
- Aplique conocimientos de dominio para formar hipótesis sobre las dependencias funcionales en un modelo semántico.
- Familiarícese con los componentes de la biblioteca semántica de Python (SemPy) que automatizan el análisis de calidad de los datos. Estos componentes incluyen:
-
FabricDataFrame: una estructura similar a Pandas con información semántica adicional. - Funciones que automatizan la evaluación de hipótesis sobre dependencias funcionales e identifican infracciones en los modelos semánticos.
-
Prerrequisitos
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 Fabric mediante el conmutador de experiencia en el lado inferior izquierdo de la página principal.
- Seleccione Áreas de trabajo en el panel de navegación y, a continuación, seleccione el área de trabajo para establecerla como área de trabajo actual.
Sigue el desarrollo en el cuaderno
Use el cuaderno data_cleaning_functional_dependencies_tutorial.ipynb para seguir este tutorial.
Para abrir el cuaderno complementario de este tutorial, siga las instrucciones de Preparación del sistema para los tutoriales de ciencia de datos a fin de importar el cuaderno a su á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.
Compruebe la versión de Spark. Si usa Spark 3.4 o posterior en Microsoft Fabric, el vínculo semántico se incluye de forma predeterminada, por lo que no es necesario instalarlo. Si usa Spark 3.3 o versiones anteriores, o desea actualizar al vínculo semántico más reciente, ejecute el siguiente comando.
%pip install -U semantic-linkImporte los módulos que use en este cuaderno.
import pandas as pd import sempy.fabric as fabric from sempy.fabric import FabricDataFrame from sempy.dependencies import plot_dependency_metadataDescargue los datos de ejemplo. En este tutorial, use el conjunto de datos synthea de registros médicos sintéticos (versión pequeña para simplificar).
download_synthea(which='small')
Exploración de los datos
Inicialice con
FabricDataFrameel contenido del archivo providers.csv .providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv")) providers.head()Compruebe si hay problemas de calidad de datos con la función de
find_dependenciesSemPy trazando un gráfico de dependencias funcionales detectadas automáticamente.deps = providers.find_dependencies() plot_dependency_metadata(deps)El gráfico muestra que
IddeterminaNAMEyORGANIZATION. Este resultado se espera porqueIdes único.Confirme que
Ides único.providers.Id.is_uniqueEl código devuelve
Truepara confirmar queIdes único.
Análisis de dependencias funcionales en profundidad
El gráfico de dependencias funcionales también muestra que ORGANIZATION determina ADDRESS y ZIP, según lo previsto. Sin embargo, podrías esperar que ZIP también determinara CITY, pero la flecha discontinua indica que la dependencia es solo aproximada, señalando un problema de calidad de datos.
Hay otras peculiaridades en el gráfico. Por ejemplo, NAME no determina GENDER, Id, SPECIALITYo ORGANIZATION. Cada una de estas peculiaridades puede merecer la pena investigar.
- Eche un vistazo más profundo a la relación aproximada entre
ZIPyCITYmediante la función delist_dependency_violationsSemPy para enumerar las infracciones:
providers.list_dependency_violations('ZIP', 'CITY')
- Dibujar un gráfico con la función de visualización
plot_dependency_violationsde SemPy. Este gráfico es útil si el número de infracciones es pequeño:
providers.plot_dependency_violations('ZIP', 'CITY')
El gráfico de infracciones de dependencia muestra los valores de ZIP en el lado izquierdo y los valores de CITY en el lado derecho. Un borde conecta un código postal en el lado izquierdo del trazado con una ciudad 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 02747-1242, una fila con la ciudad "NORTH DARTHMOUTH" y la otra con la ciudad "DARTHMOUTH", como se muestra en el trazado anterior y el código siguiente:
- Confirme las observaciones del trazado ejecutando el código siguiente:
providers[providers.ZIP == '02747-1242'].CITY.value_counts()
El trazado también muestra que, entre las filas que tienen
CITYcomo "DARTHMOUTH", nueve filas tienen unZIPde 02747-1262. Una fila tiene unZIPde 02747-1242. Una fila tiene unZIPvalor de 02747-2537. Confirme estas observaciones con el código siguiente:providers[providers.CITY == 'DARTHMOUTH'].ZIP.value_counts()Hay otros códigos postales asociados a "DARTMOUTH", pero estos códigos postales no se muestran en el gráfico de infracciones de dependencia porque no sugieren problemas de calidad de datos. Por ejemplo, el código postal "02747-4302" está asociado de forma única con "DARTMOUTH" y no aparece en el gráfico de infracciones de dependencia. Confirme ejecutando el código siguiente:
providers[providers.ZIP == '02747-4302'].CITY.value_counts()
Resumen de problemas de calidad de datos detectados con SemPy
El gráfico de infracciones de dependencia muestra varios problemas de calidad de datos en este modelo semántico:
- Algunos nombres de ciudad están en mayúsculas. Use métodos de cadena para corregir este problema.
- Algunos nombres de ciudad tienen calificadores (o prefijos), como "Norte" y "Este". Por ejemplo, el código postal "2128" se asigna a "EAST BOSTON" una vez y a "BOSTON" una vez. Se produce un problema similar entre "NORTH DARTMOUTH" y "DARTMOUTH". Quite estos calificadores o asigne los códigos postales a la ciudad con la repetición más común.
- Hay errores tipográficos en algunos nombres de ciudad, como "PITTSFIELD" frente a "PITTSFILED" y "NEWBURGPORT" frente a "NEWBURYPORT". Para "NEWBURGPORT", corrija este error tipográfico mediante la aparición más común. Para "PITTSFIELD", con solo una aparición cada una, la desambiguación automática es mucho más difícil sin conocimientos externos ni un modelo de lenguaje.
- A veces, los prefijos como "West" se abrevian a la letra única "W". Reemplace "W" por "Oeste" si todas las apariciones de "W" son "Oeste".
- El código postal "02130" se asigna a "BOSTON" una vez y "Jamaica Plain" una vez. Este problema no es fácil de corregir. Con más datos, asigne a la repetición más común.
Limpiar los datos
Corrija el uso de mayúsculas cambiando los valores a mayúsculas y minúsculas.
providers['CITY'] = providers.CITY.str.title()Vuelva a ejecutar la detección de infracciones para confirmar que hay menos ambigüedades.
providers.list_dependency_violations('ZIP', 'CITY')
Refinar los datos manualmente o quitar filas que infringen las restricciones funcionales entre columnas mediante la función de drop_dependency_violations SemPy.
Para cada valor de la variable determinante, drop_dependency_violations elige el valor más común de la variable dependiente y quita todas las filas con otros valores. Aplique esta operación solo si está seguro de que esta heurística estadística conduce a resultados correctos para los datos. De lo contrario, escriba su propio código para controlar las infracciones detectadas.
Ejecute la
drop_dependency_violationsfunción en lasZIPcolumnas yCITY.providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')Enumere las infracciones de dependencia entre
ZIPyCITY.providers_clean.list_dependency_violations('ZIP', 'CITY')
El código devuelve una lista vacía para indicar que no hay más infracciones de la restricción ZIP -> CITYfuncional .
Contenido relacionado
Consulte otros tutoriales para ver el vínculo semántico o SemPy:
- Tutorial: Análisis de dependencias funcionales en un modelo semántico de ejemplo
- Tutorial : Extracción y cálculo de medidas de Power BI desde un Jupyter Notebook
- Tutorial: Detección de relaciones en un modelo semántico mediante vínculo semántico
- Tutorial: Detección de relaciones en el conjunto de datos de Synthea mediante el vínculo semántico
- Tutorial : Validación de datos utilizando SemPy y Great Expectations (GX)