Pandas と BigQuery

しばらく前から仕事のログ解析に Google Analytics をエクスポートした BigQuery を使っている。BigQuery を Jupyter 経由の Python から呼び出し Pandas で整形可視化する。久しぶりにするモダンぽい仕事で楽しい。

アプリのログ解析は大半が内製のシステムを使っているのだけれど、クライアント側の開発者が勝手に使う部分では歴史的経緯で GA が使われている。自分はもともと GA のダッシュボートなんてしょぼすぎて使い物にならないと思っていた。でも BigQuery にエクスポートできると知り試したら別物のツールになった。

SQL と Pandas を組み合わせて使うのはちょっと不思議なかんじだ。たとえば histogram を描きたいとする。Pandas だけなら hist() を呼ぶわけだけれど、SQL を使うと bucketing は BigQuery 側で済ませてしまう。だから同じ関数は使えない。histogram はともかく scatter plot とか hexbin を描きたくなったらどうすればいいのか、StackOverflow プログラマたる自分にはよくわからなくて困る。

何が SQL の仕事で何が Python の仕事なのか。自分の中にはっきりした境界はない。どちらも得意な言語ではないけれど Python の方が若干マシ。だから SQL を直す代わりに BigQuery の結果が入った DataFrame を Python で適当に加工してしまったりする。あるいは SQL 上でテーブルを join するかわりに手元に DataFrame を2つ持ってきてからマージしたりとか。

世間からはデータサイエンティストが書く長大な SQL にエンジニアが目を丸くする話が聞こえてくるけれど、一人でやっていると他人の SQL を目にする機会がない。SQL の力を引き出したいと思いつつ、いつまでも進歩せず Python に逃げてしまう。BigQuery が RDB と違うせいでいまいち世間のノウハウを生かせないせい・・・と言い訳したくなる。分析に特化した SQL の教科書が読みたい。できれば  BigQuery ベースで。まあそれは高望みか・・・。

Thinking in SQL vs Thinking in Python という記事は、 R 出身のデータサイエンティストが Python と SQL ハイブリッドの世界にやってきて感動した様子を綴っている。この人は Python より SQL がずっと得意で、かつさわっているデータセットも自分よりはだいぶ複雑なのだろう。Python を手探りで触っている感じが面白い。自分は SQL が手探りだから、データが DataFrame になった後のほうが安心して作業できる。SQL が得意だと違う感覚なんだろうね。「でも慣れたツールにしがみつくのは愚かなことだから変化を受け入れよう」と締めくくられる文章に襟首を正した。

SQL と Pandas の間で戸惑うのは impedance mismatch と言えなくもない。でも ORM をつかうときに感じたギャップはない。DataFrame はデータベースのテーブルに限りなく近いから。そして SQL を書くのも思ったより退屈じゃないね。むかし SQL をつまらなく感じたのは CRUD アプリみたいな定形作業ばかりだったからなのだろう。調べたいことを色々集計するのはアンケートみたいで楽しい。そして Pandas や Seaborn で色々な図を描くのもいい。基本的に絵が出る仕事は楽しい。ほんとは ggplot2 が羨ましいけれど、そのためだけに R をつかう気力がない。Altair にはがんばってほしいもんです。