Compartilhar via


Detectar, explorar e validar as dependências funcionais nos seus dados usando o link semântico

Dependências funcionais são relações entre colunas de uma tabela, na qual os valores de uma coluna são usados para determinar os valores de outra. O reconhecimento dessas dependências pode ajudar você a descobrir padrões e relações nos seus dados, que por sua vez podem ajudar com engenharia de recursos, limpeza de dados e tarefas de criação de modelos. As dependências funcionais funcionam como uma invariante eficaz que permite localizar e corrigir problemas de qualidade de dados que podem ser difíceis de serem detectados de outra forma.

Neste artigo, você usa o Link Semântico para:

  • Localizar dependências entre colunas de um FabricDataFrame
  • Visualizar as dependências do aplicativo
  • Identificar problemas de qualidade de dados
  • Visualizar problemas de qualidade de dados
  • Impor restrições funcionais entre colunas em um conjunto de dados

Pré-requisitos

  • Acessar a experiência de Ciência de Dados encontrada no Microsoft Fabric.
  • Crie um novo notebook para copiar/colar o código nas células.
  • Para o Spark 3.4 e superior, o link semântico está disponível no runtime padrão quando o Fabric é usado e não há necessidade de instalá-lo. Se você estiver usando o Spark 3.3 ou inferior, ou se quiser atualizar para a versão mais recente do link semântico, execute o comando: python %pip install -U semantic-link  
  • Adicionar um Lakehouse ao bloco de anotações.

Para o Spark 3.4 e superior, o link semântico está disponível no runtime padrão quando o Fabric é usado e não há necessidade de instalá-lo. Caso use o Spark 3.3 ou abaixo ou se quiser atualizar para a versão mais recente do Link Semântico, execute este comando:

%pip install -U semantic-link
``` 

## Find functional dependencies in data

The SemPy `find_dependencies` function detects functional dependencies between the columns of a FabricDataFrame. The function uses a threshold on conditional entropy to discover approximate functional dependencies, where low conditional entropy indicates strong dependence between columns. To make the `find_dependencies` function more selective, you can set a lower threshold on conditional entropy. The lower threshold means that only stronger dependencies will be detected.

This Python code snippet demonstrates how to use `find_dependencies`:

```python
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()

A função find_dependencies retorna um FabricDataFrame com as dependências detectadas entre as colunas. Uma lista representa colunas que têm um mapeamento 1:1. A função também remove bordas transitivas, para tentar remover as dependências potenciais.

Quando você especifica a opção dropna=True, as linhas que têm um valor NaN em qualquer coluna são eliminadas da avaliação. Isso pode resultar em dependências não transitivas, conforme mostrado neste exemplo:

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

Em alguns casos, a cadeia de dependência pode formar ciclos quando você especifica a opção dropna=True, conforme mostrado neste exemplo:

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

Visualizar as dependências nos dados

Depois de localizar as dependências funcionais em um conjunto de dados (usando find_dependencies), visualize as dependências com a função plot_dependency_metadata. Essa função usa o FabricDataFrame resultante de find_dependencies e cria uma representação visual das dependências entre colunas e grupos de colunas.

Este snippet de código do Python mostra como 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)

A função plot_dependency_metadata gera uma visualização que mostra os agrupamentos 1:1 das colunas. As colunas que pertencem a um só grupo são colocadas em uma célula individual. Se nenhum candidato adequado for encontrado, um FabricDataFrame vazio será retornado.

Captura de tela mostrando a saída da função plot_dependencies.

Identificar problemas de qualidade de dados

Problemas de qualidade de dados podem ter vários formulários, por exemplo, valores ausentes, inconsistências ou imprecisões. É importante identificar e resolver esses problemas para garantir a confiabilidade e a validade de qualquer análise ou modelo criado com base nos dados. Uma forma de detectar problemas de qualidade de dados é examinar as violações de dependências funcionais entre as colunas de um conjunto de dados.

A função list_dependency_violations pode ajudar a identificar violações de dependências funcionais entre as colunas do conjunto de dados. Considerando uma coluna determinante e uma coluna dependente, essa função mostra valores que violam a dependência funcional, acompanhado da contagem das respectivas ocorrências. Isso pode ajudar a inspecionar dependências aproximadas e identificar problemas de qualidade de dados.

Este snippet de código mostra como usar a função 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")

Neste exemplo, a função pressupõe uma dependência funcional entre as colunas ZIP (determinante) e CITY (dependente). Se o conjunto de dados tiver problemas de qualidade de dados, por exemplo, o mesmo CEP atribuído a várias cidades, a função gerará os dados com os problemas:

ZIP CITY count
12345 Boston 2
12345 Seattle 1

Essa saída indica que duas cidades diferentes (Boston e Seattle) têm o mesmo valor de CEP (12345). Isso sugere um problema de qualidade de dados dentro do conjunto de dados.

A função list_dependency_violations fornece mais opções que podem lidar com valores ausentes, mostrar valores mapeados para valores em violação, limitar o número de violações retornadas e classificar os resultados por contagem ou coluna determinante.

A saída list_dependency_violations pode ajudar a identificar problemas de qualidade de dados do conjunto de dados. No entanto, você deverá examinar cuidadosamente os resultados e considerar o contexto dos dados, para determinar a escolha mais apropriada para resolver os problemas identificados. Esta abordagem pode envolver mais limpeza de dados, validação ou exploração de dados adicionais para garantir a confiabilidade e a validade da análise ou do modelo.

Visualizar problemas de qualidade de dados

Problemas de qualidade de dados podem prejudicar a confiabilidade e a validade de qualquer análise ou modelo criado com base esses dados. Identificar e resolver esses problemas é importante para garantir a precisão dos resultados. Para detectar problemas de qualidade de dado, examine as violações de dependências funcionais entre as colunas de um conjunto de dados. Visualizar essas violações pode mostrar os problemas com mais clareza e ajudar você a resolvê-los com mais eficiência.

A função plot_dependency_violations pode ajudar a visualizar as violações de dependências funcionais entre as colunas de um conjunto de dados. Considerando uma coluna determinante e uma coluna dependente, essa função mostra os valores em violação em um formato gráfico, para facilitar a compreensão da natureza e da extensão dos problemas de qualidade dos dados.

Este snippet de código mostra como usar a função 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")

Neste exemplo, a função pressupõe que exista uma dependência funcional entre as colunas ZIP (determinante) e CITY (dependente). Se o conjunto de dados tiver problemas de qualidade de dados, por exemplo, o mesmo CEP atribuído a várias cidades, a função produzirá um grafo dos valores em violação.

A função plot_dependency_violations fornece mais opções que podem lidar com valores ausentes, mostrar valores mapeados para valores em violação, limitar o número de violações retornadas e classificar os resultados por contagem ou coluna determinante.

A função plot_dependency_violations gera uma visualização que pode ajudar a identificar problemas de qualidade de dados do conjunto de dados. No entanto, você deverá examinar cuidadosamente os resultados e considerar o contexto dos dados, para determinar a escolha mais apropriada para resolver os problemas identificados. Esta abordagem pode envolver mais limpeza de dados, validação ou exploração de dados adicionais para garantir a confiabilidade e a validade da análise ou do modelo.

Captura de tela mostrando a saída da função plot_dependency_violations.

Impor restrições funcionais

A qualidade dos dados é crucial para garantir a confiabilidade e a validade de qualquer análise ou modelo criado com base em um conjunto de dados. A imposição de restrições funcionais entre colunas em um conjunto de dados pode ajudar a melhorar a qualidade dos dados. Restrições funcionais podem ajudar a garantir que as relações entre colunas tenham precisão e consistência, o que pode levar a resultados de modelo ou análise mais precisas.

A função drop_dependency_violations pode ajudar a impor restrições funcionais entre colunas em um conjunto de dados. Ele descarta linhas que violam uma determinada restrição. Considerando uma coluna determinante e uma coluna dependente, essa função remove as linhas com valores que não estão em conformidade com a restrição funcional entre as duas colunas.

Este snippet de código mostra como usar a função 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")

Aqui, a função impõe uma restrição funcional entre as colunas ZIP (determinante) e CITY (dependente). Para cada valor do determinante, o valor mais comum do dependente é selecionado e todas as linhas com outros valores são removidas. Por exemplo, dado esse conjunto de dados, a linha com CITY=Seattle será removida e a dependência funcional ZIP -> CITY será mantida na saída:

ZIP CITY
12345 Seattle
12345 Boston
12345 Boston
98765 Baltimore
00000 São Francisco

A função drop_dependency_violations fornece a opção verbose de controlar a verbosidade de saída. Ao definir verbose=1, visualize o número de linhas descartadas. Um valor verbose=2 mostra todo o conteúdo da linha das linhas descartadas.

A função drop_dependency_violations pode impor restrições funcionais entre as colunas do conjunto de dados, o que pode ajudar a aprimorar a qualidade dos dados e levar a resultados mais precisos na análise ou no modelo. No entanto, você deverá considerar cuidadosamente o contexto de seus dados e as restrições funcionais que você escolhe impor, para garantir que você não remova acidentalmente informações valiosas do seu conjunto de dados.