Semantische functies
In dit artikel worden semantische functies beschreven en hoe ze gegevenswetenschappers en data engineers kunnen helpen functies te detecteren die relevant zijn voor het FabricDataFrame of FabricSeries waaraan ze werken. Semantische functies maken deel uit van de semantische koppelingsfunctie van Microsoft Fabric.
Voor Spark 3.4 en hoger is het semantische koppelingskernpakket beschikbaar in de standaard fabric-runtime, maar het semantic-link-functions-pakket dat de semantische functielogica (zoals is_holiday
) bevat, moet handmatig worden geïnstalleerd. Voer de volgende opdracht uit om bij te werken naar de meest recente versie van de Python-semantische koppeling (SemPy):
%pip install -U semantic-link
Een FabricDataFrame maakt semantische functies dynamisch beschikbaar op basis van de logica die door elke functie wordt gedefinieerd.
De functie wordt bijvoorbeeld is_holiday
weergegeven in de suggesties voor automatisch aanvullen wanneer u werkt aan een FabricDataFrame dat zowel een datum/tijd-kolom als een landkolom bevat.
Elke semantische functie gebruikt informatie over de gegevens, gegevenstypen en metagegevens (zoals Power BI-gegevenscategorieën) in het FabricDataFrame of FabricSeries om de relevantie ervan te bepalen voor de specifieke gegevens waaraan u werkt.
Semantische functies worden automatisch gedetecteerd wanneer er aantekeningen worden gemaakt met de @semantic_function
decorator.
U kunt semantische functies beschouwen als C#-extensiemethoden die worden toegepast op het DataFrame-concept.
Suggesties voor automatisch aanvullen van Semantische functies
Semantische functies zijn beschikbaar in de suggesties voor automatisch aanvullen wanneer u met een FabricDataFrame of FabricSeries werkt. Gebruik Ctrl+spatiebalk om automatisch aanvullen te activeren.
In het volgende codevoorbeeld worden de metagegevens voor een FabricDataFrame handmatig opgegeven:
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()
Als u ook vanuit een semantisch model naar een FabricDataFrame leest, worden de metagegevens automatisch ingevuld.
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()
Ingebouwde semantische functies
De SemPy Python-bibliotheek biedt een set ingebouwde semantische functies die standaard beschikbaar zijn. Deze ingebouwde functies zijn onder andere:
is_holiday(...)
gebruikt het Python-pakket feestdagen om te retournerentrue
als de datum een vakantie in het opgegeven land is.to_geopandas(...)
converteert een FabricDataFrame naar een GeoPandas GeoDataFrame.parse_phonenumber(...)
gebruikt het Python-pakket met telefoonnummers om een telefoonnummer te parseren in de bijbehorende onderdelen.validators
gebruikt het Python-pakket validators om algemene gegevenstypen, zoals e-mail- en creditcardnummers, te valideren.
Aangepaste semantische functies
Semantische functies zijn ontworpen voor uitbreidbaarheid. U kunt uw eigen semantische functies definiëren in uw notebook of als afzonderlijke Python-modules.
Als u een semantische functie buiten een notebook wilt gebruiken, declareert u de semantische functie in de sempy.functions
module. In het volgende codevoorbeeld ziet u de definitie van een semantische functie _is_capital
die retourneert true
als een stad de hoofdstad van een land is.
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)
In het voorgaande codevoorbeeld:
- De
col_country
encol_city
parameters worden geannoteerd metCountryMatcher
respectievelijkCityMatcher
. Met deze aantekening kan de semantische functie automatisch worden gedetecteerd bij het werken met een FabricDataFrame met de bijbehorende metagegevens. - Het aanroepen van de functie levert ook standaardgegevenstypen zoals
str
,int
endatetime
float
om vereiste invoerkolommen te definiëren. - De typeaantekening van de eerste parameter
df
geeft aan dat de functie van toepassing is op een FabricDataFrame in plaats van een FabricSeries.