今更ながらGoogle colaboratory

2024-03-25

はじめに

こんにちは。株式会社 Belong で Data Platform チーム所属の taketsuru です。

今更ながら Google colaboratory (以下 colab)を使ってみました。

Google colaboratory は Google が提供する Jupyter Notebook のクラウドサービスです。

python, 特に DataFrame に馴染みがあればすぐに使えると思います。

現状

CloudSQL に保存しているマスターデータの手入れをすることが増えてきました。

毎回 CloudSQLProxy から DB クライアントで接続して...とやっていましたがちょっと面倒を感じてきました。

主な作業としては以下になります。

  • スプレッドシートで渡されるデータの登録
  • マスターデータ起因の問題発生時の調査

BigQuery から CloudSQL への接続は作成されている状態です。

なのでこれまでは作業用スプレッドシートに BigQuery を接続、必要に応じて SQL を作成し CloudSQL に反映してきました。

とりあえず共有できたり後で見返せるといった利点があり、思考整理しながら作業できるのでスプレッドシートを使用していました。

例:既存データと登録データの重複チェック

  • 作業用スプレッドシートの場合
    • 既存データを登録データと比較できる状態で SELECT
    • 重複したくない列を文字列結合して列作成
      • 複合キーのイメージ
    • 一方を他方から VLOOKUP
  • colab の場合
    • 既存データと登録データを df で取得
    • 登録データと既存データを重複したくない列で left join ( pd.merge など )
    • 既存データしかないカラムが None な行 = 重複していない行を抽出

スプレッドシートの場合でも作業用スプレッドシートを BigQuery に external table したりそもそも INSERT IGNORE すればいいとか対案はありますが colab の方が直感的かなと思いました。

colab で dataframe を取得するまで

gcp を始めとした google サービスとの連携が設定不要で非常に強いです。

ADC とかの設定なしに、ブラウザにログインしている google アカウントの権限で gcp のリソースにアクセスできます。

他にもコードは google ドライブに保存、共有できてこれまた便利です。

こちらを参考にさせていただきました。

from google.colab import auth
auth.authenticate_user()

from google.cloud import bigquery

project_id = 'your-project-id'

client = bigquery.Client(project=project_id)

query =  """
               SELECT  *
               FROM
               `project.dataset.table`
         """
df = client.query(query).to_dataframe()

今回は CloudSQL への接続を利用するのでクエリは select * from external_query... の形式になります。

スプレッドシートから取得するには以下のようになります。

特に特徴的なところはないコードです。

先にあげたコードで auth.authenticate_user() している前提になります。

import gspread
from google.auth import default
creds, _ = default()

gc = gspread.authorize(creds)

ss = gc.open_by_key("your-spreadsheet-id")
raw_data = ss.worksheet("sheet-name")

import pandas as pd
ss_df = pd.DataFrame(raw_data.get_all_values())

あとは適宜集計したり、ループ回して INSERT 文作ったりすれば作業完了です。

python なのでスプレッドシートより集計、出力の柔軟性が遥かに高いですね。

これから

私はこのくらいの用途で満足していますが、チュートリアルのページでは ML や Gemini AI を推しています。

未だに ML や AI には手は出せていないのですが colab を手掛かりに馴染んでいくのはいいかもしれません。

それから colab には通常無料ですが課金プランもあります(宣伝ではないです)。

基本的に GPU に対する課金です。今回の用途のように BigQuery とスプレッドシートから集計するだけなら無料で充分です。

私のような GPU 環境がないことを理由に ML, AI に障壁を感じた人は有料プランも検討してみるのもいいかもしれません。

昔 ML, AI を触ろうとした時は GPU つきインスタンスを借りて不要な時は終了して...ということをしていたのでかなり手間でした。

まとめ

colab は gcp, スプレッドシートのデータを扱うのに非常に便利です。

python の DataFrame を使ったことがある人ならすぐに使えると思います。

チームに対して共有する際にも jupyter notebook とは違い環境構築不要で共有できるのが強みです。

BigQuery Studioという BigQuery 上で動くものもありますが、私は BigQuery 上に colab を持ってきただけに見えます。

それぞれ使いこなしていって違いを論じれるようになりたいです。

弊社 Belong では一緒にサービスを育てる仲間を募集しています。 もし弊社に興味を持っていただけたら https://entrancebook.belonginc.dev/ をご覧いただけたら幸いです。