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

サイエンティストとマーケターのはざま

Pythonとか広告とかデータ分析とかとか


SciPyでデータの標準化

データの分布が正規分布でなかったり、説明変数の単位が異なったり、値のスケールが違ったりする場合にデータを標準化する必要があります。

標準化とは、個々のデータから元のデータの平均値を引き、元のデータの標準偏差で割ることで平均0、分散1となります。

 

一括でデータセットを標準化するにはScipyの関数が便利です。

$import scipy as sp

# データセットの読み込み
$score = np.loadtxt('score.txt', skiprows=1)
$X = score

$X

array([[ 2.,  3.,  4.,  3.,  3.,  4.,  3.,  2.,  3.,  2.],
       [ 5.,  4.,  3.,  3.,  3.,  2.,  4.,  3.,  4.,  5.],
       [ 3.,  3.,  3.,  4.,  3.,  4.,  3.,  4.,  4.,  3.],
       [ 5.,  5.,  3.,  3.,  3.,  3.,  4.,  4.,  4.,  5.],
...

#標準化

$X2 = sp.stats.zscore(X, axis=0)

 実際に標準化され、平均0、分散1となっているか確認します。それぞれmean()とvar()を使うと出せます。axis=0で列を計算、axis=1で行を計算します。

#平均

$ X2.mean(axis=0)

array([ -1.88737914e-16,   9.99200722e-17,   5.55111512e-17,
        -1.11022302e-17,  -7.77156117e-17,  -1.44328993e-16,
        -2.22044605e-16,  -1.11022302e-16,   1.77635684e-16,
         5.55111512e-17])

#分散

X2.var(axis=0)

array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])

 ...問題ないですね...

 

参考

主成分分析

はじパタ4章 with Python - Handwriting

Pythonで心理実験 - 例題14-4