LoginSignup
0
1

基本統計量、標準化、正規化、ヒストグラム、箱ひげ図(california housingデータセット)

Posted at

はじめに

california housingデータセットを例に用いて、基本統計量の算出、標準化正規化の適用、ヒストグラム箱ひげ図の描画を実装していきます。

実装

インポート

各ライブラリをインポートします。データセットはsklearn.datasetsから読み込みます。

import pandas as pd
import numpy as np
from sklearn.datasets import fetch_california_housing
from sklearn import preprocessing
import matplotlib.pyplot as plt

データセットの読み込み

fetch_california_housing()でインスタンスを生成。

  • .data:データの中身(ndarray)。as_frame=Trueを指定するとpandas DataFrameが返される。
  • .target:住宅価格('MedHouseVal')(ndarray)。as_frame=Trueを指定するとpandas Seriesが返される。
  • .feature_names:データのラベル(リスト)。
housing = fetch_california_housing()
housing_as_df = fetch_california_housing(as_frame=True)

data_arr = housing.data
data_df = housing_as_df.data
target = housing.target
features = housing.feature_names

標準化、正規化

  • StandardScaler:標準化(平均0, 分散1)
  • RobustScaler:外れ値に頑健な標準化
  • MinMaxScaler:正規化(最大1, 最小0)

StandardScalerによる標準化

sscaler = preprocessing.StandardScaler() # インスタンスの作成
sscaler.fit(data_arr)

ss_arr = sscaler.transform(data_arr) # 変換
ss_df = pd.DataFrame(ss_arr, columns=features) # pandas DataFrame

RobustScalerによる標準化

rscaler = preprocessing.RobustScaler(quantile_range=(25., 75.))
rscaler.fit(data_arr)

rs_arr = rscaler.transform(data_arr) # 変換
rs_df = pd.DataFrame(rs_arr, columns=features) # pandas DataFrame

MinMaxScalerによる正規化

mmscaler = preprocessing.MinMaxScaler() # インスタンスの作成
mmscaler.fit(data_arr)

mm_arr = mmscaler.transform(data_arr) # 変換
mm_df = pd.DataFrame(mm_arr, columns=features) # pandas DataFrame

基本統計量

変換前

data_df.describe()

image.png

StandardScalerによる標準化

ss_df.describe()

image.png

RobustScalerによる標準化

rs_df.describe()

image.png

MinMaxScalerによる正規化

mm_df.describe()

image.png

ヒストグラムの描画

変換前

fig = plt.figure(figsize=(10, 5))
plt.suptitle('raw')

for i in range(len(features)):
  ax = fig.add_subplot(2, 4, i+1)

  ax.hist(
      x=data_df[features[i]],
      bins=10,
      color='white',
      edgecolor='black'
  )
  ax.set_title(features[i])

plt.tight_layout()
plt.show()

image.png

StandardScalerによる標準化

コードを見る
fig = plt.figure(figsize=(10, 5))
plt.suptitle('StandardScaler')

for i in range(len(features)):
  ax = fig.add_subplot(2, 4, i+1)

  ax.hist(
      x=ss_df[features[i]],
      bins=10,
      color='white',
      edgecolor='black'
  )
  ax.set_title(features[i])

plt.tight_layout()
plt.show()

image.png

RobustScalerによる標準化

rs_df.describe()
コードを見る
fig = plt.figure(figsize=(10, 5))
plt.suptitle('RobustScaler')

for i in range(len(features)):
  ax = fig.add_subplot(2, 4, i+1)

  ax.hist(
      x=rs_df[features[i]],
      bins=10,
      color='white',
      edgecolor='black'
  )
  ax.set_title(features[i])

plt.tight_layout()
plt.show()

image.png

MinMaxScalerによる正規化

コードを見る
fig = plt.figure(figsize=(10, 5))
plt.suptitle('MinMaxScaler')

for i in range(len(features)):
  ax = fig.add_subplot(2, 4, i+1)

  ax.hist(
      x=mm_df[features[i]],
      bins=10,
      color='white',
      edgecolor='black'
  )
  ax.set_title(features[i])

plt.tight_layout()
plt.show()

image.png

箱ひげ図の描画

変換前

fig = plt.figure(figsize=(8, 5))
plt.suptitle('raw')

for i in range(len(features)):
  ax = fig.add_subplot(2, 4, i+1)

  ax.boxplot(
      x=data_arr[:,i],
      labels=[features[i]],
      widths=0.4
  )
  ax.set_title(features[i])

plt.tight_layout()
plt.show()

image.png

StandardScalerによる標準化

コードを見る
fig = plt.figure(figsize=(8, 5))
plt.suptitle('StandardScaler')

for i in range(len(features)):
  ax = fig.add_subplot(2, 4, i+1)

  ax.boxplot(
      x=ss_arr[:,i],
      labels=[features[i]],
      widths=0.4
  )
  ax.set_title(features[i])

plt.tight_layout()
plt.show()

image.png

RobustScalerによる標準化

rs_df.describe()
コードを見る
fig = plt.figure(figsize=(8, 5))
plt.suptitle('RobustScaler')

for i in range(len(features)):
  ax = fig.add_subplot(2, 4, i+1)

  ax.boxplot(
      x=rs_arr[:,i],
      labels=[features[i]],
      widths=0.4
  )
  ax.set_title(features[i])

plt.tight_layout()
plt.show()

image.png

MinMaxScalerによる正規化

コードを見る
fig = plt.figure(figsize=(8, 5))
plt.suptitle('MinMaxScaler')

for i in range(len(features)):
  ax = fig.add_subplot(2, 4, i+1)

  ax.boxplot(
      x=mm_arr[:,i],
      labels=[features[i]],
      widths=0.4
  )
  ax.set_title(features[i])

plt.tight_layout()
plt.show()

image.png

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1