#sklearn_text_for_data_science
# sklearn
import numpy as np
import pandas as pd
# 欠損値を含む サンプルデータ・セットを作成
np.random.seed(0)
df = pd.DataFrame(np.random.randn(15).reshape(5,3))
df.loc[0,0] = np.nan
df.loc[1,1] = np.nan
df.loc[2,2] = np.nan
df
# 欠損値かどうかを調べる
df.isnull()
# 欠損値を含むindexを削除する
df_dropna = df.dropna()
df_dropna
# 欠損値を含むindexを meanで補完する
from sklearn.preprocessing import Imputer
# インスタンスを作成する
imp = Imputer(strategy='mean', axis=0)
#欠損値を分析して補完する
imp.fit(df)
imp.transform(df)
# カテゴリー変数をエンコーディングする
# サンプルDataFrame
dic = {0:[0, 1, 2, 3, 4],
1:['a', 'b', 'a', 'b', 'c']}
df = pd.DataFrame(dic)
df
# カテゴリー変数をラベルエンコーディングする
from sklearn.preprocessing import LabelEncoder
# LabelEncoderのインスタンスを作成する
le = LabelEncoder()
le.fit(df[1])
df[2] = le.transform(df[1]) # array([0, 1, 0, 1, 2])
df
# カテゴリー変数を One-Hot ラベルエンコーディングする
'''
pd.get_dummieと同じ機能。
pd.get_dummieのほうが使いやすいのでおすすめ
'''
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder
# サンプルDataFrame
dic = {'A':[0, 1, 2, 3, 4],
'B':['a', 'b', 'a', 'b', 'c']}
df = pd.DataFrame(dic)
# DataFrameをコピー
df_ohe = df.copy()
df_ohe
# まず labelEncoder のインスタンスを作成
le = LabelEncoder()
# エンコードしたものを df_ohe[3]として新規作成する
df_ohe['B'] = le.fit_transform(df_ohe['B']) # a b c を含む列 を解析・変換
le.classes_
# OneHotEncoder のインスタンスを作成する
ohe = OneHotEncoder(categorical_features=[1]) # 変換する列の番号をリストとして指定する
# OneHotエンコーディングする
ohe.fit_transform(df_ohe).toarray() # .toarray():scipy.sparse形式からnumpy配列に変換
# 正規化
# 分散正規化 StanderdScaler
"""
x' = (x - mean)/ stdev
"""
from sklearn.preprocessing import StandardScaler
# サンプルDataFrameを生成する
df_dict = {'A':[1,2,3,4,5],
'B':[100,200,300,400,500]}
df = pd.DataFrame(df_dict)
# スタンダードスケーラーのインスタンスを生成する
stdsc = StandardScaler()
# 解析して変換する
stdsc.fit(df)
stdsc.transform(df)
# 最小最大正規化 MinMaxScaler
"""
x' = (x - x_min) / (x_max - x\min)
"""
from sklearn.preprocessing import MinMaxScaler
# サンプルDataFrameを生成する
df_dict = {'A':[1,2,3,4,5],
'B':[100,200,300,400,500]}
df = pd.DataFrame(df_dict)
# スタンダードスケーラーのインスタンスを生成する
mmsc = MinMaxScaler()
# 解析して変換する
mmsc.fit(df)
mmsc.transform(df)