Taitanicやってみた

###はじめに###
こんにちは。今回はtaitanicやっていこうと思います。初心者であり文字列データの処理を飛ばしてしまいますが、ご了承ください。モデルとしてはニューラルネットワークを使用しています。工夫点は欠損値をKNNImputerで埋めてみたことくらいです。

##taitanic提出手順##
1.ライブラリ、データ読み込み
2.データの前処理
3.モデルの構築
4.予測の出力・提出


###実行環境###
google colaboratory

###1.ライブラリ、データ読み込み###
それでは早速、ライブラリとデータを読み込むところからやっていきます。

```
# Google Colaboratoryで作業する場合はこちらも実行してください。
from google.colab import drive
drive.mount('/content/drive')
```

```
#各種インポート
import numpy as np
import pandas as pd
import seaborn as sns
%matplotlib inline
from matplotlib import pyplot as plt
```

ファイルを読み込みます

```
#テストファイルの読み込み
test_df = pd.read_csv("../input/titanic/test.csv")
#トレーニングデータの読み込み:訓練データ
train_df = pd.read_csv("../input/titanic/train.csv")
#生存or死亡についてのデータ
test_output_df = pd.read_csv("../input/titanic/gender_submission.csv")
```

###2.データの前処理###
まず、はじめの10データを見てみます。

```
df.head(10)
```
欠損値があるか確かめます。

```
df.isnull().sum() 
```
トレーニングデータについても同様に確かめます

```
df_test.isnull().sum()
```

欠損値があるage以外の特徴量は削除しました。

```
df.drop('Cabin', axis=1, inplace=True)
df_test.drop('Cabin', axis=1, inplace=True)

#df.drop('Age', axis=1, inplace=True)
#df_test.drop('Age', axis=1, inplace=True)

df.drop('Fare', axis=1, inplace=True)
df_test.drop('Fare', axis=1, inplace=True)

df.drop('PassengerId', axis=1, inplace=True)
df_test.drop('PassengerId', axis=1, inplace=True)

#df.drop('Pclass', axis=1, inplace=True)
#df_test.drop('Pclass', axis=1, inplace=True)

df.drop('Name', axis=1, inplace=True)
df_test.drop('Name', axis=1, inplace=True)

df.drop('Ticket', axis=1, inplace=True)
df_test.drop('Ticket', axis=1, inplace=True)

df.drop('Embarked', axis=1, inplace=True)
df_test.drop('Embarked', axis=1, inplace=True)

df.isnull().sum() 
```
カテゴリー変数を数値に置き換え、欠損値AgeをKNNImputerでうめてあげます。

```
df.replace({'Sex': {'male': 0, 'female': 1}}, inplace=True)
df_test.replace({'Sex': {'male': 0, 'female': 1}}, inplace=True)
from sklearn.impute import KNNImputer
imputer = KNNImputer(n_neighbors=5)
df = pd.DataFrame(imputer.fit_transform(df))
df_test = pd.DataFrame(imputer.fit_transform(df_test))
```
XにtrainのSurvive以外、ｙにtrainのSurveveを入れます。
X_testは、そのままです。.shapeにて形を確認しておきます。

```
X = df.iloc[:, 1:].values
y = df.iloc[:, 0].values

X_test = df_test.iloc[:, 0:].values
print(X_test.shape)
print(X.shape)
print(y.shape)
```
ホールドアウト方にて、データを分割します。

```
X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.3, random_state=42)
```
隠れ層を100,100,10としたニューラルネットワークをモデルとし、予測します。

```
mlpc = MLPClassifier(hidden_layer_sizes=(100, 100, 10), random_state=0)
mlpc.fit(X_train, y_train)

print('Multilayer Perceptron \n')
print('Train Score: {}'.format(round(mlpc.score(X_train, y_train), 3)))
print(' Test Score: {}'.format(round(mlpc.score(X_valid, y_valid), 3)))
```
.predictメソッドにて予測値をpredに代入します。

```
pred = mlpc.predict(X_test)
print(pred.shape)
```
submissionの'Survived'列を予測値で置き換えます。

```
submission['Survived'] = pred
submission
```

```
# JupyterLabなどローカルで作業する場合
# パスは必要に応じて変更の必要あり
submission.to_csv('../gender_submission.csv', index=False)
```
ダウンロードして完了です。

```
# Google Drive・Google Colaboratoryで作業する場合
submission.to_csv('gender_submission.csv',index=False)
from google.colab import files
files.download('gender_submission.csv')
```

####最後に####
本当は、DataWizを用いた欠損値補完をやろうと思いましたができませんでした。もしよければお願いします。