36
A Single Variable: Shape and Distribution CAPTURE TWO : Kousuke Takeuchi

Data Analysis - Chapter two

Embed Size (px)

DESCRIPTION

阪大情報科6セメのゼミナールBで作成した資料です。

Citation preview

Page 1: Data Analysis - Chapter two

A Single Variable:Shape and Distribution

CAPTURE TWO : Kousuke Takeuchi

Page 2: Data Analysis - Chapter two

Capter Two - Outline

Jitter Plot

Histogram and KDE (Kernel Density Estimates)

CDF (Cumulative Distribution Function)

Rank Order Plots and Lift Charts

Numpy - Vector & Tensor

Page 3: Data Analysis - Chapter two

Jitter Plot

Page 4: Data Analysis - Chapter two

Single Variable

単一変数のデータ分布を観察する際には、どのようなことについて考えるだろうか?

早速2つの例をもとに考えてみよう!

Page 5: Data Analysis - Chapter two

Ex.1 大統領の任期

まずは大統領がホワイトハウスに出勤した期間のデータを視覚的に表現してみる

3列目のデータが、実際に大統領が出勤した月数のデータ

Page 6: Data Analysis - Chapter two

x軸上にデータ点をプロットしてみる

欠点:重複する点がすべて同じ点で表現されてしまうため、クラスターとなっている部分が視覚的に確認しづらい

Page 7: Data Analysis - Chapter two

Jitter Plot

Jitter Plot の作成の仕方:先ほど x 軸上にすべての点をプロットしていたが、 Jitter Plot は少しずらしてプロットする。(今回はランダムな距離で垂直方向にずらしていく)

Page 8: Data Analysis - Chapter two

Jitter Plot の 3 つのポイント

データの散布に影響を与えないように、垂直方向にずらすときはランダムに行うようにする。

"jitter" する場合は必ずデータ点を水平線方向には動かさないようにしよう

今回はデータ点に空洞の円を採用した。どの点を打つ場合でも円の半径は同じだ。これによって、データ点が重なった場合でもある程度見えやすくなる。

Page 9: Data Analysis - Chapter two

Histogram & KDE

Page 10: Data Analysis - Chapter two

Histogram

データを一定の範囲ごとに分けて「瓶詰め」にし、「瓶」に入ったデータの総数から「瓶」の高さを決定してグラフに表記する

本の説明はわかりにくいので、とりあえず例を元にヒストグラムを見てみる

Page 11: Data Analysis - Chapter two

Ex.2 サーバーのレスポンス時間

サーバーがデータベースアクセスのリクエストを受け取った後のレスポンス時間をログファイルに書き込んだものをヒストグラムに表示する。

このファイルに含まれるレスポンス時間のデータは膨大なもので、 1,000 ものデータが含まれている。

Page 12: Data Analysis - Chapter two

Histogram - Response Time

Page 13: Data Analysis - Chapter two

「瓶」についての注意点

どのくらいの横幅にすればよいか、決定的な法則はない

ただしガウス分布に関しては、 Scott’s rule を適応するのがよい

w = 3.5σ / n^(1/3) (σ: Standard Deviation, n: Number of points)

Page 14: Data Analysis - Chapter two

「瓶」ついてさらに ...

データを瓶に詰め込む際に、データの区切る範囲に気をつけないといけない場合がある

特にデータの数や範囲が小さい場合に注意する

Page 15: Data Analysis - Chapter two

Histogram の 3 つのポイント

標準化されたヒストグラムでは、ある瓶が全体のうちどのくらいの割合を占めているのかが視覚的にわかる (* 標準化 : ある瓶の総量を全瓶の総量で割ってから Histogram を表記する )

瓶内の数値のクラスターレベルに応じて瓶の幅を変えて表記すると、より細かなクラスターの情報を視覚的に見ることができる

一つのデータ集合を観察するのにはとてもよい。ただし、 2 つ以上のデータ集合を観察する際には不向きである

Page 16: Data Analysis - Chapter two

KDE (Kernel Density Estimates)KDE で標準化 ( ? ) した後にヒストグラムを作成することによって、データをより正確に観察できる

Page 17: Data Analysis - Chapter two

KDE 関数

Page 18: Data Analysis - Chapter two

KDE をデータ集合に合わせる

Gaussian Kernel を使用する際、データの幅や中央値に合わせて Kernel 関数を変更しないといけない

Page 19: Data Analysis - Chapter two

KDE についての注意点

Box, Epanechnikov Kernel は、範囲外のデータを引数にとると、すべて0の値をとってしまう

Gaussian Kernel は飛値を代入しても、必ず 0 以外の数値をとる。 ( ほぼ 0 に近い数値 )

Page 20: Data Analysis - Chapter two

Cumulative Distribution Function - CDF

Page 21: Data Analysis - Chapter two

CDF: Cumulative Distribution Function

cdf: 累積分布関数

ある x における cdf(x) は、それまでのデータをすべて加算したもの

Page 22: Data Analysis - Chapter two

先ほどのレスポンス時間をCDF で表示してみる

Page 23: Data Analysis - Chapter two

CDF の 5 つのポイント

CDF は必ず x に沿って広義単調増加する

CDF はヒストグラムや KDE ほど増減が激しくないが、表示しているデータはすべて同じものである

ヒストグラムのように「データの瓶」が含まれていない、データの情報が欠落している

x が 0 または -∞ に限りなく近づくと、 CDF は 0 になる

CDF はデータから一意に決まる

Page 24: Data Analysis - Chapter two

3 つの分布図を比較する

Page 25: Data Analysis - Chapter two

Rank-Order Plots: ROP

& Lift Charts: LC

Page 26: Data Analysis - Chapter two

Scenario - Mailing List

会社でメーリングリストを用いてマーケティングする際に、受信者の職業に合わせて文章を作成したい

全部で 16000 もの仕事が登録されているため、すべての職業向けに文章を作成するのは困難

さて、どうやって解決する??

Page 27: Data Analysis - Chapter two

データを昇順に

Page 28: Data Analysis - Chapter two

ROP & LC (1)

ROP: Rank-Order Plots ⇒ 先ほど昇順にした表のデータをグラフにしたもの

LC: Lift Charts ⇒ 累積分布。今回は加算によって累積計算を行ったので CDF と同じ

Page 29: Data Analysis - Chapter two

ROP & LC (2)

Page 30: Data Analysis - Chapter two

Workshop : Numpy

Page 31: Data Analysis - Chapter two

import numpy as np

vec1 = np.array( [ 0., 1., 2., 3., 4. ] )vec2 = np.arange( 0, 5, 1, dtype=float )vec3 = np.linspace( 0, 4, 5 )

vec4 = np.zeros( 5 )for i in range( 5 ):vec4[i] = ivec5 = np.loadtxt( "data" )

Numpy の基本 (1) - ベクトルの作成

Page 32: Data Analysis - Chapter two

v1 = vec1 + vec2

v2 = np.zeros( 5 )( 同じ方法だが真似しない方がいい )↓for i in range( 5 ):v2[i] = vec1[i] + vec2[i]vec1 += vec2

Numpy の基本 (2) - ベクトル演算

v3 = 2*vec3

v4 = vec4 + 3

v5 = np.sin(vec5)

lst = v5.tolist()

Page 33: Data Analysis - Chapter two

NumPy の特徴“ Broadcasting” & ”ufunc”

“BroadCasting”: より大きなデータ構造に合わせて (Broad) 、 一方のデータ構造を変更する (Casting)

“ufunc”: スカラー値は NumPy のオブジェクトに変換される

Page 34: Data Analysis - Chapter two

Numpy を用いた KDE の計算プログラム

from numpy import *# z: position, w: bandwidth, xv: vector of points

def kde( z, w, xv ): return sum( exp(-0.5*((z-xv)/w)**2)/sqrt(2*pi*w**2) )

d = loadtxt( "presidents", usecols=(2,) ) w = 2.5

for x in linspace( min(d)-w, max(d)+w, 1000 ) print x, kde( x, w, d )

Page 35: Data Analysis - Chapter two

Numpy の応用 - 行列

テキストのプログラムを参考に、 Numpy での行列の扱い方を確認していく

Page 36: Data Analysis - Chapter two

最後に ...

今回のまとめ:単一変数のデータは、 Jitter Plotと Histogram 、 CDF で表すことができる

Histogram を見やすくするために KDE 、 CDF を見やすくするために ROP と LC の技術を用いた

Option や Summary の部分は今回は省略した (統計学の授業で何度もやった内容なので、自分で読んでください)