BigQuery DataFrames を使用する
BigQuery DataFrames は、BigQuery エンジンによる Pythonic DataFrame と ML API を提供します。BigQuery DataFrames は、オープンソースのパッケージです。 pip install --upgrade bigframes
を実行すると、最新バージョンをインストールできます。
BigQuery DataFrames には、次の 3 つのライブラリが用意されています。
bigframes.pandas
は、BigQuery でデータの分析と操作に使用できる pandas API を提供します。多くのワークロードは、インポートをいくつか変更するだけで pandas から BigFrames に移行できます。bigframes.pandas
API は、テラバイト単位の BigQuery データの処理をサポートするようにスケーラブルで、BigQuery クエリエンジンを使用して計算を実行します。bigframes.bigquery
には、相当するものが pandas にない BigQuery SQL 関数が多く用意されています。bigframes.ml
は、ML 用の scikit-learn API に似た API を提供します。BigQuery DataFrames の ML 機能を使用すると、データを前処理してから、そのデータでモデルをトレーニングできます。また、これらのアクションを連結してデータ パイプラインを作成することもできます。
必要なロール
このドキュメントのタスクを完了するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
BigQuery ジョブユーザー (
roles/bigquery.jobUser
) -
BigQuery 読み取りセッション ユーザー (
roles/bigquery.readSessionUser
) -
BigQuery ノートブックで BigQuery DataFrames を使用する:
-
BigQuery ユーザー (
roles/bigquery.user
) -
ノートブック ランタイム ユーザー (
roles/aiplatform.notebookRuntimeUser
) -
コード作成者 (
roles/dataform.codeCreator
)
-
BigQuery ユーザー (
-
BigQuery DataFrames リモート関数を使用する。
-
BigQuery データ編集者 (
roles/bigquery.dataEditor
) -
BigQuery Connection 管理者 (
roles/bigquery.connectionAdmin
) -
Cloud Functions デベロッパー(
roles/cloudfunctions.developer
) -
サービス アカウント ユーザー(
roles/iam.serviceAccountUser
) -
Storage オブジェクト閲覧者 (
roles/storage.objectViewer
)
-
BigQuery データ編集者 (
-
BigQuery DataFrames ML リモートモデルを使用する:
BigQuery 接続管理者 (
roles/bigquery.connectionAdmin
)
ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
また、BigQuery DataFrames リモート関数または BigQuery DataFrames ML リモートモデルを使用する場合は、デフォルトの BigQuery 接続を使用している場合はプロジェクト IAM 管理者ロール(roles/resourcemanager.projectIamAdmin
)、事前構成済みの接続を使用している場合はブラウザロール(roles/browser
)が必要です。この要件は、bigframes.pandas.options.bigquery.skip_bq_connection_check
オプションを True
に設定することで回避できます。この場合、接続(デフォルトまたは事前構成)は存在チェックや権限チェックなしでそのまま使用されます。事前構成された接続を使用して接続チェックをスキップする場合は、次の点を確認してください。
- 接続が適切な場所に作成されている。
- BigQuery DataFrames リモート関数を使用している場合、サービス アカウントにはプロジェクトに対する Cloud Run 起動元ロール(
roles/run.invoker
)があります。 - BigQuery DataFrames ML リモートモデルを使用している場合、サービス アカウントにはプロジェクトに対する Vertex AI ユーザーロール(
roles/aiplatform.user
)があります。
ノートブック、Python REPL、コマンドラインなどのインタラクティブ環境でエンドユーザー認証を実行する場合は、必要に応じて BigQuery DataFrames が認証を要求します。それ以外の場合は、さまざまな環境でアプリケーションのデフォルト認証情報を設定する方法をご覧ください。
インストール オプションを構成する
BigQuery DataFrames をインストールしたら、次のオプションを指定できます。
場所とプロジェクト
BigQuery DataFrames を使用するロケーションとプロジェクトを指定する必要があります。
ノートブックのロケーションとプロジェクトは、次の方法で定義できます。
データ処理のロケーション
BigQuery DataFrames はスケールすることを考慮して設計されており、BigQuery サービス上にデータと処理を保持することで実現しています。ただし、DataFrame オブジェクトや Series オブジェクトで .to_pandas()
を呼び出すと、クライアント マシンのメモリにデータを取り込むことができます。この方法を選択した場合は、クライアント マシンのメモリ制限が適用されます。
セッションの場所
BigQuery DataFrames は、メタデータの管理に内部的にローカル セッション オブジェクトを使用します。このセッションはロケーションに関連付けられます。BigQuery DataFrames は、デフォルトのロケーションとして US
マルチリージョンを使用しますが、session_options.location
を使用して別のロケーションを設定できます。セッション内の各クエリは、そのセッションが作成されたロケーションで実行されます。ユーザーが read_gbq/read_gbq_table/read_gbq_query()
で開始し、直接または SQL ステートメントでテーブルを指定すると、BigQuery DataFrames により、テーブルのロケーションが bf.options.bigquery.location
に自動的に入力されます。
作成した DataFrame オブジェクトや Series オブジェクトのロケーションをリセットする場合は、bigframes.pandas.close_session()
を実行してセッションを閉じます。その後、bigframes.pandas.options.bigquery.location
を再利用して別のロケーションを指定できます。
read_gbq()
では、クエリ対象のデータセットが US
のマルチリージョンにない場合は、ロケーションを指定する必要があります。別のロケーションからテーブルを読み取ろうとすると、NotFound
例外が発生します。
BigQuery DataFrames バージョン 2.0 に移行する
BigQuery DataFrames バージョン 2.0 では、BigQuery DataFrames API のセキュリティとパフォーマンスが改善され、新機能が追加され、互換性のない変更が導入されています。このドキュメントでは、変更点と移行ガイダンスについて説明します。2.0 バージョンをインストールする前に、最新バージョン 1.x の BigQuery DataFrames を使用して、これらの推奨事項を適用できます。
BigQuery DataFrames バージョン 2.0 には、次のような利点があります。
allow_large_results
はデフォルトでFalse
に設定されているため、クライアントに結果を返すクエリを実行すると、クエリの実行速度が速くなり、作成されるテーブルが少なくなります。これにより、特に物理バイト課金を使用している場合は、ストレージ費用を削減できます。- BigQuery DataFrames によってデプロイされるリモート関数のセキュリティがデフォルトで強化されました。
BigQuery DataFrames バージョン 2.0 をインストールする
破壊的な変更を回避するには、requirements.txt
ファイル(bigframes==1.42.0
など)または pyproject.toml
ファイル(dependencies = ["bigframes = 1.42.0"]
など)で BigQuery DataFrames の特定のバージョンに固定します。最新バージョンを試す準備ができたら、pip install --upgrade bigframes
を実行して最新バージョンの BigQuery DataFrames をインストールできます。
allow_large_results
オプションを使用する
BigQuery には、クエリジョブの最大レスポンス サイズの上限があります。BigQuery DataFrames バージョン 2.0 以降では、BigQuery DataFrames は、クライアントに結果を返すメソッド(peek()
、to_pandas()
、to_pandas_batches()
など)でデフォルトでこの上限を適用します。ジョブから大きな結果が返される場合は、BigQueryOptions
オブジェクトで allow_large_results
を True
に設定して、破壊的な変更を回避できます。このオプションは、BigQuery DataFrames バージョン 2.0 ではデフォルトで False
に設定されています。
import bigframes.pandas as bpd bpd.options.bigquery.allow_large_results = True
allow_large_results
オプションをオーバーライドするには、to_pandas()
メソッドなどの allow_large_results
パラメータを使用します。次に例を示します。
bf_df = bpd.read_gbq(query) # ... other operations on bf_df ... pandas_df = bf_df.to_pandas(allow_large_results=True)
@remote_function
デコレータを使用する
BigQuery DataFrames バージョン 2.0 では、@remote_function
デコレーターのデフォルト動作が変更されています。
曖昧なパラメータにキーワード引数が適用される
意図しないパラメータに値を渡さないようにするため、BigQuery DataFrames バージョン 2.0 以降では、次のパラメータにキーワード引数を使用することを義務付けています。
bigquery_connection
reuse
name
packages
cloud_function_service_account
cloud_function_kms_key_name
cloud_function_docker_repository
max_batching_rows
cloud_function_timeout
cloud_function_max_instances
cloud_function_vpc_connector
cloud_function_memory_mib
cloud_function_ingress_settings
これらのパラメータを使用する場合は、パラメータ名を指定します。次に例を示します。
@remote_function( name="my_remote_function", ... ) def my_remote_function(parameter: int) -> str: return str(parameter)
サービス アカウントを設定する
バージョン 2.0 以降、BigQuery DataFrames は、デプロイする Cloud Run functions にデフォルトで Compute Engine サービス アカウントを使用しなくなりました。デプロイする関数の権限を制限するには、
- 最小限の権限を持つサービス アカウントを作成する。
- サービス アカウントのメールアドレスを
@remote_function
デコレータのcloud_function_service_account
パラメータに指定します。
次に例を示します。
@remote_function( cloud_function_service_account="my-service-account@my-project.s3ns-system.iam.gserviceaccount.com", ... ) def my_remote_function(parameter: int) -> str: return str(parameter)
Compute Engine サービス アカウントを使用する場合は、@remote_function
デコレーターの cloud_function_service_account
パラメータを "default"
に設定できます。次に例を示します。
# This usage is discouraged. Use only if you have a specific reason to use the # default Compute Engine service account. @remote_function(cloud_function_service_account="default", ...) def my_remote_function(parameter: int) -> str: return str(parameter)
上り(内向き)設定を設定する
バージョン 2.0 では、BigQuery DataFrames は、"internal-only"
にデプロイする Cloud Run functions の Ingress 設定を設定します。以前は、上り(内向き)の設定はデフォルトで "all"
に設定されていました。上り(内向き)の設定を変更するには、@remote_function
デコレータの cloud_function_ingress_settings
パラメータを設定します。次に例を示します。
@remote_function(cloud_function_ingress_settings="internal-and-gclb", ...) def my_remote_function(parameter: int) -> str: return str(parameter)
カスタム エンドポイントを使用する
BigQuery DataFrames バージョン 2.0 より前では、リージョンがリージョン サービス エンドポイントと bigframes.pandas.options.bigquery.use_regional_endpoints = True
をサポートしていない場合、BigQuery DataFrames はロケーション エンドポイントにフォールバックしていました。BigQuery DataFrames バージョン 2.0 では、このフォールバック動作が削除されます。バージョン 2.0 でロケーション エンドポイントに接続するには、bigframes.pandas.options.bigquery.client_endpoints_override
オプションを設定します。次に例を示します。
import bigframes.pandas as bpd bpd.options.bigquery.client_endpoints_override = { "bqclient": "https://LOCATION-bigquery.googleapis.com", "bqconnectionclient": "LOCATION-bigqueryconnection.googleapis.com", "bqstoragereadclient": "LOCATION-bigquerystorage.googleapis.com", }
LOCATION は、接続する BigQuery ロケーションの名前に置き換えます。
bigframes.ml.llm
モジュールを使用する
BigQuery DataFrames バージョン 2.0 では、GeminiTextGenerator
のデフォルトの model_name
が "gemini-2.0-flash-001"
に更新されました。今後デフォルト モデルが変更された場合に破損しないように、model_name
を直接指定することをおすすめします。
import bigframes.ml.llm model = bigframes.ml.llm.GeminiTextGenerator(model_name="gemini-2.0-flash-001")
入力と出力
bigframes.pandas
ライブラリを使用すると、ローカル CSV ファイル、Cloud Storage ファイル、pandas
DataFrame、BigQuery モデル、BigQuery 関数など、さまざまなソースのデータにアクセスできます。その後、そのデータを BigQuery DataFrames DataFrame に読み込むことができます。BigQuery DataFrames から BigQuery テーブルを作成することもできます。
BigQuery テーブルまたはクエリからデータを読み込む
次の方法で、BigQuery テーブルまたはクエリから DataFrame を作成できます。
CSV ファイルからデータを読み込む
DataFrame は、ローカルまたは Cloud Storage CSV ファイルから次の方法で作成できます。
データ型
BigQuery DataFrames は、次の numpy と pandas の dtype をサポートしています。
BigQuery | BigQuery DataFrames と pandas |
---|---|
ARRAY |
pandas.ArrowDtype(pa.list_()) |
BOOL |
pandas.BooleanDtype() |
DATE |
pandas.ArrowDtype(pa.date32()) |
DATETIME |
pandas.ArrowDtype(pa.timestamp("us")) |
FLOAT64 |
pandas.Float64Dtype() |
GEOGRAPHY |
|
INT64 |
pandas.Int64Dtype() |
JSON |
pandas バージョン 3.0 以降と pyarrow バージョン 19.0 以降では pandas.ArrowDtype(pa.json_(pa.string()) 。それ以外の場合は、JSON 列は pandas.ArrowDtype(db_dtypes.JSONArrowType()) として公開されます。 |
STRING |
pandas.StringDtype(storage="pyarrow") |
STRUCT |
pandas.ArrowDtype(pa.struct()) |
TIME |
pandas.ArrowDtype(pa.time64("us")) |
TIMESTAMP |
pandas.ArrowDtype(pa.timestamp("us", tz="UTC")) |
BigQuery DataFrames では、以下の BigQuery データ型をサポートしていません。
NUMERIC
BIGNUMERIC
INTERVAL
RANGE
他のすべての BigQuery データ型はオブジェクト型として表示されます。
データの操作
以降のセクションでは、BigQuery DataFrame のデータ操作機能について説明します。説明されている関数は bigframes.bigquery
ライブラリにあります。
pandas API
BigQuery DataFrames の注目すべき機能は、bigframes.pandas
API が pandas ライブラリの API に似せて設計されていることです。この設計により、データ操作タスクに使い慣れた構文パターンを使用できます。BigQuery DataFrames API で定義されたオペレーションはサーバーサイドで実行され、BigQuery 内に保存されているデータを直接操作するため、BigQuery からデータセットを転送する必要がなくなります。
BigQuery DataFrames でサポートされている pandas API を確認するには、サポートされている pandas API をご覧ください。
データの検査と操作
bigframes.pandas
API を使用して、データの検査と計算のオペレーションを実行できます。次のコードサンプルでは、bigframes.pandas
ライブラリを使用して body_mass_g
列を検査し、平均 body_mass
を計算して、species
ごとの平均 body_mass
を計算します。
BigQuery ライブラリ
BigQuery ライブラリには、pandas に相当するものがない BigQuery SQL 関数があります。以降のセクションでは、いくつかの例を示します。
配列値を処理する
bigframes.bigquery
ライブラリの bigframes.bigquery.array_agg()
関数を使用して、groupby
オペレーションの後に値を集計できます。
array_length()
配列関数と array_to_string()
配列関数を使用することもできます。
構造体シリーズを作成する
bigframes.bigquery
ライブラリの bigframes.bigquery.struct()
関数を使用して、DataFrame 内の各列のサブフィールドを含む新しい構造体シリーズを作成できます。
タイムスタンプを Unix エポックに変換する
bigframes.bigquery
ライブラリの bigframes.bigquery.unix_micros()
関数を使用して、タイムスタンプを Unix マイクロ秒に変換できます。
unix_seconds()
と unix_millis()
の時間関数を使用することもできます。
SQL スカラー関数を使用する
bigframes.bigquery
ライブラリの bigframes.bigquery.sql_scalar()
関数を使用して、単一列の式を表す任意の SQL 構文にアクセスできます。
カスタム Python 関数
BigQuery DataFrames を使用すると、カスタム Python 関数を BigQuery アーティファクトに変換し、BigQuery DataFrames オブジェクトで大規模に実行できます。この拡張機能のサポートにより、BigQuery DataFrames と SQL API で可能な範囲を超えるオペレーションを実行できるため、オープンソース ライブラリを活用できます。この拡張メカニズムの 2 つのバリエーションについては、以降のセクションで説明します。
ユーザー定義関数(UDF)
UDF(プレビュー)を使用すると、カスタム Python 関数を Python UDF に変換できます。使用例については、永続的な Python UDF を作成するをご覧ください。
BigQuery DataFrames で UDF を作成すると、指定したデータセットに Python UDF として BigQuery ルーティンが作成されます。サポートされているパラメータの一覧については、udf をご覧ください。
クリーンアップ
Trusted Cloud コンソールまたは他のツールでクラウド アーティファクトを直接クリーンアップするだけでなく、明示的な名前引数を使用して作成された BigQuery DataFrames UDF を bigframes.pandas.get_global_session().bqclient.delete_routine(routine_id)
コマンドを使用してクリーンアップすることもできます。
要件
BigQuery DataFrames UDF を使用するには、プロジェクトで BigQuery API を有効にします。プロジェクトで bigquery_connection
パラメータを指定する場合は、BigQuery Connection API も有効にする必要があります。
制限事項
- UDF のコードは自己完結している必要があります。つまり、関数本体の外部で定義されたインポートまたは変数への参照を含めることはできません。
- UDF のコードは、クラウドでコードが実行される環境である Python 3.11 と互換性がある必要があります。
- 関数コードで些細な変更(変数名の変更や改行の挿入など)を行った後に UDF 定義コードを再実行すると、これらの変更が関数の動作に影響しない場合でも、UDF が再作成されます。
- ユーザーコードは、BigQuery ルーティンに対する読み取りアクセス権を持つユーザーに表示されるため、機密性の高いコンテンツは慎重に含める必要があります。
- プロジェクトには、BigQuery のロケーションに一度に最大 1,000 個の Cloud Run functions を含めることができます。
BigQuery DataFrames UDF は、ユーザー定義の BigQuery Python 関数をデプロイします。これには関連する制限事項が適用されます。
リモート関数
BigQuery DataFrames を使用すると、カスタム スカラー関数を BigQuery リモート関数に変換できます。使用例については、リモート関数を作成するをご覧ください。サポートされているパラメータの一覧については、remote_function をご覧ください。
BigQuery DataFrames でリモート関数を作成すると、次のものが作成されます。
- Cloud Run 関数。
- BigQuery 接続。デフォルトでは、
bigframes-default-connection
という名前の接続が使用されます。必要に応じて、事前構成済みの BigQuery 接続も使用できます。この場合、接続の作成はスキップされます。デフォルト接続のサービス アカウントには、Cloud Run ロール(roles/run.invoker
)が付与されます。 - BigQuery 接続で作成された Cloud Run 関数を使用する BigQuery リモート関数。
BigQuery 接続は、BigQuery DataFrames セッションと同じロケーションに、カスタム関数定義で指定した名前を使用して作成されます。接続を表示して管理するには、次の手順を行います。
Trusted Cloud コンソールで、[BigQuery] ページに移動します。
リモート関数を作成したプロジェクトを選択します。
[エクスプローラ] ペインでプロジェクトを開き、[外部接続] を開きます。
BigQuery リモート関数は、指定したデータセットまたは匿名データセット(非表示のデータセットの一種)に作成されます。作成時にリモート関数の名前を設定しないと、BigQuery DataFrames は bigframes
で始まるデフォルトの名前を適用します。ユーザー指定のデータセットに作成されたリモート関数を表示して管理するには、次の操作を行います。
Trusted Cloud コンソールで、[BigQuery] ページに移動します。
リモート関数を作成したプロジェクトを選択します。
[エクスプローラ] ペインで、プロジェクトを開き、リモート関数を作成したデータセットを開いて、[ルーティン] を開きます。
Cloud Run functions を表示して管理するには、次の操作を行います。
[Cloud Run] ページに移動します。
関数を作成したプロジェクトを選択します。
使用可能なサービスのリストで [関数のデプロイタイプ] でフィルタします。
BigQuery DataFrames によって作成された関数を特定するには、
bigframes
接頭辞が付いた関数名を探します。
クリーンアップ
Trusted Cloud コンソールまたは他のツールでクラウド アーティファクトを直接クリーンアップするだけでなく、明示的な名前引数なしで作成された BigQuery リモート関数と、それに関連する Cloud Run 関数を次の方法でクリーンアップできます。
- BigQuery DataFrames セッションの場合は、
session.close()
コマンドを使用します。 - デフォルトの BigQuery DataFrames セッションの場合は、
bigframes.pandas.close_session()
コマンドを使用します。 session_id
を使用した過去のセッションの場合は、bigframes.pandas.clean_up_by_session_id(session_id)
コマンドを使用します。
明示的な名前引数で作成された BigQuery リモート関数と、それに関連する Cloud Run 関数は、bigframes.pandas.get_global_session().bqclient.delete_routine(routine_id)
コマンドを使用してクリーンアップすることもできます。
要件
BigQuery DataFrames リモート関数を使用するには、次の API を有効にする必要があります。
- BigQuery API(
bigquery.googleapis.com
) - BigQuery Connection API(
bigqueryconnection.googleapis.com
) - Cloud Functions API(
cloudfunctions.googleapis.com
) - Cloud Run Admin API(
run.googleapis.com
) - Artifact Registry API(
artifactregistry.googleapis.com
) - Cloud Build API(
cloudbuild.googleapis.com
) - Compute Engine API(
compute.googleapis.com
) Cloud Resource Manager API(
cloudresourcemanager.googleapis.com
)この要件を回避するには、
bigframes.pandas.options.bigquery.skip_bq_connection_check
オプションをTrue
に設定します。この場合、接続(デフォルトまたは事前構成済み)は、接続の存在を確認することや、権限を検証することなく、そのまま使用されます。
制限事項
- リモート関数を初めて作成してから、使用可能になるまでに約 90 秒かかります。追加のパッケージ依存関係により、レイテンシが増加する可能性があります。
- 関数コードの周辺で些細な変更(変数の名前変更、新しい行の挿入、ノートブックへの新しいセルの挿入など)を行った後にリモート関数定義コードを再実行すると、これらの変更が関数の動作に影響しない場合でも、リモート関数が再作成されることがあります。
- ユーザーコードは、Cloud Run functions に対する読み取り権限を持つユーザーに公開されるため、機密性の高いコンテンツは慎重に含める必要があります。
- プロジェクトには、リージョンで一度に最大 1,000 個の Cloud Run 関数を含めることができます。詳しくは、割り当てをご覧ください。
ML と AI
以降のセクションでは、BigQuery DataFrame の ML 機能と AI 機能について説明します。これらの機能は bigframes.ml
ライブラリを使用します。
ML のロケーション
bigframes.ml
ライブラリは、BigQuery ML と同じロケーションをサポートしています。BigQuery ML モデル予測および他の ML 関数は、すべての BigQuery リージョンでサポートされています。モデル トレーニングのサポートはリージョンによって異なります。詳細については、BigQuery ML のロケーションをご覧ください。
データを前処理する
bigframes.ml.preprocessing モジュールと bigframes.ml.compose モジュールを使用して、推定ツール(モデル)で使用するデータを準備するために変換ツールを作成します。BigQuery DataFrames では、次の変換が用意されています。
bigframes.ml.preprocessing
モジュールの KBinsDiscretizer クラスを使用し、連続データを区間データにビン化します。bigframes.ml.preprocessing
モジュールの LabelEncoder クラスを使用し、ターゲット ラベルを整数値として正規化します。bigframes.ml.preprocessing
モジュールの MaxAbsScaler クラスを使用し、各特徴量を最大絶対値で[-1, 1]
の範囲にスケールします。bigframes.ml.preprocessing
モジュールの MinMaxScaler クラスを使用し、各特徴量を範囲[0, 1]
にスケーリングすることで特徴量を標準化します。bigframes.ml.preprocessing
モジュールの StandardScaler クラスを使用し、平均値を除去して、単位分散にスケーリングすることで特徴を標準化します。bigframes.ml.preprocessing
モジュールの OneHotEncoder クラスを使用し、カテゴリ値を数値形式に変換します。bigframes.ml.compose
モジュールの ColumnTransformer クラスを使用し、DataFrame 列にトランスフォーマーを適用します。
モデルのトレーニング
BigQuery DataFrames でモデルをトレーニングする推定ツールを作成できます。
クラスタ化モデル
bigframes.ml.cluster モジュールを使用して、クラスタリング モデルの推定ツールを作成できます。
- KMeans クラスを使用して、K 平均法クラスタリング モデルを作成します。これらのモデルはデータのセグメンテーションに使用します。たとえば、お客様のセグメントを特定します。K 平均法は教師なし学習にあたるため、モデルのトレーニングを行う際に、トレーニングや評価用にラベルの指定やデータの分割を行う必要はありません。
bigframes.ml.cluster
モジュールを使用して、クラスタリング モデル用の推定ツールを作成できます。
次のコードサンプルは、データ セグメンテーション用の K 平均法クラスタリング モデルを作成するために bigframes.ml.cluster KMeans
クラスを使用する場合を示しています。
分解モデル
bigframes.ml.decomposition モジュールを使用して、分解モデルの推定ツールを作成できます。
- PCA クラスを使用して、主成分分析(PCA)モデルを作成します。このモデルは、主成分を計算し、その結果を使用してデータに基底変換を行うために使用します。これにより、データのバリエーションをできるだけ多く保持しながら、各データポイントを最初のいくつかの主成分にのみ射影して低次元のデータを取得することで、次元数を削減します。
モデルのアンサンブル
bigframes.ml.ensemble モジュールを使用して、アンサンブル モデルの推定ツールを作成できます。
RandomForestClassifier クラスを使用して、ランダム フォレスト分類モデルを作成します。このモデルは、分類を目的とする複数の学習方法のディシジョン ツリーを構築するために使用します。
RandomForestRegressor クラスを使用して、ランダム フォレスト回帰モデルを作成します。このモデルは、回帰を目的とする複数の学習方法のディシジョン ツリーを構築するために使用します。
XGBClassifier クラスを使用して、勾配ブーストツリー分類モデルを作成します。このモデルは、分類を目的とする複数の学習方法のディシジョン ツリーを追加的に構築するために使用します。
XGBRegressor クラスを使用して、勾配ブーストツリー回帰モデルを作成します。このモデルは、回帰を目的とする複数の学習方法のディシジョン ツリーを追加的に構築するために使用します。
予測のモデル
bigframes.ml.forecasting モジュールを使用して、予測モデルの推定ツールを作成できます。
- ARIMAPlus クラスを使用して、時系列予測モデルを作成します。
インポートされたモデル
インポートしたモデルの推定ツールは、bigframes.ml.imported モジュールを使用して作成できます。
ONNXModel クラスを使用して、Open Neural Network Exchange(ONNX)モデルをインポートします。
TensorFlowModel クラスを使用して、TensorFlow モデルをインポートします。
XGBoostModel クラスを使用して、XGBoostModel モデルをインポートします。
線形モデル
bigframes.ml.linear_model モジュールを使用して、線形モデルの推定ツールを作成します。
LinearRegression クラスを使用して、線形回帰モデルを作成します。このモデルは予測に使用します。たとえば、特定の日の商品の売上を予測します。
LogisticRegression クラスを使用して、ロジスティック回帰モデルを作成します。このモデルは、入力が
low-value
、medium-value
、high-value
のいずれであるかなど、2 つ以上の有効な値を分類するために使用します。
次のコードサンプルは、bigframes.ml
を使用して次のことを行います。
- BigQuery からデータを読み込む
- トレーニング データをクリーニングして準備する
- bigframes.ml.LinearRegression 回帰モデルを作成して適用する
大規模言語モデル
bigframes.ml.llm モジュールを使用して、LLM の推定ツールを作成できます。
GeminiTextGenerator クラスを使用して、Gemini テキスト生成モデルを作成します。このモデルは、テキスト生成タスクに使用します。
bigframes.ml.llm モジュールを使用して、リモート大規模言語モデル(LLM)の推定ツールを作成します。
次のコードサンプルは、bigframes.ml.llm
GeminiTextGenerator クラスを使用して、コード生成用の Gemini モデルを作成する方法を示しています。
リモートモデル
BigQuery DataFrames ML リモートモデル(bigframes.ml.remote
または bigframes.ml.llm
)を使用するには、次の API を有効にする必要があります。
Cloud Resource Manager API(
cloudresourcemanager.googleapis.com
)この要件を回避するには、
bigframes.pandas.options.bigquery.skip_bq_connection_check
オプションをTrue
に設定します。この場合、接続(デフォルトまたは事前構成済み)は、接続の存在を確認することや、権限を検証することなく、そのまま使用されます。
BigQuery DataFrames でリモートモデルを作成すると、BigQuery 接続が作成されます。デフォルトでは、bigframes-default-connection
という名前の接続が使用されます。必要に応じて、事前構成済みの BigQuery 接続も使用できます。この場合、接続の作成はスキップされます。デフォルト接続のサービス アカウントには、プロジェクトの Vertex AI ユーザーロール(roles/aiplatform.user
)が付与されます。
パイプラインの作成
ML パイプラインは、bigframes.ml.pipeline モジュールを使用して作成できます。パイプラインを使用すると、さまざまなパラメータを設定しながら、複数の ML ステップを組み合わせてクロス検証できます。これにより、コードが簡素化され、データの前処理ステップと推定ツールを一緒にデプロイできます。
Pipeline クラスを使用して、最終的な推定ツールを含む変換のパイプラインを作成します。
モデルを選択する
bigframes.ml.model_selection モジュールを使用して、トレーニング データセットとテスト データセットを分割し、最適なモデルを選択します。
次のコードサンプルに示すように、
train_test_split
関数を使用して、データをトレーニング セットとテスト(評価)セットに分割します。X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
次のコードサンプルに示すように、
KFold
クラスとKFold.split
メソッドを使用して、マルチフォールドのトレーニング セットとテストセットを作成し、モデルをトレーニングして評価します。この機能は、小規模なデータセットに役立ちます。kf = KFold(n_splits=5) for i, (X_train, X_test, y_train, y_test) in enumerate(kf.split(X, y)): # Train and evaluate models with training and testing sets
次のコードサンプルに示すように、
cross_validate
関数を使用して、マルチフォールドのトレーニング セットとテストセットを自動的に作成し、モデルをトレーニングして評価し、各フォールドの結果を取得します。scores = cross_validate(model, X, y, cv=5)
パフォーマンスの最適化
このセクションでは、BigQuery DataFrame のパフォーマンスを最適化する方法について説明します。
部分順序モード
BigQuery DataFrames には順序モード機能が用意されています。より効率的なクエリを生成するには、ordering_mode
プロパティを partial
に設定します。
partial
順序モードと対照的に、デフォルトの strict
モードでは、すべての行に全順序を作成します。全順序では、DataFrame.iloc
プロパティを使用して行に順序ベースでアクセスできるため、BigQuery DataFrames と pandas の互換性が向上します。ただし、全順序とその順序のデフォルトのシーケンシャル インデックスの場合、列フィルタも行フィルタも、read_gbq
関数と read_gbq_table
関数にパラメータとして適用されない限り、スキャンされるバイト数は削減されません。DataFrame 内のすべての行に全順序を設定するため、BigQuery DataFrames はすべての行のハッシュを作成します。これにより、行フィルタと列フィルタが無視され、データ全体がスキャンされる可能性があります。
ordering_mode
プロパティを partial
に設定すると、BigQuery DataFrame がすべての行の全順序を生成しなくなります。部分順序モードでは、DataFrame.iloc
プロパティなど、すべての行の全順序を必要とする機能も無効になります。部分順序モードでは、順序付けでシーケンシャル インデックスではなく、DefaultIndexKind
クラスが null インデックスに設定されます。
ordering_mode
プロパティが partial
に設定された DataFrame をフィルタリングする場合、BigQuery DataFrames はシーケンシャル インデックスに欠落している行を計算する必要がないため、より高速で効率的なクエリを生成できます。BigQuery DataFrames API は、厳密な順序モードのデフォルト エクスペリエンスと同様に、使い慣れた pandas API です。ただし、部分順序モードは一般的な pandas の動作とは異なります。たとえば、部分順序モードではインデックスによる暗黙的な結合は実行されません。
部分順序モードと厳密な順序モードの両方で、使用した BigQuery リソースに対して料金が発生します。ただし、部分順序モードを使用すると、クラスタ列とパーティション列の行フィルタによって処理されるバイト数が減るため、大規模なクラスタ化テーブルやパーティション分割テーブルを操作する際の費用を削減できます。
用途
部分順序を使用するには、次のコードサンプルに示すように、BigQuery DataFrames で他のオペレーションを実行する前に ordering_mode
プロパティを partial
に設定します。
部分順序モードにはシーケンシャル インデックスがないため、関連のない BigQuery DataFrame は暗黙的に結合されません。代わりに、DataFrame.merge
メソッドを明示的に呼び出して、異なるテーブル式から派生した 2 つの BigQuery DataFrame を結合する必要があります。
Series.unique()
機能と Series.drop_duplicates()
機能は、部分順序モードに対応していません。代わりに、groupby
メソッドを使用して、次のように一意の値を検索します。
部分順序モードでは、DataFrame.head(n)
関数と Series.head(n)
関数の出力がすべての呼び出しでべき等であるとは限りません。小さな任意のデータサンプルをダウンロードするには、DataFrame.peek()
メソッドまたは Series.peek()
メソッドを使用します。
ordering_mode = "partial"
プロパティを使用する詳細なチュートリアルについては、部分順序モードの使用方法を示す BigQuery DataFrames ノートブックをご覧ください。
トラブルシューティング
部分順序モードの DataFrame には順序やインデックスが常に存在するとは限らないため、pandas 互換のメソッドを使用すると、次の問題が発生することがあります。
順序必須エラー
一部の機能(DataFrame.head()
関数や DataFrame.iloc
関数など)では、順序が必須です。順序が必要な機能の一覧については、サポートされている pandas API で「順序が必要」列をご覧ください。
オブジェクトに順序がない場合、オペレーションは失敗し、次のような OrderRequiredError
メッセージが表示されます。
OrderRequiredError: Op iloc requires an ordering. Use .sort_values or .sort_index to provide an ordering.
エラー メッセージに記載されているように、DataFrame.sort_values()
メソッドを使用して順序を指定し、列または列で並べ替えることができます。DataFrame.groupby()
オペレーションなどの他のオペレーションは、グループキー全体の全順序を暗黙的に提供します。
すべての行に対する完全な安定した全順序であることが決定できない場合、後続のオペレーションで次のような AmbiguousWindowWarning
メッセージが表示されることがあります。
AmbiguousWindowWarning: Window ordering may be ambiguous, this can cause unstable results.
ワークロードが非決定的結果に対応している場合、または指定した順序が全順序であることを手動で確認できる場合は、次の方法で AmbiguousWindowWarning
メッセージをフィルタできます。
null インデックス エラー
DataFrame.unstack()
プロパティや Series.interpolate()
プロパティなど、インデックスが必要な機能もあります。インデックスが必要な機能の一覧については、サポートされている pandas API で「インデックスが必要」列をご覧ください。
部分順序モードでインデックスを必要とするオペレーションを使用すると、オペレーションは次のような NullIndexError
メッセージを生成します。
NullIndexError: DataFrame cannot perform interpolate as it has no index. Set an index using set_index.
エラー メッセージに記載されているように、DataFrame.set_index()
メソッドを使用してインデックスを指定し、列または列で並べ替えることができます。DataFrame.groupby()
オペレーションなどの他のオペレーションでは、as_index=False
パラメータが設定されていない限り、インデックスはグループキーに基づいて暗黙的に指定されます。
可視化
bigframes.pandas
API は、ツールの Python エコシステム全体へのゲートウェイになります。この API は高度な統計オペレーションをサポートし、BigQuery DataFrames から生成された集計を可視化できます。また、組み込みのサンプリング オペレーションを使用して、BigQuery DataFrames の DataFrame から pandas
DataFrame に切り替えることもできます。
次のステップ
- Gemini を使用して BigQuery DataFrames コードを生成する方法を学習する。
- BigQuery DataFrames を使用して PyPI からのパッケージ ダウンロードを分析する方法を学習する。
- GitHub で BigQuery DataFrames のソースコード、サンプル ノートブック、サンプルを確認する。
- BigQuery DataFrames API リファレンスを確認する。