Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 DataFrame. Este tutorial usa o conjunto de dados do Synthea para mostrar como as dependências funcionais ajudam a detectar problemas de qualidade de dados.
Neste tutorial, você aprenderá a:
- Aplique conhecimento de domínio para formar hipóteses sobre dependências funcionais em um modelo semântico.
- Familiarize-se com os componentes da semântica biblioteca Python (SemPy) que automatizam a análise de qualidade de dados. Esses componentes incluem:
-
FabricDataFrame— uma estrutura semelhante a 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 cadastre-se para um teste gratuito do Microsoft Fabric.
Entre no Microsoft Fabric.
Alterne para o Fabric usando o alternador de experiências no canto inferior esquerdo da página inicial.
- Selecione Workspaces no painel de navegação e selecione seu workspace para defini-lo como o workspace atual.
Acompanhar no notebook
Use o notebook 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 seu sistema para tutoriais de ciência de dados para importar o bloco de anotações para seu espaço de trabalho.
Se você prefere copiar e colar o código desta página, pode criar um notebook.
Certifique-se de anexar um lakehouse ao notebook antes de começar a executar o código.
Configurar o notebook
Nesta seção, você configurará um ambiente de notebook.
Verifique 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, você não precisará instalá-lo. Se você estiver usando o Spark 3.3 ou anterior ou quiser atualizar para o Link Semântico mais recente, execute o comando a seguir.
%pip install -U semantic-linkImporte os módulos que você usa neste notebook.
import pandas as pd import sempy.fabric as fabric from sempy.fabric import FabricDataFrame from sempy.dependencies import plot_dependency_metadataBaixe os 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')
Explorar os dados
Inicialize um
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
find_dependenciesSemPy plotando um grafo de dependências funcionais detectadas automaticamente.deps = providers.find_dependencies() plot_dependency_metadata(deps)O grafo mostra que
IddeterminaNAMEeORGANIZATION. Esse resultado é esperado porqueIdé exclusivo.Confirme se isso
Idé exclusivo.providers.Id.is_uniqueO código retorna
Truepara confirmar se oIdé exclusivo.
Analisar as dependências funcionais em profundidade
O grafo de dependências funcionais também mostra que ORGANIZATION determina ADDRESS e ZIP, conforme o 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 grafo. Por exemplo, NAME não determina GENDER, Id, SPECIALITYou ORGANIZATION. Cada uma dessas peculiaridades pode valer a pena investigar.
- Examine mais detalhadamente a relação aproximada entre
ZIPeCITYusando a função dolist_dependency_violationsSemPy para listar as violações:
providers.list_dependency_violations('ZIP', 'CITY')
- Desenhe um grafo com a função de visualização
plot_dependency_violationsdo SemPy. Esse grafo será ú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 o lado esquerdo e valores para CITY o lado direito. Uma aresta conecta um CEP no lado esquerdo do diagrama com uma cidade no lado direito se houver uma linha que contenha esses dois valores. As bordas são anotadas com a contagem dessas linhas. Por exemplo, há duas linhas com o CEP 02747-1242, uma linha com a cidade "NORTH DARTHMOUTH" e a outra com a cidade "DARTHMOUTH", como mostrado no gráfico anterior e no código a seguir.
- 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 umZIP02747-1262. Uma linha tem umZIP02747-1242. Uma linha tem umZIP02747-2537. Confirme estas observações com o seguinte código:providers[providers.CITY == 'DARTHMOUTH'].ZIP.value_counts()Há outros cep associados a "DARTMOUTH", mas esses cep não são mostrados no grafo de violações de dependência porque eles não sugerem problemas de qualidade de dados. Por exemplo, o cep "02747-4302" é associado exclusivamente a "DARTMOUTH" e não aparece no grafo de violações de dependência. Confirme executando o seguinte código:
providers[providers.ZIP == '02747-4302'].CITY.value_counts()
Resumir problemas de qualidade de dados detectados com o SemPy
O grafo de violações de dependência mostra vários problemas de qualidade de dados neste modelo semântico:
- Alguns nomes de cidade são maiúsculos. Use métodos de cadeia de caracteres para corrigir esse problema.
- Alguns nomes de cidade 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 CEP para a cidade com a ocorrência mais comum.
- Há erros de digitação em alguns nomes de cidade, 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" forem para "Oeste".
- O CEP "02130" mapeia para "BOSTON" uma vez e "Jamaica Plain" uma vez. Esse 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 valores para maiúsculas e minúsculas.
providers['CITY'] = providers.CITY.str.title()Execute a detecção de violação novamente para confirmar que há menos ambiguidades.
providers.list_dependency_violations('ZIP', 'CITY')
Refinar os dados manualmente ou soltar linhas que violam restrições funcionais entre colunas usando a função semPy drop_dependency_violations .
Para cada valor da variável determinante, drop_dependency_violations escolhe o valor mais comum da variável dependente e descarta todas as linhas com outros valores. Aplique essa operação somente se você estiver confiante 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 detectadas.
Execute a
drop_dependency_violationsfunção nas colunas eZIPnasCITYcolunas.providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')Listar quaisquer 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
Consulte 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 Jupyter Notebook
- Tutorial: Descobrir relações em um modelo semântico usando o link semântico
- Tutorial: Descobrir relações no conjunto de dados do Synthea usando o link semântico
- Tutorial : validar dados usando SemPy e grandes expectativas (GX)