アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

ColaboratoryでBigQueryを検索してみた

morishitaです。

アクトインディでは、ログを Google BigQuery にログを格納しています。 BigQuery は Web コンソールから簡単に検索できます。
Web コンソールはクエリを実行するだけなら便利なのですが、業務に使うには不十分と思っていました。

BigQuery をどう使っているのか?

ログを BigQuery に格納しているので、お客様や他部署からシステム挙動の問い合わせを受けた時に、どのような使われ方がされていたのかを調べるのに利用しています。

調査なのでクエリの検索結果だけでなく、次の項目も合わせて整理しておきたいのです。

  • 調査の目的や経緯
  • 検索クエリ(後で検証が必要になる場合もあり必須)
  • 検索結果
  • 結果から導き出される考察、結論

これまで Redmine 上で上記をまとめつつ、 クエリ実行しては BigQuery の Web コンソールから Redmine にコピー&ペーストする作業をしていました。

これらを1つのドキュメントとしてまとめながら調査できるツールがあれば便利なのにと思っていました。

そんなとき、Colaboratory から BigQuery にアクセスできることを知りました。
これは使えるのではと思い、やってみました。

Colaboratory とは

Google Drive 上で提供されている Google のサービスです。
Jupyter Notobook をベースにしており、ほぼ同じ操作が可能な上に、各種 Google のサービスに接続しやすいように拡張されています。

特徴は次の通りです。

  • Google Drive 上でノートブックを共有できる
  • BigQuery や Google Drive のファイルにもアクセス可能
  • ランタイムは Python2.7 系と Python3.6 系を選択できる
  • TensorFlow はもちろん使えるし、pipでライブラリのインストールも可能
  • GPU が使える
  • そして無料1

Colaboratory については公式ドキュメントを御覧ください。ドキュメントも Colaboratory で作られています。

機械学習の学習に最適

機械学習に注目が集まっており、Jupyter を使って解説する入門書もいくつかあります。 そういった本を写経しながら学習するにも Jupyter の環境を用意するのは面倒ですし、GPU まで用意できないと、機械学習モデルのトレーニングに時間がかかり過ぎて嫌になったりします。

Colaboratoryで注目すべきは GPU が使えることです。
実行環境をまるっと用意してくれる上に GPUまで無料で使えます。 上記のような経験をした機械学習の学習者にも最適なサービスでしょう
(GPU を使うとトレーニングが速いですよー)

さて、このエントリのテーマは機械学習ではなくて、 BigQuery を Colaboratory から使ってみることなので話を戻します。

BigQuery を使ってみる

Python のライブラリが普通にインストールして使えるので pandas.gbqgoogle.cloud.bigqueryでも BigQuery のクエリを実行できます。
しかし、便利なマジックコマンドが用意されているのでそれを利用して実行するのが最も簡単そうです。

初めてのクエリ実行

やってみた結果は次のとおりです。

Colaboratory+BigQuery最初の一歩

ポイントを説明します。

Google アカウントの認証

最初に Google アカウントの認証を通します。 このセルを実行すると URL が表示されます。その URL にアクセスすると認証コードが発行されます。 表示されている入力フィールドに認証コードを入力すると、認証完了です。

from google.colab import auth
auth.authenticate_user()

BigQuery のクエリ実行

マジックコマンド%%bigqueryを利用して BigQuery のクエリを実行します。 引数にはプロジェクト ID と結果を格納する変数名(この例ではdf)を指定します。

%%bigquery --project your_project_id df
SELECT
  COUNT(*) as total_rows
FROM `bigquery-public-data.samples.gsod`

このセルを実行すると検索結果が表示されます。とても簡単にできることがわかりました。

結果を格納している変数の型はpandasDataFrameなので 結果を後で加工しやすそうなところもいいですね。

また、セルにはフォームから値を入力させるインタフェースも簡単に追加できます。
フォームを使えば検索条件や、検索範囲の日付などその都度変わる部分をフォームから入力させることもでき便利そうです。

調査ドキュメントのサンプル

さて、Colaboratory が使えるのではないかと思ったのは、文章とクエリとその結果をひとまとめにした調査ドキュメントが作りやすそうだと思ったことです。
もともと、Jupyter Notobook とはそのようなツールなのでできるでしょう。

いこーよのログはお見せできないので、Google が BigQuery 上で公開している公開データセットを使います。その中から Stackoverflow のデータ使って実際に調査ドキュメントのサンプルを作ってみました。
なお、データは 2018/09/08 に更新されたものです。

作ったものを GIST にアップして、貼り付けたのが次です。

Stackoverflowにはいつ質問すれば早く回答を得られやすいのか

検索してみた結果だけでは面白くないので matplotlibseabornを使ってヒートマップを描いてみました。 BigQueryのWebコンソールでは結果を見ることしかできないですが、Colaboratoryでは結果を加工して分析しやすいですね2

f:id:HeRo:20180918083239p:plain

共有も簡単

Colaboratory のドキュメントは Google Drive 上にあるので社内の共有も簡単です3。 ヘルプには複数ユーザで同時編集しても変更が即時反映されると書いているので、共同作業もやりやすいと思います。

また、すでにこのブログでも貼り付けていますが、Jupyter notebook 同様 Github や Gist にアップして共有することも可能です4

まとめ

  • Colaboratoryは無料でGPUまで使える
  • BigQueryにアクセスするのも容易
  • Google DriveやGistなどで共有も容易

最後に

アクトインディではまだまだデータの活用はまたまだこれからの課題です。 一緒に分析してサービスを成長させてくれるエンジニアを募集しています。


  1. 「研究プロジェクト」という位置づけなので無料と思われます。また、BigQueryなど有料サービスを使うとそれには料金が発生します。

  2. β公開中の新しいBigQueryのWebコンソールでは Data Studioに結果を渡してグラフとか描けるようです。

  3. 弊社では全社で Google Apps を利用しています。

  4. このブログも今日は Colaboratory で書いて全面 Gist 貼り付けにしようかと思いましたが、iframe 内でスクロールが発生して見やすくなかったのでやめました。