Delen via


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.

Schermopname van semantische functies in suggesties voor automatisch aanvullen.

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 retourneren true 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 en col_city parameters worden geannoteerd met CountryMatcher respectievelijk CityMatcher. 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, inten datetime floatom 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.