[타이타닉 생존자 분류] - 1

타이타닉 데이터를 가지고 데이터 분석을 진행해보려고 한다.

타이타닉 데이터는 데이터 분석이나 머신러닝, 캐글에 대해 알고 있다면 여러 번 들어봤을 법한 입문자용 데이터셋이다.

이 데이터를 가지고 공부한다면 데이터 분석의 전반적인 지식을 쌓는데 많은 도움이 될 것이라고 생각한다.

탐색 : 타이타닉 데이터 살펴보기

  1. pclass : Passenger Class, 승객 등급
  2. survived : 생존 여부(생존은 1, 아닌 경우는 0)
  3. name : 승객 이름
  4. sex : 승객 성별
  5. age : 승객 나이
  6. sibsp : 동승한 형제 또는 배우자 수
  7. parch : 동승한 부모 또는 자녀 수
  8. ticket : 티켓 번호
  9. fare : 승객 지불 요금
  10. cabin : 선실 이름
  11. embarked : 승선항 (C = 쉘 부르크, Q = 퀸즈타운, S = 사우스햄튼)
  12. body : 사망자 확인 번호
  13. home.dest : 고향 / 목적지

데이터셋 불러오기

%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')

df_train = pd.read_csv('data/titanic_train.csv')
df_test = pd.read_csv('data/titanic_test.csv')
df_train.head()

데이터에 대한 정보를 살펴보자.

print(df_train.info())
print('---------------------------------')
print(df_test.info())

데이터를 살펴보면 cabin, age에 대해 Null 값이 많이 나타났다. Null 값이 존재하면 모델 학습에 문제가 생기기 때문에 결측치를 대체해야 한다.

불필요한 피처 제거

# 데이터셋에서 name, ticket, body, cabin, home.dest 피처 제거

df_train = df_train.drop(['name', 'ticket', 'body', 'cabin', 'home.dest'], axis = 1)
df_test = df_test.drop(['name', 'ticket', 'body', 'cabin', 'home.dest'], axis = 1)

EDA(탐색적 자료 분석)

print(df_train['survived'].value_counts())
df_train['survived'].value_counts().plot.bar()

생존 여부인 survived를 분포를 나타낸다.

생존 여부를 그룹으로 하여 pclass 피처의 그룹별 분포를 그래프로 출력해보자.

print(df_train['pclass'].value_counts())
ax = sns.countplot(x = 'pclass', hue = 'survived', data = df_train)

데이터를 살펴보면 등급이 높을수록 많은 사람이 생존한 것을 알 수 있다.

 

print(df_train['embarked'].value_counts())
ax = sns.countplot(x = 'embarked', hue = 'survived', data = df_train)

탑승객 중 많은 사람이 Southampton에서 탑승하였고, 약 60%가 사망한 것을 알 수 있다.

 

변수 탐색작업 자동화

  • age, sibsp와 같은 수치형 피처들에 대한 탐색 진행
  • 피처들을 탐색할 수 있는 자동화 함수 valid_features()을 진행
  1. 두 그룹 간의 분포를 비교하는 그래프 출력
  2. 두 그룹 각각의 표준편차 출력
  3. 두 그룹 간의 T-test 검정을 실시
  4. 두 그룹 각각의 Shapiro-wilk 검정 실시
  • Shapiro-wilk 검정 : 주어진 데이터가 얼마나 정규성을 따르는지, 즉 얼마나 정규분포에 가까운지를 측정하는 검정
from scipy import stats

# 두 집단의 피처를 비교해주며 탐색작업을 자동화하는 함수 정의
def valid_features(df, col_name, distribution_check = True):

    # 두 집단 (survived = 1, survived = 0)의 분포 그래프 출력
    g = sns.FacetGrid(df, col = 'survived')
    g.map(plt.hist, col_name, bins = 30)

    # 두 집단 (survived = 1, survived = 0)의 표준편차를 출력
    titanic_survived = df[df['survived'] == 1]
    titanic_survived_static = np.array(titanic_survived[col_name])
    print('data std is', '%.2f' % np.std(titanic_survived_static))
    titanic_n_survived = df[df['survived'] == 0]
    titanic_n_survived_static = np.array(titanic_n_survived[col_name])
    print('data std is', '%.2f' % np.std(titanic_n_survived_static))

    # T-test로 두 집단의 평균 차이 검정
    tTestResult = stats.ttest_ind(titanic_survived[col_name], titanic_n_survived[col_name], equal_var = False)
    tTestResultDiffVar = stats.ttest_ind(titanic_survived[col_name], titanic_n_survived[col_name], equal_var = False)
    print('The t-statistic and p-value aauming equal variances is %.3f and %.3f.' % tTestResult)
    print('The t-statistic and p-value not assuming equal variances is %.3f and %.3f' % tTestResultDiffVar)

    if distribution_check:
        #Shapiro-Wilf 검정 : 분포의 정규성 정도 검증
        print('The w-statistic and p-value in Survived %.3f and %.3f' % stats.shapiro(titanic_survived[col_name]))
        print('The w-statistic and p-value in Non-Survived %.3f and %.3f' % stats.shapiro(titanic_n_survived[col_name]))
# valid_features 함수 실행, age 피처와 sibsp 피처 탐색

valid_features(df_train[df_train['age'] > 0], 'age', distribution_check=True)
valid_features(df_train, 'sibsp', distribution_check=False)

분석 결과, age 피처는 두 그룹 간의 평균 차이가 없기 때문에 생존자 분류에 미치는 영향력이 낮을 것이라고 가정할 수 있다. 반면 sibsp 피처에서는 두 그룹 간의 평균 차이가 어느 정도 존재한다는 것을 알 수 있다.

 

 

parch, fare, sex 피처에 대해 생존자 / 비 생존자 간의 차이 탐색


지금까지 탐색한 피처의 내용은 다음과 같다.

탐색 대상 피처 두 그룹 간의 분포 혹은 평균의 차이가 있는가?
pclass O
age X
sibsp, parch
fare O
sex O
embarked


여기까지 pclass, embarked, sex, age 피처를 통한 EDA를 진행해보았다. 다음으로 로지스틱 회귀 모델을 이용해 생존자 분류 모델을 만들어 볼 것이다.

 

 

 

 

 

- 출처 : 이것이 데이터 분석이다 with 파이썬

'Kaggle' 카테고리의 다른 글

[샌프란시스코 범죄 분류] - 1  (0) 2021.10.05
[진짜 재난 뉴스 판별기] - 2  (0) 2021.10.04
[진짜 재난 뉴스 판별기] - 1  (0) 2021.10.01
[자전거 수요 예측] - 1  (0) 2021.09.10
[타이타닉 생존자 분류] - 2  (0) 2021.09.09
TAGS.

Comments