見出し画像

『10年戦えるデータ分析入門』を読んで

こんにちは、コグラフデータアナリティクス(DAD)事業部のNです。
最近は業務で自らSQLを使ってクエリを書く機会が増えたので、業務上の必要性から『10年戦えるデータ分析入門』という本書を手に取りました。
今回はこちらの概要と、実務で活用できそうなクエリの一例を紹介します。


この本の著者について

本書の著者の青木峰郎(あおきみねろう)さんは、クックパッド在籍中に分析サービスを開発し、Treasure Data在籍中にCDPの開発を手掛けるなど、現在も活躍中のプログラマーです。
本書以外にも著書が多数あり、Linuxについてのプログラミング本なども執筆されています。

概要

本書は大きく分けて2部で構成されています。
第1部では、分析システム利用者の視点からSQLの使用方法について解説されており、SQLの使用方法を通してRDBMS*を操作する基礎を学ぶことが出来ます。
また第2部では、分析システム作成者の視点から、データ分析のための基盤構築について述べられています。
プランナーとエンジニアの両方を対象としているため、SQL分析に関する内容が幅広く触れられているのが特徴です。

*RDBMS:Relational Database Management Systemの略で、リレーショナルデータベース(データを表に似た構造で整理するデータベース)を管理するためのソフトウェアのこと。


実務で活用できそうなクエリ

自身の業務ではSQLの使用、がメインということもあり、今回は特に第1部の方で印象的だった箇所を紹介したいと思います。
実務で活用できそうなクエリを以下に4つまとめましたので、SQLを使用している方はぜひ参考にしてみて下さい。

1. ランダムサンプリング(第3章)

「どの行でもいいから、ランダムに0.1%くらいの量がほしい」
そんなときは、rand()関数を使用します。
※本書ではrandom()関数で紹介されているのですが、自身が使用しているBigqueryではrand()関数で動作するため置き換えて紹介していきます。

この関数では行ごとに0.0以上1.0未満の値がランダムに返されるので、where句で使うことでランダムサンプリングが出来ます。
業務では任意の行を取り出して値を確認したり、テストを行ったりする際に使えると思います。

下記サンプル文では、where句で1/1000の確率で条件が成立するので、結果として全体の0.1%くらいの行を取り出すことが出来ます。

select * from users where rand() < 0.001 ;

2. self join(第7章)

self joinとは同じテーブルを結合する方法で、自己結合と呼ばれます。
結合は異なるテーブル同士で行うことが多いので、こちらの使用頻度としては低いですが、例えば年度比較をする場合などに効果的です。

下記サンプル文ではself joinを行い、部門の前年度の売上げからの今年度の売上げの伸び率を計算しています。
テーブルを結合していますが、どちらも同じyearly_salesテーブルを参照していますね。
同じテーブルを使用しているので、別名(ここでは今年current yearの意味でのcur・前年previous yearの意味でpre)がつけられています。
またここでは結合条件でcur.year - 1 = pre.yearと入れることで、前年の情報と比較しています。

select
  cur.year
 ,cur.department_id
 ,cast(cur.sales_amount as real) / pre.sales_amount as growth_rate
from
  yearly_sales as cur
left outer join
  yearly_sales as pre
on cur.year - 1 = pre.year and cur.department_id = pre.department_id ;

3. サブクエリの結果による絞り込み(第8章)

サブクエリとin演算子を合わせて使用する方法です。
in演算子を使いたいが値の候補がいくつもあるような場合、この方法を使用すると値のベタ打ちをしないで済むため、柔軟性が高いです。

下記サンプル文のサブクエリでは、web_pagesテーブルでpage_category='product'という条件でrequest_pathが選択されていますね。該当するrequest_pathを一つ一つ羅列するよりも、シンプルにクエリを書くことが出来ています。

select
  *
from
  access_log
where
  request_path in (
    select request_path
    from web_pages
    where page_category = 'product'
    )
;

4. スカラーサブクエリ(第8章)

スカラーサブクエリは、select節やwhere節の式の一部として使えるサブクエリです。1行1カラムのリレーションを返すので、式の中に値として入れることが出来ます。

下記サンプル文のスカラーサブクエリでは、item_orderテーブルのorder_countの合計値が1行として取り出され、式の中に使用されています。

select
  order_count / (select sum(order_count) from item_order)
from
  item_order
;

さいごに

以上、本書を読んだ中で、実務で活用できそうなクエリを中心に紹介しました。
サブクエリなどは今までfrom句で使用することが多かったのですが、演算子や式の中にも使用出来るので汎用的ですね。
どれも役立つ場面がありそうなので、これから積極的に活用していこうと思います。

本書はSQL分析とRDBMSの基礎を学べるので、自分のようなSQL初心者~中級者にとっては結構ありがたい内容でした。
データ分析目的での説明が多く、リファレンス的な本と比べても読みやすかったです。

さらに実践的なSQLの活用方法が掲載されているので、エンジニア以外の方でデータ活用を始めたい方にもおすすめしたい一冊です。
2015年に書かれた本ということで一部の内容は古いかもしれませんが、基本的なSQLの使い方はあまり変わらないと思いますので、今でも十分に活用できそうです。

P.S. 著者が本書について振り返った動画(基調講演『あと10年戦える(のか?)データ分析入門 』)を見つけたので、以下に共有しておきます。
Data Engineering Study #20「10年戦えるデータ分析入門」 (youtube.com)


データ分析に興味のある方募集中!

コグラフデータアナリティクス(DAD)事業部ではPythonやSQLの研修を行った後、実務に着手します。
研修内容の充実はもちろん、経験者に相談できる環境が備わっています。
コグラフの研修には実務を想定し着実にスキルアップを目指す環境がありますので、興味がある方は下記リンクよりお問い合わせください。

X(Twitter)もやってます!

コグラフデータアナリティクス(DAD)事業部では、X(Twitter)でも情報を発信しています。
データ分析に興味がある方、データアナリストになりたい方は、ぜひフォローをよろしくお願いします!

この記事が気に入ったらサポートをしてみませんか?