본문 바로가기
Python

VSCode] Titanic dataset 분석하기 - 1. 데이터 준비

by Fastlane 2023. 4. 7.
728x90
반응형

Titanic dataset은 OpenML.org에 있으며, https://hbiostat.org/data/Vanderbilt University's Department of Biostatistics으로부터 제공받았다.  

Titanic data는 타이타닉 승객들의 생존여부와 승객들의 나이, 티켓등급 등의 특성을 제공한다. 이 데이터를 사용하여 주어진 승객의 생존여부를 예측해는 모델을 만들어보자. 

 

데이터 준비

1. https://hbiostat.org/data/repo/titanic3.csv 경로에서 CSV file 형태의 데이터를 다운받는다. hello_ds (https://bigexecution.tistory.com/217 참조) 폴더에 저장한다. 

2. Jupyter notebook(hello.ipynb)을 연다. 

3. 아래 명령어를 notebook의 first cell에 복붙한다. 

import pandas as pd
import numpy as np
data = pd.read_csv('titanic3.csv')

4. Run cell icon 클릭 또는 Shift+Enter 단축키로 명령어를 실행한다. 

5. 변수탭에서 로딩된 data를 볼 수 있다. 

728x90

6. Pandas DataFrame형태의 data를 확인하기 위해서, data 옆에 Data Viewer icon을 선택하면 Data를 확인할 수 있다. 

7. 다음 명령어를 실행하여 seaborn과 matplotlib를 사용하여 dataset의 컬럼과 생존율의 상관관계를 볼 수 있다. 

import seaborn as sns
import matplotlib.pyplot as plt

fig, axs = plt.subplots(ncols=5, figsize=(30,5))
sns.violinplot(x="survived", y="age", hue="sex", data=data, ax=axs[0])
sns.pointplot(x="sibsp", y="survived", hue="sex", data=data, ax=axs[1])
sns.pointplot(x="parch", y="survived", hue="sex", data=data, ax=axs[2])
sns.pointplot(x="pclass", y="survived", hue="sex", data=data, ax=axs[3])
sns.violinplot(x="survived", y="fare", hue="sex", data=data, ax=axs[4])

그래프 우측상단의 icon으로 복사, 확대, 저장을 할 수 있다. 

8. 성별이 male, female로 되어 있는 것을 아래 코드를 실행하여 numeric으로 변경할 수 있다. 

data.replace({'male': 1, 'female': 0}, inplace=True)

9. 머신러닝모델에 최상의 inputs이 되는 features를 정하기 위해, 모든 input 변수들의 상관관계를 분석해보자. 1에 가까울 수록 값과 결과 사이에 상관관계가 높은 것이다. 다음 코드를 실행하여 모든 변수와 생존율간의 관계를 분석해보자. 

data.corr().abs()[["survived"]]

10. 관계 결과를 보자. sex와 같은 변수는 sibsp, parch에 비해 높은 관계성이 있는 것을 알 수 있다. 

그러면 sibsp와 parch가 생존율에 어떠한 영향을 미쳤는지 알아보자. 두 컬럼을 하나의 컬럼으로 그룹지어 생존과 어떠한 상관관계가 있는지 분석해보자. sibsp와 parch의 수가 0보다 크면 relative가 있었다고 말할 수 있다. 

data['relatives'] = data.apply (lambda row: int((row['sibsp'] + row['parch']) > 0), axis=1)
data.corr().abs()[["survived"]]

11. 승객이 relatives가 있었는지의 여부가 몇명이 있었는지에 비해 더 높은 상관관계가 있다는 것을 확인할 수 있다. 이제 NaN 값을 가지는 rows와 sibsp, parch 컬럼을 dataset에서 제거하자. 

data = data[['sex', 'pclass','age','relatives','fare','survived']].dropna()

 

 

728x90
반응형

댓글