セマンティック関数

この記事では、セマンティック関数について、およびデータ科学者とデータ エンジニアが、作業中の FabricDataFrame または FabricSeries に関連する関数を検出するのにどう役立つかについて説明します。 セマンティック関数は、Microsoft Fabric セマンティック リンク機能の一部です。

Spark 3.4 以降では、セマンティック リンク コア パッケージは既定の Fabric ランタイムで使用できますが、セマンティック関数ロジック (is_holiday など) を含むセマンティック リンク関数パッケージを手動でインストールする必要があります。 Python セマンティック リンク (SemPy) ライブラリの最新バージョンに更新するには、次のコマンドを実行します。

%pip install -U semantic-link

FabricDataFrame は、各関数が定義するロジックに基づいてセマンティック関数を動的に公開します。 たとえば、datetime 列と country 列の両方を含む FabricDataFrame で作業する場合、is_holiday 関数はオートコンプリート候補に表示されます。

各セマンティック関数は、FabricDataFrame または FabricSeries 内のデータ、データ型、およびメタデータ (Power BI データ カテゴリなど) に関する情報を使用して、作業している特定のデータとの関連性を判断します。

セマンティック関数は、 @semantic_function デコレーターで注釈を付けると自動的に検出されます。 セマンティック関数は、DataFrame の概念に適用される C# 拡張メソッドのようなものとして考えることができます。

セマンティック関数のオートコンプリート候補

セマンティック関数は、FabricDataFrame または FabricSeries を使用する場合のオートコンプリート候補で利用可能です。 Ctrl + Space キーを使用してオートコンプリートをトリガーします。

オートコンプリート候補のセマンティック関数のスクリーンショット。

次のコード例では、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()

あるいは、セマンティック モデルから FabricDataFrame に読み取る場合、メタデータは自動入力されます。

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

組み込みのセマンティック関数

SemPy Python ライブラリには、すぐに利用可能な一連の組み込みのセマンティック関数が用意されています。 これらの組み込み関数には次のものがあります。

  • is_holiday(...) は、holidays Python パッケージを使用して、日付が指定された国の休日である場合に true を返します。
  • to_geopandas(...) は、FabricDataFrame を GeoPandas GeoDataFrame に変換します。
  • parse_phonenumber(...) では、phone numbers Python パッケージを使用して、電話番号をそのコンポーネントに解析します。
  • validators では、validators Python パッケージを使用して、メールやクレジット カード番号などの一般的なデータ型を検証します。

カスタム セマンティック関数

セマンティック関数は、拡張性を考慮して設計されています。 ノートブック内で、または別の Python モジュールとして独自のセマンティック関数を定義できます。

ノートブック外でセマンティック関数を使用するには、セマンティック関数を sempy.functions モジュール内で宣言します。 次のコード例では、都市が国の首都である場合に true を返すセマンティック関数 _is_capital の定義を示します。

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)

上記のコード例では次のようになっています。

  • col_country パラメーターと col_city パラメーターには、それぞれ CountryMatcherCityMatcherで注釈が付けられます。 この注釈を使用すると、対応するメタデータを持つ FabricDataFrame を操作するときに、セマンティック関数を自動的に検出できます。
  • この関数を呼び出すと、必要な入力列を定義するための strintfloatdatetime などの標準データ型も提供されます。
  • 最初のパラメーター df の型注釈は、関数が FabricSeries ではなく FabricDataFrame に適用されることを示しています。