본문 바로가기

04. 캐글

00006. 🚢 [KAG-00001] Titanic 생존자 예측 #2 - 데이터 탐색(EDA)

반응형

1. 들어가며

이전 글 **"[DAC-001] Titanic 생존자 예측 #1 - 계획 세우기"**에서는 프로젝트의 목표와 분석 로드맵을 정리했습니다.
이번 글에서는 **데이터 탐색(Exploratory Data Analysis, EDA)**을 수행하며, 데이터의 구조를 이해하고 변수 간의 관계를 분석하여 유용한 패턴을 발견하는 과정을 진행합니다.
EDA는 머신러닝 프로젝트에서 가장 중요한 단계 중 하나입니다. 생존자와 비생존자의 차이점을 분석하고, 의미 있는 변수를 찾아보는 과정을 진행해 보겠습니다.


2. 데이터 불러오기 및 기본 정보 확인

📌 2.1 라이브러리 불러오기

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

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

📌 2.2 데이터 불러오기

train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")

이제 train.csv의 기본 정보를 확인해 보겠습니다.

train.info()

📌 출력 결과

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
 #   Column      Non-Null Count  Dtype  
---  ------      --------------  -----  
 0   PassengerId  891 non-null   int64  
 1   Survived     891 non-null   int64  
 2   Pclass       891 non-null   int64  
 3   Name         891 non-null   object  
 4   Sex          891 non-null   object  
 5   Age          714 non-null   float64  
 6   SibSp        891 non-null   int64  
 7   Parch        891 non-null   int64  
 8   Ticket       891 non-null   object  
 9   Fare         891 non-null   float64  
10   Cabin        204 non-null   object  
11   Embarked     889 non-null   object  

🚀 확인할 점
Age, Cabin, Embarked 컬럼에 결측치가 있음
Cabin 데이터는 결측치가 많아 활용 여부를 고민해야 함
Survived는 0(사망) 또는 1(생존)로 되어 있는 이진 분류 문제


3. 생존율 분포 분석

먼저 전체 생존율을 확인해 보겠습니다.

plt.figure(figsize=(6, 4))
sns.countplot(x=train["Survived"], palette="coolwarm")
plt.title("Survival Distribution (0 = Died, 1 = Survived)")
plt.show()

📊 결과 해석

  • 생존자(1)의 비율이 사망자(0)보다 적음
  • 생존률 ≈ 38.4%, 사망률 ≈ 61.6%
print(f"생존자 비율: {train['Survived'].mean() * 100:.2f}%")
생존자 비율: 38.38%

📌 🚨 분석 포인트:

  • 특정 변수(성별, 좌석 등급 등)가 생존 여부에 영향을 미쳤을까?
  • 어떤 변수들이 생존 가능성을 높였을까?

4. 주요 변수별 생존률 분석

📌 4.1 성별(Sex)과 생존률

plt.figure(figsize=(6, 4))
sns.barplot(x="Sex", y="Survived", data=train, palette="coolwarm")
plt.title("Survival Rate by Gender")
plt.show()

📊 결과 해석

  • 여성의 생존율이 남성보다 훨씬 높음
  • 🚀 "여성이 구조될 가능성이 더 높았다"
train.groupby("Sex")["Survived"].mean()
Sex
female    0.742038
male      0.188908

여성 생존율: 74.2%
남성 생존율: 18.9%


📌 4.2 좌석 등급(Pclass)과 생존률

plt.figure(figsize=(6, 4))
sns.barplot(x="Pclass", y="Survived", data=train, palette="coolwarm")
plt.title("Survival Rate by Pclass")
plt.show()

📊 결과 해석

  • 1등석 승객의 생존율이 가장 높음
  • 3등석 승객의 생존율이 가장 낮음
  • 🚀 "높은 등급의 좌석이 생존 확률을 높였다"
train.groupby("Pclass")["Survived"].mean()
Pclass
1    0.629630
2    0.472826
3    0.242363

1등석 생존율: 62.9%
3등석 생존율: 24.2%


5. 결론 및 다음 단계

🚀 EDA를 통해 얻은 주요 인사이트:
여성의 생존율이 남성보다 높음 (74.2% vs 18.9%)
1등석 승객의 생존율이 3등석보다 2배 이상 높음 (62.9% vs 24.2%)
적당한 가족 크기(1~3명)가 생존 확률을 높임

📌 다음 단계: 데이터 전처리!
다음 글 **"[DAC-001] Titanic 생존자 예측 #3 - 데이터 전처리"**에서는 결측치 처리, 이상치 제거, 범주형 데이터 변환 등의 작업을 진행하겠습니다.

🔥 추가적으로 분석해보고 싶은 요소가 있다면 댓글로 남겨주세요!

다음 편에서 만나요! 🚀

반응형