Sdílet prostřednictvím


Sémantické funkce

Tento článek popisuje sémantické funkce a způsob, jak mohou datovým vědcům a datovým inženýrům pomoct zjišťovat funkce, které jsou relevantní pro objekt FabricDataFrame nebo FabricSeries, na kterých pracují. Sémantické funkce jsou součástí funkce sémantického propojení Microsoft Fabric.

Pro Spark 3.4 a novější je základní balíček sémantických odkazů k dispozici ve výchozím modulu runtime Fabric, ale balíček sémantic-link-functions, který obsahuje logiku sémantické funkce (například is_holiday) je potřeba nainstalovat ručně. Pokud chcete aktualizovat na nejnovější verzi sémantické knihovny Pythonu (SemPy), spusťte následující příkaz:

%pip install -U semantic-link

A FabricDataFrame dynamicky zveřejňuje sémantické funkce na základě logiky, která každá funkce definuje. Funkce se například is_holiday zobrazí v návrzích automatického dokončování, když pracujete na objektu FabricDataFrame, který obsahuje sloupec datetime i sloupec země.

Každá sémantická funkce používá informace o datech, datových typech a metadatech (jako jsou kategorie dat Power BI) v objektu FabricDataFrame nebo FabricSeries k určení jeho relevance pro konkrétní data, na kterých pracujete.

Sémantické funkce se automaticky zjistí při označení dekorátorem @semantic_function . Sémantické funkce si můžete představit jako metody rozšíření jazyka C#použité v konceptu datového rámce.

Návrhy automatického dokončování sémantických funkcí

Sémantické funkce jsou k dispozici v návrzích automatického dokončování při práci s fabricDataFrame nebo FabricSeries. K aktivaci automatického dokončování použijte kombinaci kláves Ctrl+Mezerník.

Snímek obrazovky s sémantických funkcí v návrzích automatického dokončování

Následující příklad kódu ručně určuje metadata objektu 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()

Případně pokud načtete z sémantického modelu do objektu FabricDataFrame, metadata se automaticky načtou.

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()

Předdefinované sémantické funkce

Knihovna SemPy Python poskytuje sadu předdefinovaných sémantických funkcí, které jsou k dispozici předem. Mezi předdefinované funkce patří:

  • is_holiday(...) použije balíček Pythonu pro svátky , který se vrátí true , pokud je datum svátkem v dané zemi.
  • to_geopandas(...) převede prvek FabricDataFrame na GeoPandas GeoDataFrame.
  • parse_phonenumber(...)používá telefonní čísla balíčku Pythonu k analýze telefonního čísla do jejích součástí.
  • validatorspoužívá balíček validátorů Pythonu k ověření běžných datových typů, jako jsou e-maily a čísla platebních karet.

Vlastní sémantické funkce

Sémantické funkce jsou navržené pro rozšiřitelnost. V poznámkovém bloku nebo jako samostatné moduly Pythonu můžete definovat vlastní sémantické funkce.

Pokud chcete použít sémantickou funkci mimo poznámkový blok, deklarujte sémantickou funkci v modulu sempy.functions . Následující příklad kódu ukazuje definici sémantické funkce _is_capital , která vrátí true , pokud je město hlavním městem země.

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)

V předchozím příkladu kódu:

  • Parametry col_country jsou col_city opatřeny poznámkami CountryMatcher a CityMatcherv uvedeném pořadí. Tato poznámka umožňuje, aby se sémantická funkce automaticky zjistila při práci s objektem FabricDataFrame, který má odpovídající metadata.
  • Volání funkce také poskytuje standardní datové typy, jako strje , intfloat, a datetime definovat požadované vstupní sloupce.
  • Poznámka typu prvního parametru df ukazuje, že funkce je použitelná pro objekt FabricDataFrame místo FabricSeries.