탐색적 데이터분석 (EDA — Exploratory Data Analysis)
데이터셋의 주요 특성(패턴, 이상치, 분포)을 통계량과 시각화로 이해하는 분석 단계. 머신러닝 모델 적용 전 필수.
설명
EDA는 데이터와의 “첫 만남”으로, 모델 구축을 서두르지 않고 데이터를 깊이 이해하는 단계이다.
핵심 질문:
- 데이터 크기는 얼마나 되나? (행·열 개수)
- 자료형이 맞나? (정수 vs 실수 vs 범주형)
- 결측치가 얼마나 있나?
- 이상치가 있나?
- 변수 간 관계는?
- 분포의 특징은?
8-9단계 프로세스
단계 1-3: 데이터 로드 & 검사
import pandas as pd
df = pd.read_csv('data.csv')
df.shape # (11914, 14) — 11,914행, 14개 컬럼
df.info() # 자료형, 결측치 개수
df.describe().T # 통계 요약 (평균, 표준편차, 사분위수)단계 4-5: 데이터 정리
컬럼 정리:
- 불필요한 컬럼 제거 (예: 인덱스, ID)
- 컬럼명 표준화 (띄어쓰기 제거, 소문자 변환)
df = df.drop(['id', 'index'], axis=1)
df.columns = df.columns.str.lower().str.replace(' ', '_')단계 6-7: 데이터 정제 (중복 & 결측치)
중복 제거:
df.duplicated().sum() # 중복 행 개수 (예: 989개)
df = df.drop_duplicates() # 제거결측치 처리:
df.isnull().sum() # 컬럼별 결측치 개수
# 선택 1: 삭제
df = df.dropna()
# 선택 2: 대체
df['age'].fillna(df['age'].mean(), inplace=True)실제 사례: 11,914행 → 중복 제거(989) → 결측치 제거(99) → 11,825행
단계 8: 이상치 탐지 (Outlier Detection)
IQR 기법 (사분위간 거리):
Q1 = df[col].quantile(0.25)
Q3 = df[col].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = df[(df[col] < lower_bound) | (df[col] > upper_bound)]
# 또는 제거
df = df[(df[col] >= lower_bound) & (df[col] <= upper_bound)]실제 사례: 약 1,600개 이상치 행 식별 및 제거 최종: 11,914 → 9,191행 (22% 정제)
단계 9: 시각화 및 관계 탐색
3계층 시각화 전략
1단계: 단변량 분석 (Univariate) — 개별 변수 분포
히스토그램 (범주형):
plt.hist(df[col], bins=20)
sns.histplot(df[col])질문: 가장 흔한 카테고리는?
커널밀도플롯 (연속변수):
sns.kdeplot(df[col])질문: 데이터가 어떤 분포 형태인가? (정규분포? 편향?)
박스플롯 (이상치):
sns.boxplot(y=df[col])질문: 이상치가 시각적으로 보이나?
2단계: 이변량 분석 (Bivariate) — 두 변수 관계
산점도 (두 연속변수):
sns.scatterplot(data=df, x=col1, y=col2)패턴: 우상향(양의 상관), 우하향(음의 상관), 분산(관계 없음)
바이올린플롯 (범주 vs 연속):
sns.violinplot(data=df, x=category, y=value)질문: 카테고리 A vs B의 값 분포가 다른가?
쌍 플롯 (모든 변수 쌍):
sns.pairplot(df)대각선: 히스토그램, 비대각선: 산점도
3단계: 다변량 분석 (Multivariate) — 모든 변수 간 관계
상관 히트맵:
sns.heatmap(df.corr(), annot=True, cmap='coolwarm')색상:
- 빨강: +1 (강한 양의 상관)
- 파랑: -1 (강한 음의 상관)
- 흰색: 0 (상관 없음)
배경 / 역사
EDA 개념은 John Tukey가 1970년대에 제안한 “탐색적 데이터분석(Exploratory Data Analysis)“에서 비롯되었다. 당시에는 시각화 도구가 없었지만, 현대에는 Python의 pandas, matplotlib, seaborn으로 쉽게 수행 가능하다.
역할 변화:
- 1970s: 통계 분석의 첫 단계 (수작업)
- 2010s: 빅데이터 시대 데이터 품질 검증
- 2020s: AI/ML 전 필수 단계 (데이터 누수 방지, 편향 탐지)
실전 적용
pandas-dataframe 의 적용 사례
df.shape,df.info(): 데이터 검사isnull().sum(),duplicated().sum(): 정제 대상 식별corr(): 변수 간 상관 계산
matplotlib-seaborn 의 적용 사례
- 히스토그램, 박스플롯: 단변량 시각화
- 산점도, 바이올린플롯: 이변량 관계
- 히트맵: 다변량 상관
ml-pipeline 과의 연관
- EDA 후 필요한 전처리 결정 (스케일링, 인코딩)
- 결측치 전략 선택 (삭제 vs 대체)
- 이상치 처리 방식 결정
관련 개념
- ml-pipeline — EDA 후 전처리·모델 단계
- data-quality — 데이터 품질 검증 기준 (중복, 결측치 등)