타이타닉 데이터는 1912년 4월 15일에 침몰한 타이타닉호의 승객 정보를 담고 있는 데이터셋입니다.
타이타닉 데이터셋에는 승객들의 성별, 나이, 티켓 등급, 승선 항구, 가족 구성원 수, 요금 등 다양한 정보가 포함되어 있습니다. 또한, 승객들이 생존했는지 혹은 사망했는지를 나타내는 정보도 함께 제공됩니다.
타이타닉 데이터셋에는 다음과 같은 변수들이 포함되어 있습니다:
PassengerId: 승객의 고유 식별번호
Survived: 생존 여부 (0: 사망, 1: 생존)
Pclass: 티켓 등급 (1: 1st class, 2: 2nd class, 3: 3rd class)
Name: 승객의 이름
Sex: 성별 (male: 남성, female: 여성)
Age: 나이
SibSp: 함께 탑승한 형제자매 또는 배우자의 수
Parch: 함께 탑승한 부모나 자녀의 수
Ticket: 티켓 번호
Fare: 운임 요금
Cabin: 객실 번호
Embarked: 승선 항구 (C: Cherbourg, Q: Queenstown, S: Southampton)
import pandas as pd
titanic = pd.read_excel('titanic.xls')
titanic.head()
pd.crosstab(titanic['title'], titanic['sex'])
titanic['title'].unique()
array(['Miss', 'Master', 'Mr', 'Mrs', 'Col', 'Mme', 'Dr', 'Major', 'Capt',
'Lady', 'Sir', 'Mlle', 'Dona', 'Jonkheer', 'the Countess', 'Don',
'Rev', 'Ms'], dtype=object)
titanic['title'] = titanic['title'].replace('Mlle','Miss')
titanic['title'] = titanic['title'].replace('Ms','Miss')
titanic['title'] = titanic['title'].replace('Mme','Mrs')
rare_f = ['Dona', 'Lady', 'the Countess']
rare_m = ['Capt', 'Col', 'Don', 'Major', 'Rev', 'Sir', 'Dr', 'Master', 'Jonkheer']
for each in rare_f:
titanic['title'] = titanic['title'].replace(each,'Rare_f')
for each in rare_m:
titanic['title'] = titanic['title'].replace(each,'Rare_m')
titanic['title'].unique()
array(['Miss', 'Rare_m', 'Mr', 'Mrs', 'Rare_f'], dtype=object)
titanic[['title','survived']].groupby(['title'],as_index=False).mean()
titanic.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1309 entries, 0 to 1308
Data columns (total 16 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 pclass 1309 non-null int64
1 survived 1309 non-null int64
2 name 1309 non-null object
3 sex 1309 non-null object
4 age 1046 non-null float64
5 sibsp 1309 non-null int64
6 parch 1309 non-null int64
7 ticket 1309 non-null object
8 fare 1308 non-null float64
9 cabin 295 non-null object
10 embarked 1307 non-null object
11 boat 486 non-null object
12 body 121 non-null float64
13 home.dest 745 non-null object
14 age_cut 1046 non-null category
15 title 1309 non-null object
dtypes: category(1), float64(3), int64(4), object(8)
memory usage: 155.0+ KB
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
le.fit((titanic['sex'])) #문자를 숫자로 바꿔줌
titanic['gender'] = le.transform(titanic['sex'])
titanic.head()
# 결측치 확인
print(titanic.isnull().sum())
# 결측치는 제외해줌
titanic = titanic[titanic['age'].notnull()]
titanic = titanic[titanic['fare'].notnull()]
pclass 0
survived 0
name 0
sex 0
age 0
sibsp 0
parch 0
ticket 0
fare 0
cabin 773
embarked 2
boat 628
body 926
home.dest 360
age_cut 0
title 0
gender 0
dtype: int64
correlarion_matrix = titanic.corr().round(1)
sns.heatmap(data = correlarion_matrix ,annot=True, cmap='bwr');
from sklearn.model_selection import train_test_split
X = titanic[['pclass', 'age', 'sibsp', 'parch', 'fare', 'gender']]
y = titanic['survived']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.7, random_state=13)
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
dt = DecisionTreeClassifier(max_depth=4, random_state=13)
dt.fit(X_train,y_train)
pred = dt.predict(X_test)
print(accuracy_score(y_test,pred))
0.7896174863387978
import numpy as np
# titanic[['pclass', 'age', 'sibsp', 'parch', 'fare', 'gender']]
dicarprio = np.array([[3, 18, 0, 0, 5, 1 ]])
print( 'Dicarprio survived(%): ', dt.predict_proba(dicarprio)[0,1])
winslet = np.array([[1, 16, 1, 1, 100, 0 ]])
print( 'Winslet survived(%): ', dt.predict_proba(winslet)[0,1])
Dicarprio survived(%): 0.2236842105263158
Winslet survived(%): 1.0