Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Use dependências funcionais para limpar dados. Existe uma dependência funcional quando uma coluna em um modelo semântico (um conjunto de dados do Power BI) depende de outra coluna. Por exemplo, uma ZIP code coluna pode determinar o valor em uma city coluna. Uma dependência funcional aparece como uma relação um-para-muitos entre valores em duas ou mais colunas em um DataFramearquivo . Este tutorial usa o conjunto de dados Synthea para mostrar como as dependências funcionais ajudam a detetar problemas de qualidade de dados.
Neste tutorial, você aprenderá a:
- Aplicar conhecimento de domínio para formar hipóteses sobre dependências funcionais em um modelo semântico.
- Familiarize-se com os componentes da biblioteca Python de Link SemÂntico (SemPy) que automatizam a análise da qualidade dos dados. Esses componentes incluem:
-
FabricDataFrame—uma estrutura semelhante a um pandas com informações semânticas adicionais. - Funções que automatizam a avaliação de hipóteses sobre dependências funcionais e identificam violações em seus modelos semânticos.
-
Pré-requisitos
Obtenha uma assinatura do Microsoft Fabric. Ou inscreva-se para obter uma avaliação gratuita do Microsoft Fabric.
Inicie sessão em Microsoft Fabric.
Altera para o Fabric usando o alternador de experiência no canto inferior esquerdo da sua página inicial.
- Selecione Espaços de trabalho no painel de navegação e, em seguida, selecione o espaço de trabalho para defini-lo como o espaço de trabalho atual.
Acompanhe no caderno
Use o bloco de anotações data_cleaning_functional_dependencies_tutorial.ipynb para seguir este tutorial.
Para abrir o bloco de anotações que acompanha este tutorial, siga as instruções em Preparar o seu sistema para tutoriais de ciência de dados para importar o bloco de anotações para o seu ambiente de trabalho.
Se preferir copiar e colar o código desta página, pode criar um novo bloco de notas.
Certifique-se de anexar um lakehouse ao bloco de anotações antes de começar a executar o código.
Configurar o bloco de notas
Nesta seção, você configura um ambiente de bloco de anotações.
Verifique a sua versão do Spark. Se você estiver usando o Spark 3.4 ou posterior no Microsoft Fabric, o Link Semântico será incluído por padrão, portanto, não será necessário instalá-lo. Se você estiver usando o Spark 3.3 ou anterior, ou quiser atualizar para o Link Semântico mais recente, execute o seguinte comando.
%pip install -U semantic-linkImporte os módulos que utiliza neste bloco de notas.
import pandas as pd import sempy.fabric as fabric from sempy.fabric import FabricDataFrame from sempy.dependencies import plot_dependency_metadataFaça o download dos dados de exemplo. Neste tutorial, use o conjunto de dados Synthea de registros médicos sintéticos (versão pequena para simplificar).
download_synthea(which='small')
Explore os dados
Inicialize a
FabricDataFramecom o conteúdo do arquivo providers.csv .providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv")) providers.head()Verifique se há problemas de qualidade de dados com a função do SemPy plotando um gráfico de dependências
find_dependenciesfuncionais detetadas automaticamente.deps = providers.find_dependencies() plot_dependency_metadata(deps)O gráfico mostra que
IddeterminaNAMEeORGANIZATION. Este resultado é esperado porqueIdé único.Confirme que
Idé único.providers.Id.is_uniqueO código retorna
Truepara confirmar queIdé exclusivo.
Analise as dependências funcionais em profundidade
O gráfico de dependências funcionais também mostra que ORGANIZATION determina ADDRESS e ZIP, conforme esperado. No entanto, você pode esperar que ZIP também determine CITY, mas a seta tracejada indica que a dependência é apenas aproximada, apontando para um problema de qualidade de dados.
Há outras peculiaridades no gráfico. Por exemplo, NAME não determina GENDER, Id, SPECIALITYou ORGANIZATION. Cada uma dessas peculiaridades pode valer a pena investigar.
- Dê uma olhada mais profunda na relação aproximada entre
ZIPeCITYusando a função dolist_dependency_violationsSemPy para listar as violações:
providers.list_dependency_violations('ZIP', 'CITY')
- Desenhe um gráfico com a função de visualização
plot_dependency_violationsdo SemPy. Este gráfico é útil se o número de violações for pequeno:
providers.plot_dependency_violations('ZIP', 'CITY')
O gráfico de violações de dependência mostra valores para ZIP no lado esquerdo e valores para CITY no lado direito. Uma aresta conecta um CEP no lado esquerdo do gráfico com uma cidade no lado direito se houver uma linha que contenha esses dois valores. As arestas são anotadas com a contagem dessas linhas. Por exemplo, existem duas linhas com o CEP 02747-1242, uma linha com a cidade "NORTH DARTHMOUTH" e outra com a cidade "DARTHMOUTH", como mostrado no gráfico anterior e no seguinte código:
- Confirme as observações do gráfico executando o seguinte código:
providers[providers.ZIP == '02747-1242'].CITY.value_counts()
O gráfico também mostra que, entre as linhas que têm
CITYcomo "DARTHMOUTH", nove linhas têm umZIPde 02747-1262. Uma linha tem umZIPde 02747-1242. Uma linha tem umZIPde 02747-2537. Confirme essas observações com o seguinte código:providers[providers.CITY == 'DARTHMOUTH'].ZIP.value_counts()Existem outros códigos postais associados a "DARTMOUTH", mas esses códigos postais não são mostrados no gráfico de violações de dependência porque não sugerem problemas de qualidade de dados. Por exemplo, o CEP "02747-4302" está exclusivamente associado a "DARTMOUTH" e não aparece no gráfico de violações de dependência. Confirme executando o seguinte código:
providers[providers.ZIP == '02747-4302'].CITY.value_counts()
Resumir os problemas de qualidade de dados detetados com o SemPy
O gráfico de violações de dependência mostra vários problemas de qualidade de dados neste modelo semântico:
- Alguns nomes de cidades são maiúsculos. Use métodos de cadeia de caracteres para corrigir esse problema.
- Alguns nomes de cidades têm qualificadores (ou prefixos), como "Norte" e "Leste". Por exemplo, o CEP "2128" mapeia para "EAST BOSTON" uma vez e para "BOSTON" uma vez. Um problema semelhante ocorre entre "NORTH DARTMOUTH" e "DARTMOUTH". Solte esses qualificadores ou mapeie os CEPs para a cidade com a ocorrência mais comum.
- Há erros de digitação em alguns nomes de cidades, como "PITTSFIELD" vs. "PITTSFILED" e "NEWBURGPORT" vs. "NEWBURYPORT". Para "NEWBURGPORT", corrija esse erro de digitação usando a ocorrência mais comum. Para "PITTSFIELD", com apenas uma ocorrência cada, a desambiguação automática é muito mais difícil sem conhecimento externo ou um modelo de linguagem.
- Às vezes, prefixos como "West" são abreviados para a única letra "W". Substitua "W" por "West" se todas as ocorrências de "W" representarem "West".
- O CEP "02130" mapeia para "BOSTON" uma vez e "Jamaica Plain" uma vez. Este problema não é fácil de corrigir. Com mais dados, mapeie para a ocorrência mais comum.
Limpar os dados
Corrija a capitalização alterando os valores para maiúsculas e minúsculas.
providers['CITY'] = providers.CITY.str.title()Execute a deteção de violação novamente para confirmar que há menos ambiguidades.
providers.list_dependency_violations('ZIP', 'CITY')
Refine os dados manualmente ou solte linhas que violam restrições funcionais entre colunas usando a função do drop_dependency_violations SemPy.
Para cada valor da variável determinante, drop_dependency_violations seleciona o valor mais comum da variável dependente e descarta todas as linhas com outros valores. Aplique esta operação somente se tiver certeza de que essa heurística estatística leva a resultados corretos para seus dados. Caso contrário, escreva seu próprio código para lidar com as violações detetadas.
Execute a
drop_dependency_violationsfunção nasZIPcolunas eCITY.providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')Liste todas as violações de dependência entre
ZIPeCITY.providers_clean.list_dependency_violations('ZIP', 'CITY')
O código retorna uma lista vazia para indicar que não há mais violações da restrição ZIP -> CITYfuncional.
Conteúdo relacionado
Veja outros tutoriais para link semântico ou SemPy:
- Tutorial: Analisar dependências funcionais em um modelo semântico de exemplo
- Tutorial: Extrair e calcular medidas do Power BI a partir de um bloco de anotações Jupyter
- Tutorial: Descobrir relações em um modelo semântico usando link semântico
- Tutorial: Descubra relações no conjunto de dados Synthea usando link semântico
- Tutorial: Validar dados usando SemPy e Grandes Expectativas (GX)