Google Data Studio でヒストグラムを描画する


Google Data Studio で、棒グラフが描画できます。
この棒グラフで、ヒストグラムが描画できないか試してみました。
結果を記載します。


Google スプレッドシート の グラフを使用する

それほど、簡単にはいかなかったので、特に Data Studio に執着しないのであれば、Google スプレッドシートのグラフを使用したほうが簡単に描画できます。

また、階級計算用の、FREQUENCY という関数もあります。
この関数を使用して計算した結果をグラフ描画に用いても良いかもしれません。


参考

How to make a simple histogram (representing a distribution) in Google Data Studio? - Stack Overflow

CASE - データスタジオ(ベータ版)のヘルプ

GoogleSpreadsheetsでGASを使うと「#ERROR!」(”Service Invoked Too Many Times”エラー) - KEINOS™の日記


グラフ描画に使用しているデータ

スプレッドシートに記録している、WebPagetest のデータを使用しています。
以前 TSV 化したものを、gist に UP しています。
WebPagetest の同一画面を 回線速度 3GFast FIOS で 測定した結果 を TSVにした


CASE 文で階級フィールドを作成し、ヒストグラムを描画する

データソースに、計算フィールドを作成し、SpeedIndex の値に応じて、階級をテキストで返す CASE 文を設定しました。

  • CASE 文

    CASE           
        WHEN ブログ記事-SpeedIndex > 0 AND ブログ記事-SpeedIndex <= 500 THEN "B1 0-500"                   
        WHEN ブログ記事-SpeedIndex > 500 AND ブログ記事-SpeedIndex <= 1000 THEN "B2 500-1000"        
        WHEN ブログ記事-SpeedIndex > 1000 AND ブログ記事-SpeedIndex <= 1500 THEN "B3 1000-1500"       
        WHEN ブログ記事-SpeedIndex > 1500 AND ブログ記事-SpeedIndex <= 2000 THEN "B4 1500-2000"     
        WHEN ブログ記事-SpeedIndex > 2000 AND ブログ記事-SpeedIndex <= 2500 THEN "B5 2000-2500"      
        WHEN ブログ記事-SpeedIndex > 2500 AND ブログ記事-SpeedIndex <= 3000 THEN "B6 2500-3000"
        WHEN ブログ記事-SpeedIndex > 3000 AND ブログ記事-SpeedIndex <= 3500 THEN "B7 3000-3500"
        WHEN ブログ記事-SpeedIndex > 3500 AND ブログ記事-SpeedIndex <= 4000 THEN "B8 3500-4000"
        ELSE "B9 4000-"
    END               
    

  • 評価するフィールドの集計方法はなしを設定する
    ブログ記事-SpeedIndex というカラムは、数値フィールドです。
    数値の集計方法が、なし以外の場合は、以下のエラーが発生して CASE 文がエラーになります。
    Only numeric literals are allowed if aggregated fields are used in CASE.

  • 階級名は、昇順、降順ソートで意図した順序で並ぶように名前づけする
    私は、B1 0-500 のように、頭 2 文字でソートできるように文字列を付与しました。
    Data Studio で対象のディメンションでソートする際、ここでの名前づけが効いてきます。


Google スプレッドシートで、計算しておく

Goolge スプレッドシートに カラムを追加して、以下の function を 式として組み込み、階級をあらかじめ計算しておき、それをGoogle DataStudio で描画するという方法もあります。

  • JavaScript

    function CREATE_BINS(value) {
      if(typeof value === "undefined" || value == "") {
        return "";
      }
      if(0 < value && value <= 500) {
        return "B1 0-500";
      }
      if(500 < value && value <= 1000) {
        return "B2 500-1000";
      }
      if(1000 < value && value <= 1500) {
        return "B3 1000-1500";
      }
      if(1500 < value && value <= 2000) {
        return "B4 1500-2000";
      }  
      if(2000 < value && value <= 2500) {
        return "B5 2000-2500";
      }
      if(2500 < value && value <= 3000) {
        return "B6 2500-3000";
      }  
      if(3500 < value && value <= 4000) {
        return "B7 3500-4000";
      }
      return "B8 4000-";
    }
    

  • 大量の計算発生によるエラー
    元々、SpeedIndex を記録していたシートに、上記の式を組み込んだのですが、function が大量に実行されたようで、結構な割合で以下のエラーが発生しました。
    Service invoked too many times in a short time:exec qps. Try Utilities.sleep(1000) between calls.(行0) が発生しました。 徐々に更新入力が行われて、少しずつ計算される場合は、問題なく計算されますが、大量に再計算が走る場合は、式の実装は見直したほうがよいかもしれません。


まとめ

DataStudio でのヒストグラムの描き方(というか、CASE文での階級計算の仕方)について記載しました。
スプレッドシートで、計算するよりも、DataStudio で計算フィールドを追加するほうが、データソースに依らず使用できるので、汎用的に思います。
ただ、そもそも CASE 文を書くのが中々面倒で、スプレッドシートのように、ヒストグラムを一撃で作成する機能が実装されたらきっとそれを使います。
以上です。

コメント