🐼 정보
디카프리오 : 3등실 탑승, 남성, 19살, 형제 없고, 부모나 자녀 없음, 싼 가격으로 표 구매
윈슬렛 : 1등실 탑승, 여성, 17살, 운임은 비싸게 주었고, 부모와 함께 탑승하고, 약혼자 있음문제정의
- 타이타닉 탑승자 명단을 통해 생존자 분석 -> 타이타닉 주인공들 생존 확률 구해보기 !
- 6개 독립변수 : 'pclass', 'sex', 'age', 'sibsp','parch','fare'
- 1개 종속변수 : 'survived'
import pandas as pd
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import tensorflow as tf
import keras
from keras.models import Sequential
from keras.layers import Dense
from tensorflow.keras.optimizers import RMSprop
from sklearn import preprocessing
import warnings
warnings.filterwarnings('ignore')
from sklearn.model_selection import train_test_split
df = pd.read_excel('/content/titanic.xlsx',header=0, engine='openpyxl') # 엑셀파일 열기위한 코드
df.head()
explodes =(0.1, 0)
df['survived'].value_counts().plot.pie(autopct='%.2f%%', explode=(0.1,0))
plt.title("Survived")
plt.show()
sns.countplot(data=df, x='survived')
plt.title("Survived")
plt.show()
sns.barplot(x="pclass", y="survived", data=df);
sns.barplot(x="sex", y="survived", data=df);
dataset = df.loc[:, ['pclass', 'sex', 'age', 'sibsp','parch','fare','survived']]
dataset.isna().sum()
다음의 코드를 추가하면 age와 fare컬럼의 NaN값이 있는 행을 제거가능
dataset = dataset.dropna(subset=['age','fare'], how='any', axis=0)
data의 age컬럼을 보면 여자는 female, 남자는 male로 되어 있는데 이를 여자는 1, 남자는 0으로 라벨링 해준다. 다음의 코드를 추가한다
dataset['sex'] = df.apply(lambda x: 0 if x['sex'] == 'male'
else 1, axis = 1)
#dataset -> X,y 독립변수 종속변수 분리
X = dataset[['pclass', 'sex', 'age', 'sibsp','parch','fare']]
y = dataset['survived']
np.random.seed(777)
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.1,random_state=7)
정규화
mean = np.mean(X_train, axis=0) # 모든 row를 반영한 평균
std = np.std(X_train, axis=0)
X_train = (X_train - mean) / std
X_test = (X_test - mean) / std
# 모델 구성하기
model = Sequential()
model.add(Dense(255, input_shape=(6,), activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# 모델 설정하기
model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])
# 모델 학습하기
history = model.fit(X_train, y_train, epochs=300)
score = model.evaluate(X_test, y_test)
print('%s: %.2f%%' %(model.metrics_names[1], score[1] * 100))
💔디카프리오, 윈슬렛의 경우💔
dicaprio = np.array([3., 0., 19., 0., 0., 5.])
winslet =np.array([1., 1., 17., 1., 2., 100.])
dicaprio = (dicaprio - mean) / std
winslet = (winslet - mean) / std
dicaprio = np.array(dicaprio).reshape(1,6)
winslet = np.array(winslet).reshape(1,6)
d_predict = model.predict(dicaprio)
w_predict = model.predict(winslet)
print('디카프리오 생존 예측 : %.2f%%' %(d_predict * 100))
print('윈슬렛의 생존 예측 : %.2f%%' %(w_predict * 100))
디카프리오 생각보다높당
f, ax = plt.subplots(1,2, figsize=(12,6))
df['survived'].value_counts().plot.pie(explode=[0,0.1], autopct='%1.2f%%', ax=ax[0])
ax[0].set_title('Survived')
ax[0].set_ylabel('')
sns.countplot('survived', data=df, ax=ax[1])
ax[1].set_title('Survived')
plt.show()
f, ax = plt.subplots(1,2, figsize=(12,6))
sns.countplot('sex', data=df, ax=ax[0])
ax[0].set_title('Count of Passengers by Sex')
sns.countplot('sex', hue='survived', data=df, ax=ax[1])
ax[1].set_title('Sex:Survived vs Dead')
plt.show()
df['age_cat'] = pd.cut(df['age'], bins=[0,10,20,50,100], include_lowest=True, labels=['baby','teenage','adult','old'])
df[['age', 'age_cat']]
plt.figure(figsize=[12,4])
plt.subplot(131) # 한 줄에 세개 중 첫번째
sns.barplot('pclass','survived',data=df)
plt.subplot(132)
sns.barplot('age_cat','survived', data=df)
plt.subplot(133)
sns.barplot('sex','survived', data=df)
plt.subplots_adjust(top=1, bottom=0.1, left=0.10, right=1, hspace=0.5, wspace=0.5)
plt.show()