Sklearnのプリ処理の部分をメモっておきます。
スクリプト
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
#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 0 1 2 0 NaN 0.400157 0.978738 1 2.240893 NaN -0.977278 2 0.950088 -0.151357 NaN 3 0.410599 0.144044 1.454274 4 0.761038 0.121675 0.443863 # 欠損値かどうかを調べる df.isnull() 0 1 2 0 True False False 1 False True False 2 False False True 3 False False False 4 False False False # 欠損値を含むindexを削除する df_dropna = df.dropna() df_dropna 0 1 2 3 0.410599 0.144044 1.454274 4 0.761038 0.121675 0.443863 # 欠損値を含むindexを meanで補完する from sklearn.preprocessing import Imputer # インスタンスを作成する imp = Imputer(strategy='mean', axis=0) #欠損値を分析して補完する imp.fit(df) imp.transform(df) array([[ 1.09065446, 0.40015721, 0.97873798], [ 2.2408932 , 0.12862965, -0.97727788], [ 0.95008842, -0.15135721, 0.47489921], [ 0.4105985 , 0.14404357, 1.45427351], [ 0.76103773, 0.12167502, 0.44386323]]) # カテゴリー変数をエンコーディングする # サンプルDataFrame dic = {0:[0, 1, 2, 3, 4], 1:['a', 'b', 'a', 'b', 'c']} df = pd.DataFrame(dic) df 0 1 0 0 a 1 1 b 2 2 a 3 3 b 4 4 c # カテゴリー変数をラベルエンコーディングする 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 0 1 2 0 0 a 0 1 1 b 1 2 2 a 0 3 3 b 1 4 4 c 2 # カテゴリー変数を 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 A B 0 0 a 1 1 b 2 2 a 3 3 b 4 4 c # まず 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配列に変換 array([[1., 0., 0., 0.], [0., 1., 0., 1.], [1., 0., 0., 2.], [0., 1., 0., 3.], [0., 0., 1., 4.]]) # 正規化 # 分散正規化 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) array([[-1.41421356, -1.41421356], [-0.70710678, -0.70710678], [ 0. , 0. ], [ 0.70710678, 0.70710678], [ 1.41421356, 1.41421356]]) # 最小最大正規化 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) array([[0. , 0. ], [0.25, 0.25], [0.5 , 0.5 ], [0.75, 0.75], [1. , 1. ]]) |
The following two tabs change content below.
Keita N
最新記事 by Keita N (全て見る)
- 2024/1/13 ビットコインETFの取引開始:新たな時代の幕開け - 2024年1月13日
- 2024/1/5 日本ビジネスにおける変革の必要性とその方向性 - 2024年1月6日
- 2024/1/3 アメリカ債権ETFの見通しと最新動向 - 2024年1月3日