今日はデータサイエンスチックな標準化。とはいうもののこれまでは単に比較しやすかったので処理してた。
エクセルではSTANDARDIZE関数でやるけど、pythonだとどうなるのか調べてみた。
標準化とは?
単位とか平均値の違うデータ同士を比べやすくするための処理。
値から平均を引いて標準偏差で割ると算出できます。例えば
A : 60000
平均 = 48000
標準偏差 = 8000
B : 80000
平均 = 67000
標準偏差 = 9500
みたいなとき、パッとどっちが相対的に順位高いのかわからないとき
Aの標準化 = (60000 ー 48000) / 8000 = 1.5
Bの標準化 = (80000 ー 67000) / 9000 = 1.4
とすると比較しやすいよねってやつです。
有名なのは、偏差値ですね。
偏差値は、元の点数を標準化して、点数(=Z値)を10倍して50足したものです。
標準化
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
df_sc = sc.fit_transform(df)
一瞬のできごとでした。
StandardScalerの引数はcopy、with_mean、with_std、全部TrueでOK。
もうちょっと何かするときにFalseにするみたいだけど今はいいや。誰か教えてください!
なんか悔しいので、自分でコード書いたらどうなるか頑張ってみた。
標準化を自力で
import math
def standardize(X):
mean = sum(X) / len(X)
var = sum([(mean - XX) ** 2 for XX in X ]) / len(X)
std = math.sqrt(var)
z = [XX / std for XX in [XX - mean for XX in X]]
return [mean, var, std, z]
mean, var, std, z = standardize(X)
一応これでできた、でもこれだと複数列を一気に標準化できないのかな。
素直にStandardScalerを使えばいいか。
まとめ
標準化って分析ではよく使うので、少しデータサイエンスっぽいことになって面白かった。
sklearnは機械学習に欠かせないライブラリなんですね。それも知れたのでよし。