はじめまして。Kyashでデータエンジニアリングを担当しているKyashデータマンです。この記事では、Kyash社内のデータ分析の基礎に関するドキュメントを紹介します。
Kyashでは、データエンジニアリング・ガバナンス・セキュリティなど様々な角度から、公正なデータの取扱いと活用を推進しています。従来は、一部の訓練された技術者がデータ分析を一手に担っていましたが、社内でもデータ活用のニーズも多く、その担当者に分析や集計の業務が集中するという課題がありました。
この課題に対して、データへの適切なアクセス管理を行い、そして適切なBIツールを導入することで、データを取り扱う人が自分でデータ分析・そして活用できるようになることを目指しています。アクセス管理には、個人情報やそれに準ずる機密データに対して、ポリシータグによるアクセス権のコントロール、そしてアクセス権のリネージなどのソリューションの導入推進により、誰もが適切なデータにアクセス出来る環境を整備しています。またBIツールとしては、SQLなどの知識が極力必要のない、Tableauを採用しました。
しかし、BIツールを導入しただけでデータ活用の文化が社内に浸透するでしょうか?もしくは、BIツールを導入すると全員がそれを使いこなすことができるのでしょうか?
社内でのヒアリングを進めていくうちに、BIツールを使いこなすためには、前提となるデータ・データベース・集計・可視化などの前提知識が不可欠であることがわかってきました。今回ご紹介する社内ドキュメントには、BIツールを使いこなすためのデータに関する基礎知識をまとめています。いわばデータを今まで触ったことがないという方向けのデータ分析の基礎の基礎です。実務家にとっては当然の前提知識ではありますが、「今までデータを触ったことはないが分析のスキルを身に着けたい」という方のお役に立てれば幸いです。
使用したデータ
実際のドキュメント中では可能な限り安全な社内データを使用していますが、記事公開にあたって、Tableau Desktopに付属するデモデータを使用させていただきました。
ゼロから始める、データを分析と可視化
テーブル
データ
システムが何らかの処理を行うとき、システムはその処理を行ったという記録を残します。例えばシステムが行う「たろうさんが昨日、ファミリー商店でコーラを150円で買った」という処理について考えます。この処理を正確に記録するためには、この事実から以下のような要素を取り出すと良さそうです。
だれが | いつ | どこで | 何を | いくらで |
たろう | 昨日 | ファミリー商店 | コーラ | 150円 |
データ分析の文脈では、多くの場合このように構造化された情報を データ(data) といいます。
テーブル
また、多くの場合システムは同じ処理を繰り返し行います。そして同じ構造のデータが繰り返し記録されたとき、その記録は次のような表として表現できます。
だれが | いつ | どこで | 何を | いくらで |
たろう | 昨日 | ファミリー商店 | コーラ | 150円 |
はなこ | 昨日 | セブン商店 | おむすび | 150円 |
やまだ | 昨日 | ファミリー商店 | おむすび | 100円 |
... | ... | ... | ... | ... |
データ分析の文脈ではこのような、「同じ構造の情報の繰り返し」を記録した表を テーブル(table) といいます。
この表を横方向によむと「ひとつの処理」の内容を読み取ることができますが、この一つ一つの行を レコード(record) もしくは単に 行(row) と言います。
この表を縦方向に読むと、すべての処理の特定の性質(例えば、誰が)を読み取ることができますが、これをフィールド(field) もしくは単に 列(column) といいます。
スキーマ
例えばこのテーブルには、すべての行において「誰が」「なにを」「いつ」「どこで」「いくらで」買ったのかという共通の構造があります。また、それぞれのフィールドには、文字列や時刻、数値など「同じ種類の値」が格納されていることがわかります。
この「データの種類」を 型(type) といいます。そしてこのテーブルの「構造と型の組み合わせ」を、このテーブルの スキーマ(schema) といいます。
名前 | 型 |
誰が | 文字列 |
いつ | 時刻 |
どこで | 文字列 |
何を | 文字列 |
いくらで | 数値 |
実物を見てみよう
(実際のドキュメントでは実物のテーブルのへのリンクが挿入されています)
マスタとトランザクション
テーブルには大まかに マスタ(master) と トランザクション(transaction) の2種類があります。
トランザクションデータ
冒頭で紹介した、決済ログ のような「処理を記録したデータ」を トランザクションデータ といいます。
マスタデータ
処理の記録以外にも、人物や銀行、カードなどの特徴を表形式で表現したテーブルがあります。これを マスタ といいます。
マスタデータの例
id | 名前 | 性別 | 生年月日 | 住所 |
0001 | たろう | Male | 19yymmdd | 世田谷区 |
0002 | やまだ | Male | 19yymmdd | 港区 |
0003 | はなこ | Female | 19yymmdd | 世田谷区 |
マスタデータとトランザクションデータの特徴
マスタ | トランザクション | |
データの量 | 少ない、数十から数万くらい | 多い、数億など |
増減 | 減ることがある | 減ることがない |
更新が発生するか | 更新される | めったに更新されない |
レコードの意味 | ひと、銀行などの要素 | ひとつの手続き |
データ分析を行う際は、そのテーブルがマスタなのか、トランザクションなのかを意識すると色々とうまくいきます。
集計とクロス集計
集計
あるテーブルのフィールドについて、「すべての値を要約すること」を 集計(aggregation/tabulation) といいます。
だれが | いつ | どこで | 何を | いくらで |
たろう | 昨日 | ファミリー商店 | コーラ | 150円 |
はなこ | 昨日 | セブン商店 | おむすび | 150円 |
やまだ | 昨日 | ファミリー商店 | おむすび | 100円 |
例えば、このテーブルにおいて、金額のフィールドの「合計」をもとめることは、金額フィールドを要約する作業に該当します。
代表的な集計の種類
集計には以下のようなものがあります
名前 | 内容 |
合計値 | すべての値を足し合わせた数 |
カウント | 行数 |
平均値 | おおよそ真ん中の値その1: 合計値を行数で割った値 |
中央値 | おおよそ真ん中の値その2: 大きい順に並べて真ん中の値 |
最小(大)値 | もっとも小さい(大きい) |
... | ... |
クロス集計
ほとんどすべてのデータ分析で通る工程なのでとても重要です。
クロス集計の際には 量的データ と 質的データ という考え方が重要です。
量的データ
先の例では金額を足し合わせました。これと同じ作業を「どこで」のフィールドに適用することを考えます。しかしこのフィールドの値は文字列なので、実際には足し合わせることはできません。
このように足し算や掛け算が意味をなす値を 量的データ といいます。この量的データはしばしば集計の対象となりうるデータです。
余談ですが、Tableauでは量的データのことを メジャー(measure) と呼んでいます。
質的データ
また逆に、単に名前であったり、日付であったり、並べることは出来なくもないが、足したり掛けたりできない値を 質的データと言います
この質的データは基本的に集計の対象とはなりえません。(並び替えられるものは、最小値などが計算できることもある)
余談ですが、Tableauでは質的データのことを ディメンション(dimension) と呼んでいます。
量的データと質的データの例
名前 | 型 | 量的データ/質的データ |
誰が | 文字列 | 質的データ |
いつ | 時刻 | 質的データ |
どこで | 文字列 | 質的データ |
何を | 文字列 | 質的データ |
いくらで | 数値 | 量的データ |
一つ注意があります。それは 値が数値でもそれが量的データとはかぎらない ことです。例えばuser_id
などの、識別子として使われるデータは仮にスキーマの上では数値でも、それを足しても掛けてもその結果に何の意味も持ちません。つまりそれは、型が数値であっても質的データとみなして分析を進めないといけません。
クロス集計
質的データでテーブルを分割して、量的データを集計 することを クロス集計(cross tabulation) をといいます。
これは例えばGoogle Spreadsheetなどではピボットテーブルと呼ばれている集計です。
例えばもとの売上のテーブルにおいて、「品目ごとに、売上合計を計算する」ことは、クロス集計にあたります。
だれが | いつ | どこで | 何を(質的データ) | いくらで(量的データ) |
たろう | 昨日 | ファミリー商店 | コーラ | 150円 |
はなこ | 昨日 | セブン商店 | おむすび | 150円 |
やまだ | 昨日 | ファミリー商店 | おむすび | 100円 |
↓ クロス集計
何を | いくら |
コーラ | 150 |
おむすび | 250 |
このことを 合計金額を品目でクロスにかける などといいます。他にも次のようなものはすべてクロス集計です。
可視化
可視化の威力
クロス集計の結果は、単に数表を眺めていてもすぐには理解できません。 大まかな傾向や、比較の結果などはそのデータをグラフとして表現することで、よりわかりやすくなります。これを可視化(visualize) といいます。 例えば可視化前のデータ(Tableau Superstore)をみてみましょう。
- 可視化前のデータ(売上高を月と商品カテゴリでクロスに掛けたもの)
これではたとえクロス集計がうまくいったとしても 「直近6ヶ月の売上の増加傾向は?」などの ビジネス上の問いに即答することは難しいでしょう。
これを上手に可視化してみましょう。
この図を参照すれば、「直近6ヶ月の売上高は増加傾向。先月は落ち込むが主な要因はTechnology系の売上の急減」などと、即座に近況を理解し、周囲に説明、そして次のアクションを考えることができます。
この作業には若干の慣れが必要です。続く節ではその可視化のコツを紹介します。
可視化のコツ
ステップ1:フィールドを高々3つに絞る
当たり前のことですが、グラフは平面の画像 です。したがって表現にはたかだか以下のようなものしか使えません。
- 縦軸はなにか?
- 横軸はなにか?
- 色はなにか?
したがってわかりやすいグラフを作るために、まず使用するフィールドをたかだか3つに絞りましょう。
元データ
だれが | いつ | どこで | 何を | いくらで |
たろう | 昨日 | ファミリー商店 | コーラ | 150円 |
はなこ | 昨日 | セブン商店 | おむすび | 150円 |
はなこ | 昨日 | ファミリー商店 | おむすび | 100円 |
例えばこのデータを用いて「コンビニごとの、売上を、品目毎に知りたい」とします。
このとき、見るべきデータは以下の3つのフィールドに絞られます。
絞ったデータ
どこで | 何を | いくらで |
ファミリー商店 | コーラ | 150円 |
セブン商店 | おむすび | 150円 |
ファミリー商店 | おむすび | 100円 |
だいぶシンプルになりました。
ステップ2:グラフの横軸・縦軸・色のラベルを決める
次に選択したフィールドをグラフ上でどう表現するのかを決めます。つまりそれぞれのフィールドが縦・横・色のどれに当たるのかを決めます。例えば次のような感じです。
- 横軸 -> どこで
- 縦軸 -> いくらで
- 色 -> なにを
ココまで決まったらもう、可視化は終わったも同然です。
ステップ3:グラフを作る
あとは、お好みのツールを使ってグラフを描画するのみです。 基本的な考え方はどれも同じですが、グラフを作成するツールは色んなものがあるので、ここで詳細は紹介しません。例えば次のような手段があります。
- Python x seaborn / matplotlib
- R x ggvis / Tidyverse
- MicrosoftExcel
- Google Spreadsheet
- Google Data Portal
- Redash
- Looker
- Tableau
続く節ではKyashが採用したTableauの使い方を説明します。
ちなみにスプシでサクッとやるとこんな感じです(実際のドキュメントではGoogle Spread Sheetによる可視化サンプルのリンクが入る)。しっかり横軸と縦軸、そして色が事前に決めたとおりになっていることを確認しましょう。
グラフの種類
可視化と一言に行っても様々な種類があります。適切なデータを適切な方法で可視化することで、その情報をよりわかりやすく・有益なものにします。
この節では、折れ線グラフや棒グラフなど、それぞれの適切なユースケースをご紹介します。
折れ線グラフ(line chart)
用いられるケースは2つあります。
1つ目は観測点が荒い、絶え間なく変化する量 に対して用いられます。イメージとしては曲線の近似です。
- 体重
- ダムの水位
- 気温
2つ目は 相対的な変化だけに着目すればいい場合 です。これは縦軸からゼロを消してもミスリードしない場合と考えていいでしょう。 比率などのデータにしばしば用いられます。
- 利益率
- コンバージョン率
棒グラフ(bar chart)
比率とは対照的に、「量」を表現する場合に用いられます。
- 降水量
- 交通量
- 決済額
重要なの 縦軸からゼロを省かないこと です。
以下のグラフは2つとも月ごとの来客数を表すグラフだとして、片方からはゼロを省いています。
それぞれどういう印象を受けたでしょうか?右のグラフからは縦軸から0を省いていますが、実際にはほとんど変化していない来客数が大幅に減少したかのように見えてしまします。 要するに棒グラフの場合はゼロからの距離が重要なのです。
帯グラフ(component bar chart)
ある構成比を表すときに用いられます。
散布図(scatter plot)
2つの量の相関を見るときに用いられます。
円グラフ
使うのはやめましょう。ユースケースは帯グラフと全く一緒です。帯グラフを使いましょう。
データベース
実際に可視化に使うデータは様々な場所に格納されています。それがcsvかもしれませんし、SpreadSheetかもしれません。ただKyashにおいては多くのみなさんが分析すべきデータは、データベース(database) と呼ばれるテーブルデータを保管・抽出するためのシステムの中に保管されています。
データベースにも色々な種類がありますが、Kyashでは主に Google Cloud BigQueryというデータベースを使用しています。これをみんな「びっぐくえり」とか「びーきゅー」などと呼んでいます。
BigQueryのデータをみてみる
BigQuery上にあるKyashのデータは以下で確認できます。
- <Bigquery Consoleまでのリンクが張ってある>
Project / Dataset / Table
Google Cloud BigQuery特有の概念です。
テーブルは、この記事の冒頭で紹介したテーブルと同じ意味です。テーブルはデータセットの中に格納されていて、データセットはプロジェクトの中に格納されています。
先のBigQueryの画面に行くと左側にツリー構造のタブがあります。上段からそれぞれProject / Dataset / Table となっていることが確認できます。
Project
特に意識することはないです。Kyashでは開発用の環境を 実際のdevプロジェクトの名前
、本番環境を 実際のprdプロジェクトの名前
というプロジェクトに保存しています。
Dataset
データセットはテーブルの集まりですが、現在は主にデータの発生元ごとにデータセットを分割しています。
Table
このドキュメントの冒頭で説明したテーブルと同じ意味です。
FAQ
「どのテーブルに何のデータがあるか全くわからない」
以下に存在するテーブルの概要がまとめてあります。
- 社内別ドキュメントへのリンク
「え、テーブルたくさんあってむずかしくないですか?」
むずかしいです。データ分析をやるとはそういうことだったりもします。
ただ全てを把握する必要もなくて、みなさんが担当する範囲のテーブルだけ構造を理解すればいい と思います。頑張りましょう! 補足のために書いておくとKyashのデータは本当にきれいです。 たくさんテーブルがあるように見えて、非常によく設計されていると思います。 データチームはある程度把握していて、かつ細かい部分はデータチームも各開発チームにヒアリングしながら分析してたりします。 まずはデータチームにお気軽にお問い合わせください。
「Tableauから参照できない」
あとで紹介する手順で 見つからない場合はデータチームに問い合わせてくださいね!
テーブルとフィールドの命名規則
テーブルやフィールドは名前を持ちますが、これには運用を簡単にするための慣習があります。
これはBigQueryだけではなく多くのデータベースにおいて共通の慣習ですが、テーブル名は複数形 フィールド名は単数形 を用います。これにより、パッとみたかんじでそれがテーブルの名前なのか、フィールドの名前なのかを見分けることができます。
テーブル名の例
- wallets
- users
- wallet_transactions
フィールド名の例
- user_id
- created_at
- is_kyc
特に時刻に関するフィールドはxxxx_at
のように_at
が最後についています。また、True/Falseのような真偽値には is_xxx
のように is_
を先につけます。これはKyashに限らず多くのデータベースで多くの技術者がこのルールを採用しています。
Tableauでデータを分析する
雰囲気をつかむ
可視化するための横軸、縦軸そして色が決まったら、基本的にはあとはそれぞれの場所にドラッグアンドドロップするだけです。
画面の左側にはフィールドの名前の一覧が表示されています。
青のアイコンで表示されているのが質的データでTableauではdimension といいます。
緑のアイコンで表示されているのが量的データでTableauではmeasureといいます。
好きなフィールドを色んな所にポチポチドラッグアンドドロップしてみてください。いろんなことができますよ!
作る前に確認すること
こちらに確認事項がまとまっているので参考にしてください。
Q0: 既に作成されたダッシュボードに必要なデータが存在する
- A0 Yes
- そちらを御覧ください!
- A0 No あるかどうかわからない
- データチームに相談。一緒に探しましょう。
- A0 No 確実にない
- Q1へ
- A0 Yes
Q1: Tableauをつかって自分でデータ抽出ができそう
- A1 Yes
- お願いします
- A1 No:できそうだけど権限がない
- 権限がある人に依頼しましょう!わからなければ
#tableau-terakoya
チャンネルで@techdata
宛にメンション
- 権限がある人に依頼しましょう!わからなければ
- A1 No : できそうだけど使い方がわからない。
#tableau-terakoya
チャンネルで@techdata
宛にメンション相談。丁寧にサポートします!
- A1 No:ちょっと何言ってるかわからない。何もかもが意味不明。
- おちついてまずは相談!
#tableau-terakoya
チャンネルで@techdata
宛にメンションしたらきっと貴方を助けてくれるわ!
- おちついてまずは相談!
- A1 No:必要なテーブルがTableauにPublishされていない
- データチームに相談。テーブルをPublishします
- A1 No:複数のテーブルを結合するなど、複雑なデータを可視化したい
- Q2 へ
- A1 Yes
Q2: 今後も定期的に同じようなデータが必要になる
- A2 Yes
- データチームにお問い合わせください。必要な中間テーブルを整備します
- A2 No
- Q3へ
- A2 Yes
Q3: SQLが書ける
Project
- 閲覧権限を管理する最大の粒度です
- 中には以下のような要素が格納されています。
- Workbook
- Metrics
- DataSource
ほとんどの方はWorkbookだけ理解していればOKです
Workbook
- 一つのテーマに関するデータの集まりです
- 中には以下のような要素が含まれて言います
さしあたってみなさんが「データを可視化する・抽出する」とは具体的には以下のような作業になります。
- 適切なProjectにWorkbookを作成する
- Workbookの中にSheetを作成する
- 保存して公開する
作成したいグラフを思い浮かべる
まずはどんなグラフを作りたいのかを思い浮かべてみましょう。 先に説明したとおり、以下の要素がどんなフィールドになるのかを決めてみてください
- 横軸
- 縦軸
- (色)
- グラフの種類
テーブルを探す
グラフを描画するために必要なデータがどこに有るのかを調べましょう。
わからなければデータチームに気軽に問い合わせてください。
参考
- 社内ドキュメントへのリンク。テーブル構成に関するドキュメント
Workbookを作成する
実際のドキュメントでは具体的なTableauの操作方法に関する基礎的なガイダンスを提供しています。本記事ではクロス集計などデータ分析の基礎的な内容にフォーカスするため、具体的な可視化ツールの使用方法については割愛させていただきます。
さいごに
いかがだったでしょうか?従来であればデータ分析は、一部の訓練を受けた人間の特殊なスキルでした。一方近年では、データベースやBIツールの発展により、データ分析がより身近なものになってきています。データ分析はこれからの全てのビジネスパーソンの必須スキルとなりつつあります。しかしながら多くの企業にとって、社員がどのようなスキルを身につければよいのか、そのためにどんなカリキュラムが必要なのかという点が悩みのタネとなっているのではないでしょうか?この記事がそのような方のための参考事例として、データリテラシ向上の一助となることを心より願っています。
告知
Kyashでは、ソフトウェアエンジニアを募集中です!!
カジュアル面談も転職の意思を問わず歓迎しますのでお気軽にお申し込みください。