この記事はLooker Advent Caledar 2021 20日目の記事となります。

はじめに

この記事では Looker でヒストグラム(度数分布図)を作成する方法を説明します。

ヒストグラムは棒グラフと似ていますが、
棒グラフの横軸がラベル(属性)を示すのに対して、
ヒストグラムの横軸は連続した数値の範囲を示します。

棒グラフでは例えば「顧客別の売上金額の差」などを表現するのに用います。

ヒストグラムでは例えば「身長の高さ別の人数の分布」などを示すのに使います。

*本来ヒストグラムでは棒同士をくっつけて表現するのですが、スプレッドシートのグラフ機能で幅を無くす方法がわかりませんでした…。

今回は Looker でこのヒストグラムを作る方法についてご紹介します。

この記事を読むとわかること

  • Looker でのヒストグラム(度数分布図)の作成方法
  • 各ヒストグラム作成手法の使い分けについて

作成手法

今回は BigQuery 上にあるデータを用いてヒストグラムの作成を行います。
そのため、別の BigQuery 以外のデータベース・データウェアハウス製品を利用する場合には、LookML 上の記述をそれぞれの形式に合わせてご利用ください

また今回は Google Cloud が公開しているデータセットである austin_bikeshare の bikeshare_trips のテーブルを利用します。

このテーブルは以下の情報を含んでおり、主に duration_minutes(利用時間) を利用してグラフを作成します。

フィールド名 種類 説明
trip_id INTEGER Numeric ID of bike trip
subscriber_type STRING Type of the Subscriber
bikeid STRING ID of bike used
start_time TIMESTAMP Start timestamp of trip
start_station_id INTEGER Numeric reference for start station
start_station_name STRING Station name for start station
end_station_id STRING Numeric reference for end station
end_station_name STRING Station name for end station
duration_minutes INTEGER Time of trip in minutes

このテーブルを利用してヒストグラムを作成していきます。

公開データセットの使用方法については以下のドキュメントをご参照ください。
https://cloud.google.com/bigquery/public-data

またこの記事ではテーブルの作成方法・Looker からの接続の作成方法等は記載いたしません。
Google Cloud ・Looker の公式ドキュメントをご参照ください。

手法1 type:tier の dimension を使う

最もシンプルな方法として、Looker の dimension type:tier を用いヒストグラムを作成します。
利用時間の幅により階級を定義してヒストグラムを作成します。

まずは先程のテーブルから自動生成した View ファイルを用い、以下の通り dimension: duration_minutes から dimension: duration_minutes_tier を作成します。

## 自動生成された dimension
dimension: duration_minutes {
    type: number
    sql: ${TABLE}.duration_minutes ;;
  }

## 追加した階級を定義した dimension
dimension: duration_minutes_tier {
    type: tier # type: bin でも挙動は同じ
    sql: ${duration_minutes} ;;
    style: relational  # style は classic(デフォルト値)/interval/integer/relational の4種類が利用可能
    tiers: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100] # 数値で階級を定義する
  }

上記の LookML が作成できたらこの View ファイルを参照する Explore を開きます。

先程追加した dimension: duration_minutes_tier が追加されているため、それと count を選択します

右上の実行ボタンを押すと以下のように「利用時間10分刻みでの利用回数」を示したグラフができあがります。

階級の幅は tiers の値を変更することでグラフ上での表示も変更することが可能ですが、tiers を変更するためには開発者権限を持つユーザーが LookML を都度修正する必要があります。

手法2 Custom Viz を使う

手法1 では tier の dimension を使ってヒストグラムを作成する方法を紹介しました。
tier を用いる手法は簡単ではあるのですが、階級幅を変更する際に LookML の修正が必要となり、
開発者でないと階級幅を変更することができません。

年齢など、ある程度階級幅が固定できるようなものであればよいのですが、そうではない場合にはこちらの手法を使います。

Looker マーケットプレイスにある Histogram Visualization の Custom Viz を用いることで、階級の幅等を自由に変更が可能になります。

それでは手法を説明していきます。

まずは Custom Viz:Histogram Visualizat をインストールするため、Looker マーケットプレイスにアクセスします。


その後表示される案内に従いインストールを行ってください。

インストールが完了したら先程の Explore を開きます。

dimension: Trip ID / measure: Total Duration Minutes を選択し、Subscriber Type のフィルタで「Student Membership」でフィルタリングを行います。
(フィルタは必須ではありませんが、一旦ここではフィルタを設定します。理由は後述)

そして行数上限を最大値の「5000」に変更し、ビジュアリゼーションを先程追加した「Histogram」に変更し、実行すると上記のようなグラフが表示されます。

ビジュアリゼーションの設定を変更することで、様々な表現が可能です。

例えば、

  • 階級幅の設定方法を変える(階級数設定する/階級幅の値を設定する など)
  • 階級数を変更する
  • 外れ値を除く

などが可能です。

このように手法1に比べると柔軟な階級幅の設定等が可能な一方、この手法には明確な弱点があります。
それは5000行以下のデータを元にしてしかグラフの作成ができないことです。

この手法は Looker 上で取得したデータを用いてグラフの作成を行うため、Looker の Explore 画面で表示不可である5001行以上のデータを用いることができませんのでご注意ください。
(そのため、先程 Subscriber Type のフィルタで「Student Membership」でフィルタリングを行いました)

手法3 Parameter を用いた動的 Dimension を使う

Tier の設定が固定しづらく、かつ5001行以上のデータを扱いヒストグラムを作成する場合には、動的 Dimension を用いてヒストグラムを作成します。

前提として parameter 及び Liquid 式を扱える必要があります。
Liquid 式については以下のドキュメントをご参照ください。
https://docs.looker.com/ja/reference/liquid-variables

また先程の View ファイルに戻り、以下の parameter / dimension を作成します。

## 階級幅の設定用のパラメータ
  parameter: duration_minutes_bucket_size {
    type: number
    default_value: "5"
  }
  
  ## parameter を用いて階級の開始値を動的に生成する dimension を作成する
  dimension: duration_minutes_bucket {
    type: number
    sql: TRUNC(${duration_minutes} / {% parameter duration_minutes_bucket_size %}, 0) * {% parameter duration_minutes_bucket_size %} ;;
  }

先程の Explore に戻り、

  • dimension: Duration Minutes Bucket
  • Measure: Count
  • Filter: Duration Minutes Bucket Size
  • ビジュアリゼーション: Column

を選択し実行すると以下のようなグラフが表示されます。

こちらは階級幅が Filter: Duration Minutes Bucket Size により 5 に設定されているため、3分幅で分布が見られるように値を 3 に変更し、利用時間の並び順を昇順に変更します。
(合わせて150分以上の利用データを除外するフィルタを設定します)

すると上記のようなヒストグラムが作成されました。
大体3分から9分程度の利用が大きな割合を占めていることがわかります。

このように parameter と parameter の値により動的に生成される dimension を用いることで、階級幅を変更させながら分析を行うことが可能になります。

手法1・手法2に比べると parameter / Liquid 式を使う必要があるため、とっつきにくさはありますが使いこなせば非常に便利な手法です。

また手法1・手法2はダッシュボードのみしか利用できないユーザー(Viewer ライセンス)は階級範囲の変更などはできませんが、この手法はダッシュボードにフィルタとして parameter を設定してあげれば Viewer ライセンスのユーザーでも階級範囲の変更が可能になる点もメリットとなります。

ユースケースに合わせた手法の選択

3つの手法を紹介しましたが私は以下のようなメリット・デメリットを考えつつ、そのときの状況に応じてそれぞれの手法を選択しています。

No. 手法 メリット デメリット ユースケース
手法 1 tier を使う ・LookML の実装がシンプル(標準機能)
・Explore 画面でのグラフ作成が容易
・階級幅の変更には開発者権限が必要 ・年齢などの比較的階級幅の固定しやすい値を用いたグラフを作成する場合
手法 2 Custom Viz を使う ・Explore 画面のみで設定可能
・単純なヒストグラムだけでなく、複合ヒストグラムも作成可能
(こちらの使い方は本記事では未紹介)
・5000行より大きいレコードを元にした分析は不可 ・階級幅を動的に変更したい かつ 5000行以下のレコードを扱う場合
・2種類の分布の関連性等を分析したい場合
手法 3 動的 dimension を使う ・階級幅がフィルタ設定のみで変更可能
・Viewer ライセンスユーザーでも比較的自由な分布分析が可能
・parameter / Liquid 式を扱える開発スキルが必要 ・階級幅を動的に変更したい かつ 5001行以上のレコードを扱う場合
・Viewer ライセンスユーザーにも分布分析を行わせたい場合

まとめ

Looker でヒストグラムを作成する3つの方法をご紹介いたしました。

なお、この手法の他にも最近リリースされた便利機能として、Explore 上で数値型の dimension に対して簡単に Tier 分けを行うことが可能な Bin という機能が提供されています。

参考:Looker Community「Looker21.14で対応の Tier分けを実現するbin機能の使い方について

ユースケースに合わせてぜひ試していただけましたら幸いです。

合わせて読みたい