Python 実践 データ加工/可視化 100本ノック に挑戦 ノック83

ノック83 : データを機械学習に適した形式へ変換しよう

 

機械学習に適したデータに変換して行きます。

import seaborn as sns
from sklearn.model_selection import train_test_split

dataset = sns.load_dataset('titanic')
label = dataset.pop('survived')

train_ds,test_ds,train_label,test_label=train_test_split(
    dataset,label,random_state=2021,stratify=label)

print(dataset.head())

 

実行結果

  pclass     sex   age  sibsp  parch     fare embarked  class    who  adult_male deck  embark_town alive  alone
0       3    male  22.0      1      0   7.2500        S  Third    man        True  NaN  Southampton    no  False
1       1  female  38.0      1      0  71.2833        C  First  woman       False    C    Cherbourg   yes  False
2       3  female  26.0      0      0   7.9250        S  Third  woman       False  NaN  Southampton   yes   True
3       1  female  35.0      1      0  53.1000        S  First  woman       False    C  Southampton   yes  False
4       3    male  35.0      0      0   8.0500        S  Third    man        True  NaN  Southampton    no   True

 

embarkedは出港した港の情報、embark_townは出港した港の名前なので、同じ情報となります。必要ないデータなので削除します。

また、aliveは生き残ったかどうかを表すsurvivedのチート情報になるため、削除します。

train_ds.drop(columns=['embark_town','alive'],inplace=True)
print(train_ds.head())

 

実行結果

     pclass     sex   age  sibsp  parch     fare embarked   class    who  adult_male deck  alone
293       3  female  24.0      0      0   8.8500        S   Third  woman       False  NaN   True
201       3    male   NaN      8      2  69.5500        S   Third    man        True  NaN  False
322       2  female  30.0      0      0  12.3500        Q  Second  woman       False  NaN   True
266       3    male  16.0      4      1  39.6875        S   Third    man        True  NaN  False
540       1  female  36.0      0      2  71.0000        S   First  woman       False    B  False

 

機械学習では文字列をそのまま扱いにくいので、one_hot_encodedを使用してさらに個別に分解し、 1,0に置き換えます。

import pandas as pd
one_hot_encoded = pd.get_dummies(train_ds)
print(one_hot_encoded.head())

 

実行結果

 pclass   age  sibsp  parch     fare  adult_male  alone  sex_female  sex_male  embarked_C  ...  
293       3  24.0      0      0   8.8500       False   True           1         0           0  ...          
201       3   NaN      8      2  69.5500        True  False           0         1           0  ...       
322       2  30.0      0      0  12.3500       False   True           1         0           0  ...         
266       3  16.0      4      1  39.6875        True  False           0         1           0  ...        
540       1  36.0      0      2  71.0000       False  False           1         0           0  ...        

[5 rows x 25 columns]

 

pclassは船の客席のランクを表しています。1は1等席で裕福さを表す指標となります。子の変数もget_dummiesでさらに分解します。

one_hot_encoded = pd.get_dummies(one_hot_encoded,columns=['pclass'])
print(one_hot_encoded.head())

 

実行結果

    age  sibsp  parch     fare  adult_male  alone  sex_female  sex_male  embarked_C  embarked_Q  ...  deck_A  deck_B  deck_C  deck_D  deck_E  deck_F  deck_G  pclass_1  pclass_2  pclass_3
293  24.0      0      0   8.8500       False   True           1         0           0           0  ...       0       0       0       0       0       0       0         0         0         1
201   NaN      8      2  69.5500        True  False           0         1           0           0  ...       0       0       0       0       0       0       0         0         0         1
322  30.0      0      0  12.3500       False   True           1         0           0           1  ...       0       0       0       0       0       0       0         0         1         0
266  16.0      4      1  39.6875        True  False           0         1           0           0  ...       0       0       0       0       0       0       0         0         0         1
540  36.0      0      2  71.0000       False  False           1         0           0           0  ...       0       1       0       0       0       0       0         1         0         0

[5 rows x 27 columns]

 

pclassが細分化されてカラム数が27になっています。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/* -----codeの行番号----- */