본문 바로가기

❤26기/26기 세미나

[26기 세미나] 타이타닉 생존자 분석하기(1)

 

숙명여자대학교 컴퓨터과학과 19학번 박단영

 


 

안녕하세요 <타이타닉 생존자 분석하기> 첫번째 강의를 맡은 박단영 입니다.

이번 세미나에서는 데이터 분석 입문으로 유명한 타이타닉 생존자 분석을 구글 코랩으로 실습해 보려고 합니다.

 

 

다음과 같은 순서로 진행되며, 저는 문제 정의와 데이터 분석 및 시각화를 설명드리겠습니다. 

 

01. 문제 정의

타이타닉 침몰 사건을 알고 계시나요?

1912년 4월15일, 호화 여객선 '타이타닉호의 참극'이 일어났습니다. 타이타닉호는 빙산과 충돌한 후 두 동강 나면서 해저 3821m 아래로 가라앉았고, 이는 승선 인원 총 2228명 가운데 711명만이 살아남은 최악의 대형 참사였습니다. 당시 '타이타닉호'는 그당시 최신 기술의 집약체였는데 오히려 그런 자만감으로 안전 장치들을 제대로 점검하지 않아서 일어났다고 합니다.

타이타닉 침몰 이유를 더 자세히 알고 싶으시면 이 기사를 참고해주세요.

 

'타이타닉 호 침몰'의 진짜 이유는? - 머니투데이

1912년 4월15일 새벽 2시18분, 호화 여객선 '타이타닉호의 참극'이 터졌다. '타이타닉호'는 4월10일 영국 사우샘프턴항에서 뉴욕항으로 처녀출항에 나섰다. '타이타닉호'는...

news.mt.co.kr

 

타이타닉 침몰 사건에서 어떤 유형의 생존자가 더 많이 살아남았는지 데이터를 분석해보면서 알아보려고 합니다.

 

Kaggle

더보기

타이타닉 생존자 자료를 얻기 위해 kaggle 이라는 사이트로 가봅시다.

캐글은 데이터 분석과 머신러닝을 공부하기 좋은 사이트로 공적인 데이터들을 얻을 수 있고 데이터 분석 대회에 나가 전세계인과 겨뤄볼 수 있습니다.

이제 타이타닉 생존자 데이터를 다운 받아봅시다!

아래 캐글 사이트에서 text.csv와 train.csv를 다운받습니다.

  • train.csv - 예측 모델을 만들기 위해 사용하는 학습셋입니다. 각 탑승객의 신상 정보와 ground truth(생존유무)가 주어지며, 생존 유무를 예측하는 모델을 만듭니다.
  • test.csv - 학습셋으로 만든 모델을 가지고 예측할 탑승객 정보가 담긴 테스트셋입니다.

https://www.kaggle.com/c/titanic/data

 

Titanic - Machine Learning from Disaster | Kaggle

 

www.kaggle.com

 

02-1. 데이터 분석 

이제 데이터 자료도 다운받았으니 데이터 분석을 시작해봅시다. 구글 코랩을 실행 주세요!(구글에 구글 코랩 검색하여 실행)

 

구글 코랩

CoLab은 주피터 노트북 환경과 Google Drive를 합친 것과 같습니다.

주피터 노트북만큼이나 편하게 소스코드를 작성할 뿐만 아니라 Google Drive에 문서를 저장하고, 이를 다시 불러올 수 있습니다. 구글 계정만 있으면 무료로 이용할 수 있습니다.

출처: https://ndb796.tistory.com/312 [안경잡이개발자]

 

코드를 치고 옆에 있는 플레이 아이콘을 누르거나 Ctrl + enter 또는 Alt + enter 를 누르면 코드가 실행됩니다. 아래의 코드를 치면서 따라와 주세요!

 

from google.colab import files
myfile = files.upload()

먼저 캐글에서 다운받은 자료를 올리기 위해 위의 코드를 실행주세요.

파일 선택이라는 버튼을 누르고 다운 받은 csv 파일을 올리시면 됩니다.

 

import pandas as pd
import numpy as np

분석을 위한 pandas, numpy 라이브러리를 불러오겠습니다.

 

train = pd.read_csv(‘train.csv’)
test = pd.read_csv(‘test.csv’)

불러온 csv 파일을 pandas로 불러와 각각 train, test라는 이름으로 저장하겠습니다.

 

train.head()
test.head()

파일이 잘 저장이 되었는지 head라는 함수를 써서 앞의 4번까지의 내용을 불러옵니다.

 

실행하고 나면 보이는 생소한 변수들을 설명드립니다.

survived  0이면 사망, 1은 생존을 뜻합니다.
pclass 승객 등급으로 1은 1등급을 뜻합니다.
SibSp(Sibling & Spouse) 같이 탄 형제자매, 배우자의 수
Parch(Parent & children) 같이 탄 부모님, 자식들의 수
Cabin 선실 번호
Embarked 탑승 장소

 

 

train.shape
test.shape

shape 함수는 몇 행 몇 열까지 있는지 알려줍니다. 결과 train: (891, 12) test: (418, 11)

 

train.isnull()

isnull은 누락된 정보가 있는지 알려주는 함수입니다. true, false 값으로 나와있으며 false는 누락이 되지 않고 값이 있다는 것을 뜻합니다. 하지만 이렇게 보면 한눈에 알기가 어렵습니다.

 

train.isnull().sum()
test.isnull().sum()

이처럼 뒤에 sum 함수를 추가해서 총 몇 개의 값이 누락되었는지 확인할 수 있습니다.

 

02-2. 시각화 : 어느 특성의 승객이 더 많이 살아남았는가

이제 저희가 분석한 데이터를 그래프로 표현하여 한눈에 알아보기 쉽게 시각화를 해보겠습니다.

 

import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
sns.set()

필요한 라이브러리를 불러옵니다.

 

def bar_chart(feature):
  survived = train[train['Survived'] == 1][feature].value_counts()
  dead = train[train['Survived'] == 0][feature].value_counts()
  df = pd.DataFrame([survived,dead])
  df.index = ['Survived', 'Dead']
  df.plot(kind='bar', stacked = True, figsize=(10,5))

막대 그래프를 그리기 위한 함수를 작성해줍시다. feature는 변수로 여기에 Parch, SibSp 같은 변수들을 넣을 것입니다.

변수마다 얼마나 살아남았고 죽었는지 막대 그래프로 시각화할 수 있습니다.

 

bar_chart('Sex')
bar_chart('Pclass')
bar_chart('SibSp')
bar_chart('Parch')

Sex, Pclass, SibSp, Parch와 같은 변수들을 하나씩 넣어 결과를 살펴 봅시다.

 

성별의 경우 여성이 더 많이 살아남았습니다. 당시 여성과 어린이를 우선적으로 구했다고 합니다.
Pclass(승객 등급)의 경우, 3등급의 승객들이 많이 사망한 것을 확인 할 수 있습니다.
SibSp의 경우입니다.
Parch의 경우입니다.

 


지금까지 간단히 데이터 분석과 시각화를 실습해보았습니다.

참고 블로그: 

https://jfun.tistory.com/136

 

다음 단계인 데이터 전처리와 머신 러닝은 김가영님께서 설명드리겠습니다!