Fusion Tablesを使ってGoogleの環境だけでデータ分析する

サーバーを用意せずに、お金もかけずにさくっとデータ分析をする。データベース、分析実行、結果出力まで、全てGoogleのサービスだけを使って実現する方法を紹介します。

はじめに

前提条件

G Suiteユーザー

こんな人向け

データ分析をするために、例えばBIツールを入れるのはコストがかかりますよね。そこまでしたくない場合、自前で管理画面に作ったり。それもエンジニアが開発してリリースして…というので柔軟性とスピードに欠ける。とはいえ、Excelでやるにはデータ量が多すぎてできない。今回のFusion Tablesを利用した方法は手軽にやりたい時にピッタリです。

環境構築がいらない、コストがかからない、外部からアクセスできてブラウザだけで全て構築できる、権限設定もGoogleアカウントでできる、かなりメリットあります。特に出張や外出の多い私には最適だったりします。ただし、もちろんダメなところもたくさんあるので、それも最後に紹介しておきます。

G Suiteで使うアプリケーション

ものづくり

分析対象のデータをFusion Tablesに格納する

まずはこの辺を読んでFusion Tablesの基礎を。
qiita.com

分析対象のデータを突っ込みましょう。

本当はここでSQL書いたりView作ったりできれば良いんですけど、SQL書けないし、View作るにしてもものすごく単純な条件でしか作れない。ということで、Tableにデータを格納する、くらいしか使えません。

ということで、Google Apps Scriptを使います。

Google Apps Scriptで分析処理を書く

スプレッドシートでコードエディタを開いても良いんですけど、今回はドライブにスクリプトを配置します。分析元のデータや出力先のスプレッドシートが複数でも管理しやすいためです。また、出力用のスプレッドシートも作成しておきます。
f:id:jabe20:20171108104901p:plain

Google Apps ScriptでFusion Tablesを操作できるように、リソースを追加します。
qiita.com
またまたこの人のブログに頼っちゃいます。笑 分かりやすい。

これで、スクリプトからデータを取り出すところまでできました。ただ、使えるSQLはかなり限定されていて、例えば、、、

  • CONCATに当たる構文が無いため、文字列操作がほとんどできない。
  • CASEが使えないため、条件に応じた抽出ができない。
  • INSERT INTO ~ SELECTができないため、一時テーブルのようなものは作成できない。

などなど。詳細は下記リファレンス参照。
Row and Query SQL Reference  |  Fusion Tables REST API  |  Google Developers

なので、SQLで色々やって効率よく処理ができないのがけっこう辛いです。データを全部取得して、スクリプトの中でぐるぐる回して処理することになります。

スプレッドシートに出力する

下記ブログの後半部分参照。
sitest.jp
(というか、これFusion Tables作成のところから一通り書かれてるからこのブログ見たら一発かもしれないけど…笑)

デバッグについて

Google Apps Scriptでは、ブレークポイントを置いてデバッグもできます。
f:id:jabe20:20171108111021p:plain
こんな風に変数の中身チェックしたり、
f:id:jabe20:20171108111107p:plain
ステップイン、ステップオーバー、ステップアウトも。

実行時エラーはこんな感じで。
f:id:jabe20:20171108111532p:plain

SQLエラーも一応出ます。分かりづらいけど…
f:id:jabe20:20171108111711p:plain

ダメなところ

データベースから大量データを取得できない
一度に大量データを取得しようとすると実行時エラーになります。そうなるとデータを複数回に分けて取得しなければなりません。ちゃんとサイズは測っていませんが、1レコード150byteくらいのデータ約15万件は2分割でもダメで、3分割しました。

Google Apps Scriptの処理時間は6分まで
なんか無理矢理やってる人もいますが、強引すぎる…笑
kido0617.github.io
処理時間が短くなるよう、普通に処理を分けましょう。

一度に大量のデータを出力しようとすると動作が不安定になるらしい
分析結果や、分析途中のデータをFusion Tablesのテーブルに出力することもできますが、これはお勧めできません。一度に大量のデータを出力しようとすると動作が不安定になるらしいので。
qiita.com
この人、よく試してる~

制限
リファレンスにあるとおり、Fusion Tablesには以下の制限があります。
f:id:jabe20:20171108113557p:plain
※一応Google Apps Script関連の制限はここで。
Quotas for Google Services  |  Apps Script  |  Google Developers

こんな感じでデメリットも多く感じますが、メリットの方が大きいので、けっこう活躍できるんじゃないかなーと思います。あとは、Fusion Tablesの今後には期待したいところ。