Tutorial: Analisar dependências funcionais em um modelo semântico
Neste tutorial, você aproveita o trabalho anterior feito por um analista do Power BI e armazenado na forma de modelos semânticos (conjuntos de dados do Power BI). Usando o SemPy (visualização) na experiência Synapse Data Science no Microsoft Fabric, você analisa dependências funcionais que existem em colunas de um DataFrame. Essa análise ajuda a descobrir problemas não triviais de qualidade de dados para obter insights mais precisos.
Neste tutorial, irá aprender a:
- Aplicar conhecimento de domínio para formular hipóteses sobre dependências funcionais em um modelo semântico.
- Familiarize-se com os componentes da biblioteca Python (SemPy) do link semântico que oferecem suporte à integração com o Power BI e ajudam a automatizar a análise de qualidade de dados. Esses componentes incluem:
- FabricDataFrame - uma estrutura semelhante a pandas aprimorada com informações semânticas adicionais.
- Funções úteis para extrair modelos semânticos de um espaço de trabalho do Fabric para o seu bloco de anotações.
- Funções úteis que automatizam a avaliação de hipóteses sobre dependências funcionais e que identificam violações de relações em seus modelos semânticos.
Pré-requisitos
Obtenha uma assinatura do Microsoft Fabric. Ou inscreva-se para uma avaliação gratuita do Microsoft Fabric.
Entre no Microsoft Fabric.
Use o seletor de experiência no lado esquerdo da sua página inicial para alternar para a experiência Synapse Data Science.
Selecione Espaços de trabalho no painel de navegação esquerdo para localizar e selecionar seu espaço de trabalho. Este espaço de trabalho torna-se o seu espaço de trabalho atual.
Baixe o modelo semântico Customer Profitability Sample.pbix do repositório GitHub de amostras de malha e carregue-o em seu espaço de trabalho.
Acompanhe no caderno
O notebook powerbi_dependencies_tutorial.ipynb acompanha 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 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 notebook com os módulos e dados necessários.
Instale
SemPy
a partir do PyPI usando o%pip
recurso de instalação em linha no notebook:%pip install semantic-link
Execute as importações necessárias de módulos que você precisará mais tarde:
import sempy.fabric as fabric from sempy.dependencies import plot_dependency_metadata
Carregue e pré-processe os dados
Este tutorial usa um modelo semântico de exemplo padrão Customer Profitability Sample.pbix. Para obter uma descrição do modelo semântico, consulte Exemplo de rentabilidade do cliente para o Power BI.
Carregue os dados do Power BI em FabricDataFrames, usando a função do
read_table
SemPy:dataset = "Customer Profitability Sample" customer = fabric.read_table(dataset, "Customer") customer.head()
Carregue a
State
tabela em um FabricDataFrame:state = fabric.read_table(dataset, "State") state.head()
Embora a saída desse código pareça um DataFrame pandas, você realmente inicializou uma estrutura de dados chamada a
FabricDataFrame
que suporta algumas operações úteis sobre pandas.Verifique o tipo de dados de
customer
:type(customer)
A saída confirma que
customer
é do tiposempy.fabric._dataframe._fabric_dataframe.FabricDataFrame
.'Junte-se ao
customer
estate
DataFrames:customer_state_df = customer.merge(state, left_on="State", right_on="StateCode", how='left') customer_state_df.head()
Identificar dependências funcionais
Uma dependência funcional se manifesta como uma relação um-para-muitos entre os valores em duas (ou mais) colunas dentro de um DataFrame. Essas relações podem ser usadas para detetar automaticamente problemas de qualidade de dados.
Execute a função do SemPy no DataFrame mesclado para identificar quaisquer dependências
find_dependencies
funcionais existentes entre valores nas colunas:dependencies = customer_state_df.find_dependencies() dependencies
Visualize as dependências identificadas usando a função do
plot_dependency_metadata
SemPy:plot_dependency_metadata(dependencies)
Como esperado, o gráfico de dependências funcionais mostra que a
Customer
coluna determina algumas colunas comoCity
,Postal Code
eName
.Surpreendentemente, o gráfico não mostra uma dependência funcional entre
City
ePostal Code
, provavelmente porque há muitas violações nas relações entre as colunas. Você pode usar a função doplot_dependency_violations
SemPy para visualizar violações de dependências entre colunas específicas.
Explore os dados para problemas de qualidade
Desenhe um gráfico com a função de visualização do
plot_dependency_violations
SemPy.customer_state_df.plot_dependency_violations('Postal Code', 'City')
O gráfico de violações de dependência mostra valores para
Postal Code
no lado esquerdo e valores paraCity
no lado direito. Uma aresta conecta umaPostal Code
no lado esquerdo com umaCity
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 código postal 20004, uma com a cidade "North Tower" e outra com a cidade "Washington".Além disso, a trama mostra algumas violações e muitos valores vazios.
Confirme o número de valores vazios para
Postal Code
:customer_state_df['Postal Code'].isna().sum()
50 linhas têm NA para código postal.
Solte linhas com valores vazios. Em seguida, encontre dependências usando a
find_dependencies
função. Observe o parâmetroverbose=1
extra que oferece um vislumbre do funcionamento interno do SemPy:customer_state_df2=customer_state_df.dropna() customer_state_df2.find_dependencies(verbose=1)
A entropia condicional para
Postal Code
eCity
é 0,049. Esse valor indica que há violações de dependência funcional. Antes de corrigir as violações, aumente o limite de entropia condicional do valor padrão de0.01
para0.05
, apenas para ver as dependências. Limiares mais baixos resultam em menos dependências (ou maior seletividade).Aumente o limite de entropia condicional do valor padrão de
0.01
para0.05
:plot_dependency_metadata(customer_state_df2.find_dependencies(threshold=0.05))
Se você aplicar o conhecimento de domínio de qual entidade determina valores de outras entidades, este gráfico de dependências parece preciso.
Explore mais problemas de qualidade de dados que foram detetados. Por exemplo, uma seta tracejada une
City
eRegion
, o que indica que a dependência é apenas aproximada. Essa relação aproximada pode implicar que há uma dependência funcional parcial.customer_state_df.list_dependency_violations('City', 'Region')
Dê uma olhada mais de perto em cada um dos casos em que um valor não vazio
Region
causa uma violação:customer_state_df[customer_state_df.City=='Downers Grove']
O resultado mostra a cidade de Downers Grove ocorrendo em Illinois e Nebraska. No entanto, Downer's Grove é uma cidade em Illinois, não Nebraska.
Dê uma olhada na cidade de Fremont:
customer_state_df[customer_state_df.City=='Fremont']
Há uma cidade chamada Fremont na Califórnia. No entanto, para o Texas, o motor de busca retorna Premont, não Fremont.
Também é suspeito ver violações da dependência entre
Name
eCountry/Region
, como significado pela linha pontilhada no gráfico original de violações de dependência (antes de soltar as linhas com valores vazios).customer_state_df.list_dependency_violations('Name', 'Country/Region')
Parece que um cliente, SDI Design está presente em duas regiões - Estados Unidos e Canadá. Esta ocorrência pode não ser uma violação semântica, mas pode ser apenas um caso incomum. Ainda assim, vale a pena dar uma olhada de perto:
Dê uma olhada mais de perto no design SDI do cliente:
customer_state_df[customer_state_df.Name=='SDI Design']
Uma inspeção mais aprofundada mostra que, na verdade, são dois clientes diferentes (de indústrias diferentes) com o mesmo nome.
A análise exploratória de dados é um processo empolgante, assim como a limpeza de dados. Há sempre algo que os dados estão escondendo, dependendo de como você olha para eles, o que você quer perguntar e assim por diante. O link semântico fornece novas ferramentas que você pode usar para obter mais com seus dados.
Conteúdos relacionados
Confira outros tutoriais para link semântico / SemPy:
- Tutorial: Limpar dados com dependências funcionais
- Tutorial: Extrair e calcular medidas do Power BI a partir de um bloco de notas 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) (visualização)