名前から取得できるタイトルを分析に利用してみる。
タイトルは末尾に”.”がついているのでこれを利用して切り出す。
def get_title(name):
if '.' in name:
return name.split(',')[1].split('.')[0].strip()
else:
return 'Unknown'
d_train = pd.read_csv('train.csv')
d_train['title'] = d_train['Name'].apply(get_title)
これを実行してからタイトルの値を取得する。
pd.value_counts(d_train['title'])
Mr 517
Miss 182
Mrs 125
Master 40
Dr 7
Rev 6
Major 2
Col 2
Mlle 2
Ms 1
the Countess 1
Capt 1
Jonkheer 1
Lady 1
Sir 1
Don 1
Mme 1
Dr以下は件数が少ないのでMr, Miss,Mrs, Masterのいづれかに寄せるかブランクにする。
</pre>
def get_title(name):
if '.' in name:
return name.split(',')[1].split('.')[0].strip()
else:
return 'Unknown'
def cvt_title(title):
if title in ['Rev', 'the Countess', 'Johnkheer']:
return ''
elif title in ['Dr', 'Col', 'Major', 'Capt', 'Sir', 'Don']:
return 'Mr'
elif title in ['Mlle','Ms', 'Lady']:
return 'Miss'
elif title in ['Mme']:
return 'Mrs'
else:
return title
d_train = pd.read_csv('train.csv')
d_train['title'] = d_train['Name'].apply(get_title)
<pre>
この結果以下のようにまとまった。
Mr 531
Miss 186
Mrs 126
Master 40
8
これを利用して再度分析する。
import numpy as nm
import pandas as pd
import seaborn as sns
d_train = pd.read_csv('train.csv')
d_test = pd.read_csv('test.csv')
d_train['title'] = d_train['Name'].apply(get_title).apply(cvt_title)
d_test['title'] = d_test['Name'].apply(get_title).apply(cvt_title)
d_train = d_train.drop(['PassengerId','Name','Ticket','Cabin'], axis=1)
d_test = d_test.drop(['Name','Ticket','Cabin'], axis=1)
d_train["Embarked"] = d_train["Embarked"].fillna("S")
d_test["Fare"] = d_test["Fare"].fillna(35.6271884892086)
d_train["Age"] = d_train["Age"].fillna(29.69911764705882)
d_test["Age"] = d_test["Age"].fillna(30.272590361445783)
from sklearn.preprocessing import LabelEncoder
LE=LabelEncoder()
labels = ['Embarked','Sex', 'title']
for label in labels:
d_train[label]=LE.fit_transform(d_train[label])
d_test[label]=LE.fit_transform(d_test[label])
y_train = d_train["Survived"].values
x_train = d_train[["Pclass", "Sex", "Age", "Fare", "Parch", "Embarked", "SibSp", "title"]].values
x_test = d_test[["Pclass", "Sex", "Age", "Fare", "Parch", "Embarked", "SibSp", "title"]].values
from sklearn.tree import DecisionTreeClassifier dtree = DecisionTreeClassifier(maxdepth=8) dtree.fit(x_train,y_train) predictions = dtree.predict(x_test) kaggle_submission = pd.DataFrame({ "PassengerId": d_test["PassengerId"], "Survived": predictions }) kaggle_submission.to_csv("kaggle_submission_dt03.csv", index=False)
