BigFrames Pythonパッケージをプレビュー中のColab Enterpriseノートブックから使ってみた #GoolgeCloudNext
データアナリティクス事業本部 機械学習チームの鈴木です。
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ノートブックからの利用イメージについても合わせて紹介しました。
使ってみるとどちらも非常に使いやすく、一般提供開始になるのがとても楽しみです!
参考になりましたら幸いです。