
BigFrames Pythonパッケージをプレビュー中のColab Enterpriseノートブックから使ってみた #GoolgeCloudNext
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
データアナリティクス事業本部 機械学習チームの鈴木です。
Google Cloud Next'23で発表された、BigQueryの新しい分析インターフェースの一つであるBigQuery Dataframes(BigFrames Pythonパッケージ)について、現在プレビュー中のColab Enterpriseノートブックから使ってみたのでご紹介します。
この記事について
Google Cloud Next'23にて、BigQueryの新しい分析インターフェースの一つであるBigQuery Dataframes(BigFrames Pythonパッケージ)が発表されました。このパッケージの2つの主要な機能について、実際の操作を通して確認してみたのでご紹介します。
また、同イベントで発表されたColab Enterprise(記事執筆時点ではプレビュー中)ではデフォルトでBigFrames Pythonパッケージがインストールされているため、Vertex AIのColab EnterpriseのコンソールよりどのようにBigQueryの操作ができるかについても確認しました。
なお、BigQueryへのノートブックからのアクセスは、現在プレビュー版で提供されているBigQuery Studioに統合されたColab Enterpriseのノートブックからが中心になっていくとも想像されますが、今回はVertex AIのコンソールよりColab Enterpriseでノートブックを作成して試してみました。
BigQuery Studioについては以下の紹介記事を参照して下さい。
使い心地としては、Python環境から機械学習モデル開発にBigQueryのデータを使用するため、想像していた以上によく考えられたライブラリだと感じました。
これまでは例えばBQMLを使ってBigQueryのデータから直接機械学習モデルを開発できましたが、インターフェースがSQLになってしまうのでPythonを主に使っている方だとどうしても「なんかいつもと違うな」と思ってしまうところがあったかもしれません。
BigQuery Dataframesを使うことで、データの扱いはPandas、機械学習モデルの開発はscikit-learnに非常に近いものとなっており、コンピューティングリソースはBigQueryのものを使いつつも、非常に慣れ親しんだインターフェースで開発ができるのは素晴らしい体験だと思います。
使用する新機能について
BigQuery Dataframesについて
BigQuery DataframesはオープンソースのPythonライブラリで、パッケージとしてはBigFrames Pythonパッケージという名前になっています。
GitHubレポジトリは以下です。
ライブラリには以下の2つの主要な機能があります。
bigframes.pandas:データ分析のためのPandas互換のAPIを提供する。bigframes.ml:機械学習による分析のための、scikit-learnに類似のAPIを提供する。
いずれもPython実行環境よりデータフレームを使って操作を表現することで、BigQueryへの処理を実行するものになります。
より詳しくは以下のガイドをご確認下さい。
なお、今回使用したのはColab Enterpriseにあらかじめ用意されているバージョンのものになります。

Colab Enterpriseについて
Colabノートブックの使いやすさと、エンタープライズレベルのセキュリティおよびコンプライアンスサポート機能を組み合わせたマネージドサービスです。記事執筆時点ではプレビューの機能となります。
Colab Enterpriseを使用して、Vertex AIプラットフォームの全機能へのアクセスができることに加え、同じくGoogle Cloud Next'23で発表されたBigQuery Studioにも統合されており、BigQueryのデータへのインターフェースとしての役割もあります。ノートブックからBigQueryへのアクセス方法の一つとして、先に説明したBigQuery Dataframesがあります。
料金については以下のガイドをご確認ください。
Colab Enterprise自体は、Vertex AIより利用が可能です。Colab Enterpriseのコンソールよりノートブックを作成および実行ができます。ノートブックの画面自体はGoogle Colabを使ったことがある方からすると馴染みがある雰囲気ですね。

ランタイムはランタイムタブから確認できました。一番最初はノートブックから処理を実行することで自動的にデフォルトのものが作成されました。

※ ランタイム名・IDにはGCPのプロジェクト名が入ります。
やってみる
1. テーブルからのデータの取得と加工
以下のようにread_gbqメソッドにてプロジェクト名.データセット名.テーブル名を指定し、データフレームを作りました。

データはbigquery-public-data.ml_datasets.penguinsのデータをあらかじめ東京リージョンのテーブルにコピーしておきました。コピー方法は、まずUSマルチリージョンにて作成したデータセットにbigquery-public-data.ml_datasets.penguinsのデータをCTASで移し、『【BigQuery Preview】異なるリージョン間のコピー Cross Region Copy | DevelopersIO』に記載のようにデータ転送にて東京リージョンのデータセットにコピーしました。
データフレームのデータはheadメソッドなどで確認することが可能です。Open Jobリンクから、BigQueryにアクセスして、どのようなクエリが実行されたのか確認することができました。

Pandasデータフレームと同じように、groupbyメソッドを使って、集約をすることもできました。

セルごとにOpen Jobリンクが表示されていることから分かるように、BigFramesではデータフレームの操作ごとにデータ処理を実行しているようです。PySparkのデータフレームを想定したインターフェースの場合、アクション実行時に最適化されたSQLを実行するため、速度や効率性を追求できるメリットがある一方で、遅延評価など慣れていないユーザーの場合に若干の使いづらさを感じてしまうかもしれません。
BigFramesではメソッド実行の度に処理が実行されるPandasデータフレームの操作性を持つことで、大規模なデータ処理が初めての方でも使いやすいように操作性を重視しているように感じました。
2. 機械学習モデルの作成
サンプルノートブックのうち、easy_linear_regression.ipynbのコードを使って、線形回帰モデルを作成してみました。以下はサンプルから引用したコードになります。
サンプルノートブックには、話題のPaLM2を含めた様々なモデルに対するサンプルが含まれているのでぜひご確認頂ければと思います。
今回はbigframes.ml.linear_model.LinearRegressionを使いました。scikit-learnのsklearn.linear_model.LinearRegressionとは、それぞれのドキュメントを見比べると分かりますが、fitなど重要なメソッドは同じものを備えています。ただし、BigFramesのLinearRegressionにはto_gbqなどBigQueryにアクセスするためのメソッドがあるなど違いがあります。
まず、先に読み込んでおいたデータフレームから、訓練用のデータを作成しました。

次に、特徴量と正解データを分けました。

いよいよモデルの作成です。LinearRegressionインスタンスを作成し、fitメソッドで訓練を実行しました。

Open Jobリンクより確認すると、モデルは一時モデルとして作成されていました。モデルの学習はBQMLの枠組みで実行されることが分かります。

GO TO MODELボタンより、訓練したモデルの情報にもアクセスできました。

作成したモデルは、to_gbqメソッドより、データセットに登録が可能でした。これで作成した一時モデルの永続化ができますね。


最後に
Google Cloud Next'23で発表された、BigQueryの新しい分析インターフェースの一つであるBigQuery Dataframes(BigFrames Pythonパッケージ)の使用例をご紹介しました。また、現在プレビュー版で提供されているColab Enterpriseノートブックからの利用イメージについても合わせて紹介しました。
使ってみるとどちらも非常に使いやすく、一般提供開始になるのがとても楽しみです!
参考になりましたら幸いです。







