読者です 読者をやめる 読者になる 読者になる

トレジャーデータ(Treasure Data)公式ブログ

トレジャーデータ(Treasure Data)公式ブログです。

データサイエンティストのためのHiveQL分析クエリテンプレート その2

バッチクエリ(Hive) アドホッククエリ(TQA) クエリ集 実践シリーズ

*トレジャーデータはデータ収集、保存、分析のためのエンドツーエンドでサポートされたクラウドサービスです。

データサイエンティストのためのHiveQL分析クエリテンプレートシリーズ:

B. < m1 | Bin(m2), Bin(m3) > パターン

前回はディメンジョンdim1, dim2を直接セグメントとして渡していましたが,今回はメジャーを特定の区間に分類することによってセグメント化されるパターンを見ていきます。

定義

< Count(1)|Bin(m1) > および< Count(1)|Bin(m1), Bin(m2) > をそれぞれ「m1(, m2) における頻度分布(Distribution)」とよび,それぞれDis<m1>, Dis<m1,m2> と書く。わかりやすく「m1 (,m2) の分布」と表現しても良い。また,順序付け可能なディメンジョン dim1, dim2 を含む< Count(1)|Bin(m1), dim1>,< Count(1)|dim1, dim2 > も分布と定義する。

パターン B-1:< COUNT(1) | Bin(m) >

SELECT ceil( #m/width )*width AS x, COUNT(1) AS cnt

FROM

(

  SELECT #m, 1 AS one

  FROM table

  WHERE condition

) t1

JOIN

(

  SELECT POW(10,floor(LOG10(MAX( #m )))-1) / n AS width, 1 AS one

  FROM table

  WHERE condition

) t2

ON t1.one = t2.one

GROUP BY ceil( #m/width )*width

ORDER BY x

※ width を定義する POW(10,floor(LOG10(MAX( #m )))-1) / n は,標準は n=1 で最適な区間を切ってくれますが,より細かい区間を設定したい場合は n=10,100,1000,... を設定してください。

 

以下のHistogramは中古車の相場価格を100,000円ごとの区間に区切って区間毎の頻度を集計したものです。

f:id:treasure-data:20140430154125p:plain

f:id:treasure-data:20140430145807p:plain

このHistogramからわかるのは,30〜40万台をピークになだらかに減少しており,綺麗な単峰になっていることです。500万円以上のものは500万円のセグメントに集約しましたが,500万円以上の車も4281件エントリーされています。

パターン B-2:< COUNT(1) | Bin(m1), Bin(m2) >

次は2つのメジャーを区間によってセグメント化した2次元分布です。

SELECT ceil( #m1/t2.width)*t2.width AS x, ceil( #m2/t3.width)*t3.width AS y, COUNT(1) AS cnt

FROM

(

  SELECT #m1, #m2, 1 AS one

  FROM table

  WHERE condition

) t1

JOIN

(

  SELECT POW(10,floor(LOG10(MAX( #1 )))-1) AS width, 1 AS one

  FROM table

  WHERE condition

) t2

ON t1.one = t2.one

JOIN

(

  SELECT POW(10,floor(LOG10(MAX( #m2 )))-1) AS width, 1 AS one

  FROM table

  WHERE condition

) t3

ON t1.one = t3.one

GROUP BY ceil( #m1/t2.width)*t2.width, ceil(#m2/t3.width)*t3.width

ORDER BY x, y

中古車価格と走行距離の頻度分布をHistogramを示します。

f:id:treasure-data:20140430152110p:plain

f:id:treasure-data:20140430151841p:plain

Histogramについては,次の参考をお読みになって理解を深めて下さい。本日はここまでです。

参考

分布を可視化したものを Histogram と呼ばれ,以下の様な条件で可視化されます。

Histogram

  • 数値変数(連続・離散)のみ適用可能。
  • 数値変数が適当な区分に分割され,その区分に属するサンプルの個数(頻度)を表現する。または全体頻度に対する個々の区分の割合を表現する。
  • 頻度の大きさは棒の高さではなく,(棒の面積)= (棒の高さ)×(棒の幅)で表現される。
  • 故に各々の区分は等幅である必要は無い(棒の高さで調節できるので)。
  • 隣接する棒は頻度が 0 出ない限り,無駄に隙間があってはいけない。
  • 全体頻度(または,全体割合)は全ての棒の面積の総和になり,これはどのような区分幅の取り方に寄らず一定である。

f:id:treasure-data:20140430144744p:plain

上の3つのHistogramは全て同じデータセットを表現しており,上の2つのHistogramは区分幅の取り方が異なっています。幅の取り方はデータセットに依存する問題で,その取り方によって分布の見え方が異なってしまいます。下の左図は同時に正規分布の確率密度曲線を描いています。この場合は単位をあわせる意味も含めて頻度では無く割合で表現しています。下の右図はこのHistogramの累積分布曲線を描いています。

トレジャーデータに関するお問い合わせは  support@treasure-data.com まで。