月別アーカイブ: 2019年10月

書評:「SQLデータ分析・活用入門 データサイエンスの扉を開くための技術」② 西潤史郎 (著), 山田祥寛 (監修) 

第10章は、これまでの集大成としてデータ分析の目的と成果について述べられている。

 第10章 データ分析で成果を出すために
  10.1 データ分析が成果を出すために必要なこと
   モデルとは
   モデルはどう作成するのか
   「式」はモデルの代表的な形
   データ分析はプロセスであり成果物ではない
   意思決定者とデータ分析者は分ける
   国家の意思決定から発展した「インテリジェンス」
   意思決定者とデータ分析者の壁
   ビジョンとスキルで壁を越える
   データサイエンスの実践に求められるスキル
   データサイエンスのタスク
   チームとしてのデータサイエンティスト
   社内SQL勉強会のすすめ
  10.2 さらにデータサイエンスのスキルを身につけるための参考書籍
   SQL関連
   エンジニアリング関連
   データサイエンス関連
   ビジネス関連
  10.3 結びにかえて

モデルとは

まず、ここではモデルについて明確化している。モデルとは現実世界を抽象化したものであり、データ分析とはデータからモデルを作成する役割を指す。

そもそも、データとは何であるか?本書に面白い表現があったので紹介する。

「データというものは、現象が放つ光です。そのさまざまな色合いの光を集めて現象を理解します。」P.332

ところで最近、別の本を読んでいて似たような表現を目にした。「私たちは、物に当たった太陽の光や照明の光のうち、吸収されずに反射された光を見ている。どんな種類の光を吸収しやすいかは物質によって異なるため、反射される光の種類も異なる。それによって、物の色が決まる。」~文系でもよくわかる 世界の仕組みを物理学で知る~

つまり、我々が赤いリンゴを視認することは、(太陽等の)光が当たって赤以外の光が吸収された結果、赤の波長の光だけが目に届くという仕組みによる。従って、本物のリンゴではなくて写真のリンゴを見ても同じようにリンゴと認識できる。

言い換えると、光(データ)を注意深く観察することでリンゴという実体(現実世界)を認識することができるということであり、リンゴの特徴を描いた絵や写真がモデルであると理解した。

例えば、顧客の購買データを分析することで、「顧客の買う/買わない」という現象をとらえモデル化を行う。モデルを作ることにより顧客にとってより購買につながる行動とは何かが見えてくる。

このように整理することでデータ分析の目的がストンと腑に落ちた。

データ分析はプロセスであり成果物ではない

つぎに、「データ分析はプロセスであり成果物ではない」という箇所であるが、著者は、
データ分析者によるデータ分析を、料理人による食材の調理にたとえている。

食材(データ)を調理道具(SQLやツール)によって調理し、最終的に美味しい料理(データ分析結果)として客(意思決定者)に提供する。

料理人の役割は客に料理を提供するところまでであり、どんなに自分の作った料理に自信があったとしても客が「美味しい」と思わない限り何の意味もない。

「データ分析も、データを活用して経営に影響を与え、業績に貢献するなどの価値が生まれて、はじめて意味をなす。」(P.337)

意思決定者とデータ分析者は分ける

また、「意思決定者とデータ分析者は分ける」という箇所も興味深い。

これは、意思決定者がデータ分析を行うと、結論ありきの分析に陥りやすいことを示している。(思考バイアス)

「データ分析者は、客観的な立場で分析を行い、データと向き合い客観的な結果を出します。意思決定者は、その分析結果に基づいて意思決定を行うようにします。」(P.338)

国家の意思決定から発展した「インテリジェンス」

そもそも、「インテリジェンス」とは国家の意思決定に必要な「情報分析」であり、インテリジェンス機関の例としてCIA(Central Intelligence Agency)が挙げられる。CIAは米国が国家として安全保障上の重要な決定を下す際に必要な情報を分析する機関である。

もし、大統領を忖度し思考バイアスがかかった分析が行われてしまうと、国家にとって誤った判断を犯す重大なリスクがある。

実際に、米国はCIAがもたらした「イラクには大量破壊兵器が存在する」という誤った分析結果によりイラク戦争を起こした。これは、インテリジェンスの失敗例として検証が必要であろう。

インターネットにせよ米国発の技術は軍事からのスピンオフが多いが、このインテリジェンスをビジネスにおいても活用しようとするのが「ビジネス・インテリジェンス」である。

はじめて 「ビジネス・インテリジェンス」という言葉を聞いた時、なぜ「インテリジェンス」なのだろうかという素朴な疑問を持ったのだが、意思決定者とデータ分析者を分けるという観点では全く同じ発想であることに、本書を読んで大いに納得できた。

チームとしてのデータサイエンティスト

データ分析者が「自分がせっかく作ったデータ分析の価値をわかってもらえない」と嘆き、一方で意思決定者が「データ分析結果がさっぱりわからない」といらだつ。。。というのは著者が今まで沢山目にしてきたことなのだろうが、両者の間に立ちはだかる壁を乗り越える必要がある。

著者は、これを「 ある時点までに達成したいと考える到達点を表明したビジョンを共有すること」と 「 データサイエンスの実践に求められるスキル を磨くこと」で乗り越えられることを強調している。

後者には

  • ビジネス力(Business problem solving)
  • データサイエンス力(Data science)
  • データエンジニアリング力(Data engineering)

という3つのスキルセットが必要だが、いわゆるデータサイエンティストとは一般的に一人でこれらすべてに精通したスーパーマンという印象がある。

”Harvard Business review誌のシニアエディターであるスコット・ベリナートは、「そのような人物はユニコーン級に希少である」と断じています。”(P.346)

ところが、著者は「それぞれの能力を持つ人達が集まり、チームとしてデータサイエンスの価値を生み出す」(P.346)ことができると主張する。つまりスペシャリスト集団としてのチーム力で乗り越えられるとの考えである。

これは、基幹系のエンジニアにとってもスキルシフトする道が開けるのではないかと思った。

まとめ

今更であるが、経済産業省が昨年出した「DXレポート ~ITシステム「2025年の崖」克服とDXの本格的な展開~」が気になって最近読んでいた。

そこに、今回の書評のお話がありデータ分析について学ぶ機会に恵まれたのであるが、「デジタルトランスフォーメーション」を単なるバズワードにしないためには、やはりデータ分析が不可欠であると感じた。

現在の私はデータベースの性能問題解決に特化した仕事が多いのだが、多くのプロジェクトでは「〇〇刷新」と言いながら、インフラ周りをリプレースするだけで、業務アプリケーションは「現行踏襲」が原則で、データを利活用した業務の大幅な見直しなどというケースには残念ながらほとんど遭遇したことがない。

”IT関連費用のうち8割以上が既存システムの運用・保守に充てられている”

”複雑化・老朽化・ブラックボックス化した既存システムが残存した場合、2025年までに予想されるIT人材の引退やサポート終了等によるリスクの高まり等に伴う経済損失は、2025年以降、最大12兆円/年(現在の約3倍)にのぼる可能性がある”

上記レポートにはこのような悲惨な現状および近未来が描かれているが、やはり根本原因は経営者のITに対する無理解と無関心にあるのではないかと思っている。

しかしながら、データ分析が経営にもたらす成果を経営者が実感できれば、世界は大きく変わるとも思う。

つまり、データ分析は真のデジタルトランスフォーメーションにとって必要不可欠と思うのである。

その意味でも、本書の内容は多くに人に知ってもらいたい。

このような機会を与えてくださった西潤史郎さんに感謝しつつ、この書評を締めくくりたいと思う。

終わり

書評:「SQLデータ分析・活用入門 データサイエンスの扉を開くための技術」① 西潤史郎 (著), 山田祥寛 (監修)

はじめに

著者の西潤史郎さんとは、2011年に倉園佳三さんのITガジェット系セミナーでお知り合いになったのだが、当時は歯科開業に関するコンサルティングのお仕事をされていたと記憶している。

Facebookで繋がってたまにメッセージをやり取りする間柄だったのだが、この度SQLの入門書を執筆されたと知り大変驚いた。

早速、購入しようと思っていたのだが、「ブログで紹介してくれたら献本します。」という書き込みがあったので手を挙げることにした。

現在西さんは、データ・サイエンティスト株式会社のチーフデータエンジニアということで、本書は分析系エンジニア向けの入門書という位置付けで書かれている。私はどちらかというと基幹系データベースのエンジニアであるので、自分の周りのエンジニアを意識しながらこの本の紹介をしたいと思う。

基幹系データベース・エンジニアが分析ツールとしてのSQLを学ぶ意義とは

誤解を恐れずに基幹系と分析系の違いを図示すると以下のようになると思う。

両者は相容れない分野という印象を受けるが、共通言語としてのSQL特にウィンドウ関数に精通すれば、基幹系データベース・エンジニアが自らの領域を広げるよいきっかけになるのではということを本書を読んで感じた。(下図)

特定の業務に精通することは大事だが、長いエンジニアとしてのキャリアを考えた場合、汎用的例えばパフォーマンスチューニングやデータモデリング等の知識を得ることは重要だと思う。

汎用的知識の一つとしての分析系領域にSQLをきっかけとして入り込んでいくことを、基幹系に携わる若いエンジニアには是非意識して欲しいと思った。

そのための入門書としても本書は非常に良書と考える。

本書の構成

本書は第一部と第二部に分かれており、 第一部はデータ分析とSQLの世界の全体像の把握と分析SQLの基本的な理解を目的としている。

第二部では、具体的な分析例とデータ分析の目的および実現方法に対する著者の熱い想いが描かれている。

概要と環境

それでは、目次を最初から見ていこう。

第一部 SQLによるデータ分析の基礎
 第1章 SQLデータ分析の世界
  1.1 SQLによるデータ分析とは
   データ分析ニーズの広がり
   データとデータベース
   リレーショナルデータベース管理システムとSQL
   データ分析の流れ
  1.2 分析システムの広がりとSQL
   基幹システムと分析システムの違い
   分析システムのSQLとデータベースの特徴
   コラム ウィンドウ関数という革新で第2の生を得たSQL
  1.3 なぜ分析SQLのスキルが必要なのか
   データベースにある一次データを取得する
   SQLは分析担当者とエンジニアにとっての「英語」
   コラム ビッグデータに対応するデータベースNoSQLによるSQLへの回帰

第1章はSQLによるデータ分析の概要に関する解説となっている。ここで注目したいのは”SQLは分析担当者とエンジニアにとっての「英語」 ”という箇所である。

共通言語としてのSQL を通してデータ分析者とエンジニアが会話できれば、つまり、SQLを使えば何ができるのかということを分析結果のユーザであるデータ分析者が理解していれば、同じ目的を明確化した分析が可能となるということである。

また、2つのコラムも非常に興味深い。ここは是非ミック氏の「達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへー17 順序をめぐる冒険」を併読して欲しい。

第2章はデータ分析環境についての解説である。サンプルコードはDDLと共に書籍内で指定されたURLからダウンロードできるので、第3章以降の内容は手元の検証環境で実際に確認することが可能である。

私はPostgreSQLの環境で、付録の情報を参考にしながら「SQL Workbench/J」を使って確認を行った。

 第2章 データ分析環境を整える
  2.1 データ分析環境の準備
  2.2 アドホック分析とレポーティングの環境
  2.3 その他の分析ツール
  2.4 SQLクライアントをデータ分析で活用する

 付録
  A.1 SQLクライアント「SQL Workbench/J」の導入方法
  A.2 ダッシュボードツール「Redash」の導入方法と可視化手順

SQLの基本

第3章から第6章はSQLの基本についての解説である。SQLをすでに習得している読者であればざっと読み進めてもかまわないが、基本知識のおさらいにはちょうどよい内容である。

 第3章 データの「分ける」「数える」が分析の基本
  3.1 SELECT文でデータを分析する基本
  3.2 WHEREでデータを絞り込む
  3.3 GROUP BYでデータをグループ化する
  3.4 HAVINGでデータをさらに絞り込む
  3.5 ORDER BY句/LIMIT句でデータをさらに整える
 第4章 分析を効率化するSQLによる前処理
  4.1 異なるデータ型への変換
  4.2 数値のデータ加工
  4.3 日付・時間のデータ加工
  4.4 文字列のデータ加工
 第5章 データをさらに活用するためのテクニック
  5.1 サブクエリを使いこなす
  5.2 INとEXISTSによるデータの調査
  5.3 SQLで基本統計量を求める
  5.4 ログデータひとつでできるユーザ分析
 第6章 複数のテーブルを扱うJOINとUNION
  6.1 テーブルの結合とテーブルの正規化
  6.2 JOIN句によるテーブルの結合
  6.3 特殊な結合
  6.4 UNIONで複数のテーブルを扱う

ウィンドウ関数

第7章は第一部の中でも特に強調しておきたい箇所なので小見出しレベルまで紹介する。

 第7章 分析SQLの主役「ウィンドウ関数」徹底入門
  7.1 ウィンドウ関数の概要
   ウィンドウ関数とは
   ウィンドウ関数でランキングを求める
   ウィンドウ関数の構文
   ウィンドウを明記する、別の表記方法
  7.2 ウィンドウの範囲と順序を指定するPARTITION BYとORDER BY
   PARTITION BYでグループ分け
   PARTITION BYを指定しない場合のウィンドウ
   ORDER BYで並び替える
  7.3 ウィンドウ関数に変身する関数と専用の関数
   順序を扱うウィンドウ関数専用の関数
   集約関数からウィンドウ関数に変身する関数
  7.4 フレーム句を使いこなし分析SQLの達人になる
   フレーム句の構文とフレームのイメージ
   フレームで直近の日付を求める
   RANGEによる値単位での行指定

この章のサンプルSQLを実際に試してみるとウィンドウ関数がどのように機能するかよく理解することができる。ウィンドウ関数についてここまで徹底的に解説してくれる入門書にはあまりお目にかかったことがないので、非常に参考になる。

ウィンドウ関数自体に「WINDOW」 という単語は出てこないことが取っつきにくい印象を与えるが、「ウィンドウ=フレーム」という理解をしていればイメージしやすいのではないかと思った。

基幹系のバッチSQLでも集計を行っているものがあるが、各行ごとに合計値列を追加するためだけにテーブルを自己結合しているような事例をよく目にする。

もし、ウィンドウ関数のテクニックがあれば無駄な結合を解消し、よりシンプルなSQLに書き直すことができるかもしれない。

一般的なSQL入門書は数ある機能の一つとしてウィンドウ関数を簡単に 紹介しているものが多いが、本書は第二部以降の実践編へスムーズに入っていくことができるような構成になっているのが非常によいと感じた。

第二部は実践編

本書のメインは第二部の実践編である。第8章はデータ分析の基本的な実践としてアドホック分析を紹介している。

基幹系システムに関わるエンジニアは、SQLとは定型的な業務を実行するためのツールであり、常に期待された正しい結果を正しい時間内に返すクエリーの作成が最も重要であるという共通認識がある。

従って、オンライン処理にせよバッチ処理にせよ、データの内容によって実行計画が変動し、性能が急激に劣化するような状況が最も問題である。

一方、分析系の世界はその場一回限りの(アドホックな)クエリーを対話的に何度も実行することで、求めるモデルを追求していくという特徴がある。

私は本格的な分析業務の経験がないのであるが、第8章のサンプルを丁寧に実行することで、データ分析の実際を簡単に体験することができた。

第二部 SQLによるデータ分析の実践
 第8章 SQLで小さな分析を積み重ねる
  8.1 小さな分析を積み重ねるアドホック分析
  8.2 ファクトデータを活かす時系列分析
   時系列分析とは
   ウィンドウ関数で簡単、SQLで時系列分析
  8.3 グループ分けを組み合わせるクロス集計
   クロス集計とは
   データの確認
  8.4 実践アドホック分析1〜全体から部分へ分析を進める〜
   モデルのイメージ
   全体の把握
   GROUP BY句でグループを分ける
   ウィンドウ関数によるランク付け
   CASE式によるランク付け
   クロス集計で表を整える
  8.5 実践アドホック分析2〜集計と深掘り〜
   指標を追加し、3指標のランクを求める
   3指標でランクを求める
   ランク値ごとに集計する
   集計値を求める

「8.4 実践アドホック分析1」では、「直近購買日」と「購買頻度」という2つの軸(指標)によるクロス集計をゴールとしている。

GROUP BY句で分けられたグループにおけるランク付けを、ウィンドウ関数とCASE式の2つの方法でランク付けする実習を行うことでそれぞれの特徴を理解することができる。

「8.5 実践アドホック分析2」はさらに「購入金額」という指標を加えることで、最終的にRFM分析を体験することができる。

RFM分析というのは本書で初めて知ったのだが、顧客の購買行動をRecency(最新購買日)、Frequency(購買頻度)、Monetary(購買金額)の3指標で顧客動向を分析することである。

第一部から始まって第8章最後のRFM分析に至る流れを感じることができるので、なかなか練られた構成だと思った。

更なる実践Tips

第9章ではより本格的な分析を行う場合に必要なTipsが解説されている。

 
 第9章 長いSQLを読み解く
  9.1 データ分析でよくある長いSQLの読み方
   内側のSELECT文から読む
   SELECT文は句の処理順に読む
  9.2 統計量「四分位数」を求めるSQLを読み解く
   四分位数とSQL全体像
   SQL全体像と読み解き順序
   ランキングを算出するための相関サブクエリ
   ランキングを算出するクエリ
   ランキングをもとに四分位に振り分ける
  9.3 「バスケット分析」のSQLを読み解く
   バスケット分析について
   データとSQLの関係
   SQL全体像と読み解き順序
   1つめの文「商品の組み合わせと購入回数」
  9.4 「ユーザーの利用機能分析」のSQLを読み解く
  9.5 [番外編]既存のSQLをよりよく改善する

「長いSQLを読み解く」というテーマの章であるが、本ブログでも以前 SQLフォーマッターFor WEB というSQL整形ツールを紹介したことがある。

分析系、基幹系問わず長いSQLをいかに的確に読み解けるかが生産性に大きく寄与するが、この章には本当に必要なエッセンスが書いてある。

第10章はまとめであるが長くなりそうなので次回に続く…