데이터 분석 첫걸음! EDA로 데이터 숨은 의미 5분 만에 파악하는 법
데이터 탐색, EDA!
이번 시간에는 시험에 나올 만한 내용들을 중심으로 EDA에 대해 알아볼 거야. EDA는 탐색적 데이터 분석의 줄임말로, 데이터를 본격적으로 분석하기 전에 데이터를 이해하기 위해 꼭 해야 하는 첫 번째 단계야.
EDA, 왜 필요할까?
데이터를 분석하기 전에 EDA를 하는 이유는 마치 책을 읽기 전에 목차를 보거나 내용을 훑어보는 것과 같아. 데이터를 직관적으로 살펴보고, 어떤 특징이 있는지, 어떤 패턴이 숨어 있는지, 문제가 있는 부분(이상치, 결측치)은 없는지 미리 파악하는 거지. 이렇게 데이터를 제대로 이해해야 앞으로 어떻게 분석하고 모델을 만들지 방향을 제대로 잡을 수 있거든.
EDA, 어떻게 할까? (4단계)
EDA는 크게 네 가지 단계로 진행돼.
- 데이터 구조 확인: 데이터가 얼마나 많은지 (행, 열 개수), 각 데이터는 어떤 종류인지 (자료형), 빠진 값(결측치)은 없는지 등을 확인해.
- 기본 통계량 파악: 데이터의 평균, 표준편차, 분포 등을 알아봐.
- 변수 간 관계 살펴보기: 변수들끼리 서로 어떤 관련이 있는지 (상관관계) 알아보는 거야.
- 시각화로 패턴 찾기: 그래프를 그려서 데이터의 분포나 이상치, 패턴 등을 눈으로 직접 확인해.
실습: 타이타닉 데이터로 EDA 해보기
이제 실제로 타이타닉 데이터를 가지고 EDA를 해보자!
1. 필요한 도구 불러오기
데이터를 다루고 그래프를 그리기 위해 판다스(pandas)와 시본(seaborn)이라는 라이브러리를 불러올 거야. 시본은 그래프를 예쁘게 그려주는 도구야.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 한글 폰트 설정 (시험에서는 중요하지 않음)
plt.rcParams['font.family'] = 'Malgun Gothic'
plt.rcParams['axes.unicode_minus'] = False
2. 타이타닉 데이터 불러오기
시본에 내장된 타이타닉 데이터를 불러와 볼게. 데이터가 너무 많으니까 처음에는 head()를 써서 앞부분만 살짝 볼 거야.
titanic = sns.load_dataset('titanic')
print(titanic.head())
3. 데이터 기초 정보 확인
이제 데이터의 기본적인 정보를 자세히 살펴보자.
shape: 데이터의 행과 열 개수를 알려줘.
python print(titanic.shape) # (891, 15) -> 891개의 행, 15개의 열columns: 데이터의 열 이름들을 보여줘.
python print(titanic.columns)dtypes: 각 열의 데이터 타입을 알려줘. (숫자, 문자 등)
python print(titanic.dtypes)info(): 데이터의 상세 정보를 요약해서 보여줘. 결측치가 얼마나 있는지 등을 알 수 있어.
python print(titanic.info())
타이타닉 데이터에는 'age' (나이) 열에 결측치가 꽤 있다는 걸 알 수 있지?
4. 기본 통계량 살펴보기
describe()를 사용하면 숫자형 데이터에 대한 평균, 표준편차, 최솟값, 최댓값 등 기본적인 통계량을 볼 수 있어.
print(titanic.describe())
5. 시각화로 데이터 분포 살펴보기
이제 그래프를 그려서 데이터를 더 쉽게 이해해보자!
-
나이 분포 (히스토그램): 타이타닉에 탄 사람들의 나이가 어떻게 분포되어 있는지 히스토그램으로 그려볼 거야. 결측치는 빼고 그릴 거야.
python plt.figure(figsize=(7, 4)) # 그래프 크기 설정 sns.histplot(data=titanic, x='age', kde=True, bins=30) # 히스토그램 그리기 (kde=True는 부드러운 곡선 추가, bins=30은 30개 구간으로 나누기) plt.title('타이타닉 승선자 나이 분포') plt.show() -
성별에 따른 생존 여부 (카운트 플롯): 성별에 따라 얼마나 많은 사람이 살았고 죽었는지 카운트 플롯으로 그려볼 수 있어.
python plt.figure(figsize=(7, 4)) sns.countplot(data=titanic, x='sex', hue='survived') # 성별(x축)에 따라 생존 여부(hue)로 구분해서 개수 세기 plt.title('성별에 따른 생존 여부') plt.show()
6. 변수 간 상관관계 살펴보기
상관관계는 두 변수가 서로 얼마나 관련 있는지 나타내는 거야.
- 양의 상관관계: 한 변수가 커질 때 다른 변수도 커지는 관계 (예: 나이와 수입)
- 음의 상관관계: 한 변수가 커질 때 다른 변수는 작아지는 관계 (예: 나이와 게임 시간)
- 상관계수가 1에 가까우면 강한 상관관계, 0에 가까우면 상관이 거의 없다고 봐.
상관관계 행렬을 구해서 어떤 변수들이 서로 관련 있는지 숫자로 볼 수 있어.
correlation_matrix = titanic.corr(numeric_only=True) # 숫자형 데이터만 가지고 상관관계 계산
print(correlation_matrix)
이 표를 바로 보면 이해하기 어려우니까, 히트맵(heatmap)으로 시각화하면 더 보기 좋아!
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm') # annot=True는 숫자를 표시, cmap은 색상 테마
plt.title('타이타닉 데이터 상관관계 히트맵')
plt.show()
EDA를 통해 얻는 것들
EDA를 잘 하면 다음과 같은 것들을 알 수 있어.
- 데이터의 구조: 데이터가 어떻게 생겼는지 전체적인 모습을 파악할 수 있어.
- 변수의 분포와 관계: 각 변수가 어떤 값을 가지고 있고, 변수들끼리 어떤 관계가 있는지 알 수 있지.
- 데이터 품질: 빠진 값(결측치)이나 중복된 값은 없는지, 데이터가 깨끗한지 확인할 수 있어.
이런 정보들을 바탕으로 앞으로 데이터를 어떻게 전처리하고 모델링할지 전략을 세울 수 있답니다! EDA는 데이터를 분석하기 위한 출발점이니 꼭 잘 해내야 해!