サーバーを用意せずに、お金もかけずにさくっとデータ分析をする。データベース、分析実行、結果出力まで、全てGoogleのサービスだけを使って実現する方法を紹介します。
はじめに
前提条件
G Suiteユーザー
こんな人向け
データ分析をするために、例えばBIツールを入れるのはコストがかかりますよね。そこまでしたくない場合、自前で管理画面に作ったり。それもエンジニアが開発してリリースして…というので柔軟性とスピードに欠ける。とはいえ、Excelでやるにはデータ量が多すぎてできない。今回のFusion Tablesを利用した方法は手軽にやりたい時にピッタリです。
環境構築がいらない、コストがかからない、外部からアクセスできてブラウザだけで全て構築できる、権限設定もGoogleアカウントでできる、かなりメリットあります。特に出張や外出の多い私には最適だったりします。ただし、もちろんダメなところもたくさんあるので、それも最後に紹介しておきます。
G Suiteで使うアプリケーション
- Fusion Tables:分析対象のデータを格納する簡易データベース
- Google Apps Script:分析処理を書く
- スプレッドシート:結果出力用
- ドライブ:テーブルやスクリプトを格納するスペース
ものづくり
分析対象のデータをFusion Tablesに格納する
まずはこの辺を読んでFusion Tablesの基礎を。
qiita.com
分析対象のデータを突っ込みましょう。
本当はここでSQL書いたりView作ったりできれば良いんですけど、SQL書けないし、View作るにしてもものすごく単純な条件でしか作れない。ということで、Tableにデータを格納する、くらいしか使えません。
ということで、Google Apps Scriptを使います。
Google Apps Scriptで分析処理を書く
スプレッドシートでコードエディタを開いても良いんですけど、今回はドライブにスクリプトを配置します。分析元のデータや出力先のスプレッドシートが複数でも管理しやすいためです。また、出力用のスプレッドシートも作成しておきます。
Google Apps ScriptでFusion Tablesを操作できるように、リソースを追加します。
qiita.com
またまたこの人のブログに頼っちゃいます。笑 分かりやすい。
これで、スクリプトからデータを取り出すところまでできました。ただ、使えるSQLはかなり限定されていて、例えば、、、
CONCAT
に当たる構文が無いため、文字列操作がほとんどできない。CASE
が使えないため、条件に応じた抽出ができない。INSERT INTO ~ SELECT
ができないため、一時テーブルのようなものは作成できない。
などなど。詳細は下記リファレンス参照。
FAQ: Google Fusion Tables - Fusion Tables Help
なので、SQLで色々やって効率よく処理ができないのがけっこう辛いです。データを全部取得して、スクリプトの中でぐるぐる回して処理することになります。
スプレッドシートに出力する
下記ブログの後半部分参照。
sitest.jp
(というか、これFusion Tables作成のところから一通り書かれてるからこのブログ見たら一発かもしれないけど…笑)
デバッグについて
Google Apps Scriptでは、ブレークポイントを置いてデバッグもできます。
こんな風に変数の中身チェックしたり、
ステップイン、ステップオーバー、ステップアウトも。
実行時エラーはこんな感じで。
SQLエラーも一応出ます。分かりづらいけど…
ダメなところ
データベースから大量データを取得できない
一度に大量データを取得しようとすると実行時エラーになります。そうなるとデータを複数回に分けて取得しなければなりません。ちゃんとサイズは測っていませんが、1レコード150byteくらいのデータ約15万件は2分割でもダメで、3分割しました。
Google Apps Scriptの処理時間は6分まで
なんか無理矢理やってる人もいますが、強引すぎる…笑
kido0617.github.io
処理時間が短くなるよう、普通に処理を分けましょう。
一度に大量のデータを出力しようとすると動作が不安定になるらしい
分析結果や、分析途中のデータをFusion Tablesのテーブルに出力することもできますが、これはお勧めできません。一度に大量のデータを出力しようとすると動作が不安定になるらしいので。
qiita.com
この人、よく試してる~
制限
リファレンスにあるとおり、Fusion Tablesには以下の制限があります。
※一応Google Apps Script関連の制限はここで。
Quotas for Google Services | Apps Script | Google Developers
こんな感じでデメリットも多く感じますが、メリットの方が大きいので、けっこう活躍できるんじゃないかなーと思います。あとは、Fusion Tablesの今後には期待したいところ。