Funções semânticas
Este artigo descreve funções semânticas e como elas podem ajudar cientistas de dados e engenheiros de dados a descobrir funções que são relevantes para o FabricDataFrame ou FabricSeries em que estão trabalhando. As funções semânticas fazem parte do recurso de link semântico do Microsoft Fabric.
Para o Spark 3.4 e superior, o pacote de núcleo de link semântico está disponível no tempo de execução padrão do Fabric, mas o pacote semantic-link-functions que inclui a lógica de função semântica (como is_holiday
) precisa ser instalado manualmente. Para atualizar para a versão mais recente da biblioteca de link semântico Python (SemPy), execute o seguinte comando:
%pip install -U semantic-link
Um FabricDataFrame expõe dinamicamente funções semânticas com base na lógica que cada função define.
Por exemplo, a is_holiday
função aparece nas sugestões de preenchimento automático quando você trabalha em um FabricDataFrame que contém uma coluna datetime e uma coluna country.
Cada função semântica usa informações sobre os dados, tipos de dados e metadados (como categorias de dados do Power BI) no FabricDataFrame ou FabricSeries para determinar sua relevância para os dados específicos em que você está trabalhando.
As funções semânticas são automaticamente descobertas quando anotadas com o @semantic_function
decorador.
Você pode pensar em funções semânticas como sendo como métodos de extensão C# aplicados ao conceito DataFrame.
Sugestões de preenchimento automático de funções semânticas
As funções semânticas estão disponíveis nas sugestões de preenchimento automático quando você trabalha com um FabricDataFrame ou FabricSeries. Use Ctrl+Espaço para acionar o preenchimento automático.
O exemplo de código a seguir especifica manualmente os metadados para um FabricDataFrame:
from sempy.fabric import FabricDataFrame
df = FabricDataFrame(
{"country": ["US", "AT"],
"lat": [40.7128, 47.8095],
"long": [-74.0060, 13.0550]},
column_metadata={"lat": {"data_category": "Latitude"}, "long": {"data_category": "Longitude"}},
)
# Convert to GeoPandas dataframe
df_geo = df.to_geopandas(lat_col="lat", long_col="long")
# Use the explore function to visualize the data
df_geo.explore()
Como alternativa, se você ler de um modelo semântico em um FabricDataFrame, os metadados serão preenchidos automaticamente.
from sempy.fabric import FabricDataFrame
# Read from semantic model
import sempy.fabric as fabric
df = fabric.read_table("my_dataset_name", "my_countries")
# Convert to GeoPandas dataframe
df_geo = df.to_geopandas(lat_col="lat", long_col="long")
# Use the explore function to visualize the data
df_geo.explore()
Funções semânticas incorporadas
A biblioteca Python SemPy fornece um conjunto de funções semânticas internas que estão disponíveis prontamente. Estas funções incorporadas incluem:
is_holiday(...)
usa o pacote Python de feriados para retornartrue
se a data for um feriado no país determinado.to_geopandas(...)
converte um FabricDataFrame em um GeoPandas GeoDataFrame.parse_phonenumber(...)
usa o pacote Python de números de telefone para analisar um número de telefone em seus componentes.validators
usa o pacote Python de validadores para validar tipos de dados comuns, como números de e-mail e cartão de crédito.
Funções semânticas personalizadas
As funções semânticas são projetadas para extensibilidade. Você pode definir suas próprias funções semânticas dentro do seu notebook ou como módulos Python separados.
Para usar uma função semântica fora de um bloco de anotações, declare a função semântica dentro do sempy.functions
módulo. O exemplo de código a seguir mostra a definição de uma função _is_capital
semântica que retorna true
se uma cidade é a capital de um país.
from sempy.fabric import FabricDataFrame, FabricSeries
from sempy.fabric.matcher import CountryMatcher, CityMatcher
from sempy.functions import semantic_function, semantic_parameters
@semantic_function("is_capital")
@semantic_parameters(col_country=CountryMatcher, col_city=CityMatcher)
def _is_capital(df: FabricDataFrame, col_country: str, col_city: str) -> FabricSeries:
"""Returns true if the city is the capital of the country"""
capitals = {
"US": ["Washington"],
"AT": ["Vienna"],
# ...
}
return df[[col_country, col_city]] \
.apply(lambda row: row[1] in capitals[row[0]], axis=1)
No exemplo de código anterior:
- Os
col_country
parâmetros ecol_city
são anotados comCountryMatcher
eCityMatcher
, respectivamente. Essa anotação permite que a função semântica seja descoberta automaticamente ao trabalhar com um FabricDataFrame que tenha os metadados correspondentes. - Chamar a função também fornece tipos de dados padrão, como
str
,int
,float
edatetime
para definir as colunas de entrada necessárias. - A anotação de tipo do primeiro parâmetro
df
mostra que a função é aplicável a um FabricDataFrame em vez de um FabricSeries.