Funciones semánticas
En este artículo se describen las funciones semánticas y cómo pueden ayudar a los científicos e ingenieros de datos a detectar funciones relevantes para las instancias de FabricDataFrame o FabricSeries con las que trabajan. Las funciones semánticas forman parte de la característica de vínculo semántico de Microsoft Fabric.
Para Spark 3.4 y versiones posteriores, el paquete principal de vínculo semántico está disponible en el runtime de Fabric predeterminado, pero el paquete semantic-link-functions que incluye la lógica de función semántica (como is_holiday
) se debe instalar manualmente. Para actualizar a la versión más reciente de la biblioteca de vínculo semántico de Python (SemPy), ejecute el siguiente comando:
%pip install -U semantic-link
Una instancia de FabricDataFrame expone dinámicamente funciones semánticas basadas en la lógica definida por cada función.
Por ejemplo, la función is_holiday
aparece en las sugerencias de autocompletar cuando se trabaja en una instancia de FabricDataFrame que contiene una columna datetime y una columna de país.
Cada función semántica usa información sobre los datos, tipos de datos y metadatos (como las categorías de datos de Power BI) de FabricDataFrame o FabricSeries a fin de determinar su relevancia con los datos concretos con los que se trabaja.
Las funciones semánticas se detectan automáticamente cuando se anotan con el decorador @semantic_function
.
Puede considerar a las funciones semánticas como similares a los métodos de extensión de C# aplicados al concepto de DataFrame.
Sugerencias de autocompletar de las funciones semánticas
Las funciones semánticas están disponibles en las sugerencias de autocompletar cuando se trabaja con FabricDataFrame o FabricSeries. Puede presionar Ctrl+Espacio para activar la función de autocompletar.
En el ejemplo de código siguiente, se especifican manualmente los metadatos de una instancia de 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, si lee de un modelo semántico en una instancia de FabricDataFrame, los metadatos se rellenan automáticamente.
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()
Funciones semánticas integradas
La biblioteca de Python de SemPy proporciona un conjunto de funciones semánticas integradas que están disponibles de forma predeterminada. Estas funciones integradas son las siguientes:
is_holiday(...)
usa el paquete de Python holidays para devolvertrue
si la fecha es un día festivo en el país determinado.to_geopandas(...)
convierte un elemento FabricDataFrame en un elemento GeoDataFrame de GeoPandas.parse_phonenumber(...)
usa el paquete de Python de números de teléfono para analizar un número de teléfono en sus componentes.validators
usa el paquete validators de Python para validar tipos de datos comunes, como números de tarjeta de crédito y correo electrónico.
Funciones semánticas personalizadas
Las funciones semánticas están diseñadas para la extensibilidad. Puede definir funciones semánticas propias en el cuaderno o como módulos independientes de Python.
Para usar una función semántica fuera de un cuaderno, declare la función semántica dentro del módulo sempy.functions
. En el ejemplo de código siguiente se muestra la definición de una función semántica _is_capital
que devuelve true
si la ciudad es la capital de un 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)
En el ejemplo de código anterior:
- Los parámetros
col_country
ycol_city
se anotan conCountryMatcher
yCityMatcher
, respectivamente. Esta anotación permite que la función semántica se detecte automáticamente al trabajar con un FabricDataFrame que tenga los metadatos correspondientes. - La llamada a la función también proporciona tipos de datos estándar, como
str
,int
,float
ydatetime
para definir las columnas de entrada necesarias. - La anotación de tipo del primer parámetro
df
muestra que la función es aplicable a una instancia de FabricDataFrame, en lugar de a FabricSeries.