기술과 산업/AI

데이터 수집과 EDA 전략 시리즈 – 6화. 데이터 시각화 실전 가이드: matplotlib, seaborn을 활용한 EDA 시각화

B컷개발자 2025. 5. 14. 16:26
728x90

데이터는 말이 없다.

하지만 데이터는 시각화라는 ‘언어’를 통해 이야기할 수 있다.

탐색적 데이터 분석(EDA) 과정에서 **데이터를 보는 것(Visualization)**은

숫자만으로는 결코 보이지 않는 패턴, 트렌드, 이상치를 직관적으로 보여준다.

 

이번 글에서는 Python의 대표적 시각화 도구인

matplotlib, seaborn을 중심으로

EDA에서 활용할 수 있는 다양한 실전 기법을 심층적으로 정리한다.

 


 

1. 왜 EDA에서 시각화가 필수인가?

 

EDA의 목적은 데이터를 ‘이해’하는 것이다.

숫자와 표로는 숨겨진 구조를 놓칠 수 있다.

시각화는 데이터 분석의 다음과 같은 역할을 한다:

 

  • 변수 분포, 밀도 파악
  • 이상치(Outlier) 감지
  • 변수 간 상관성 탐색
  • 그룹 간 차이 시각적 비교

 

또한 데이터 전문가와 비전문가(경영진, 마케팅팀 등) 간의

‘데이터 커뮤니케이션 도구’로서도 매우 중요한 역할을 한다.

 

✅ 분석가는 데이터 분석가이자, 데이터 스토리텔러다.

 


 

2. matplotlib vs seaborn

 

Python의 대표적인 시각화 라이브러리는 두 가지다.

라이브러리특징

matplotlib 가장 기본, 커스터마이징 최고 수준
seaborn matplotlib 기반 고급 wrapper, 통계 그래프 최적화

실무에서는 seaborn으로 빠르게 시각화하고

필요시 matplotlib으로 커스터마이징하는 방식이 일반적이다.

import matplotlib.pyplot as plt
import seaborn as sns

 


 

3. EDA 시각화 유형별 실전 예시

 

 

(1) 변수 분포 확인: histogram, KDE plot

sns.histplot(df['Age'], kde=True, bins=30)
plt.title('나이 분포와 커널 밀도 추정')
plt.show()

 

  • Age 데이터의 분포 확인
  • kde=True 옵션으로 부드러운 커널 곡선 추가

 


 

(2) 이상치 탐지: boxplot

sns.boxplot(x=df['Fare'])
plt.title('운임(Fare) 이상치 탐색')
plt.show()

 

  • 중간값, 사분위수, 이상치(점) 시각적 확인 가능

 


 

(3) 범주형 변수 비교: countplot

sns.countplot(x='Pclass', hue='Survived', data=df)
plt.title('선실등급(Pclass)별 생존자 분포')
plt.show()

 

  • Pclass(1등석, 2등석, 3등석)별 생존 여부 비교
  • 조건부 막대 그래프로 그룹 간 차이 확인

 


 

(4) 변수 간 관계 탐색: scatterplot, pairplot

sns.scatterplot(x='Age', y='Fare', hue='Survived', data=df)
plt.title('나이 vs 운임 (생존자 구분)')
plt.show()
sns.pairplot(df[['Age', 'Fare', 'Pclass', 'Survived']], hue='Survived')

 

  • 변수 간 상호작용, 군집, 경계선 여부 시각 탐색
  • pairplot은 여러 변수의 산점도를 한 번에 확인

 


 

(5) 상관계수 Heatmap

plt.figure(figsize=(8,6))
sns.heatmap(df.corr(), annot=True, cmap='coolwarm', vmin=-1, vmax=1)
plt.title('변수 간 상관관계 Heatmap')
plt.show()

 

  • 모든 수치형 변수 간 상관성을 직관적으로 확인

 


 

4. 고급 시각화 기법 추천

 

 

(1) violin plot

sns.violinplot(x='Pclass', y='Age', data=df)
plt.title('선실등급별 나이 분포')
plt.show()

 

  • boxplot + 분포 밀도 결합 그래프
  • 그룹 내 분포 형태까지 표현 가능

 


 

(2) jointplot

sns.jointplot(x='Age', y='Fare', data=df, kind='hex')

 

  • 두 변수의 joint distribution + 각 변수의 marginal distribution
  • hex 옵션으로 밀도 기반 격자 표시 가능

 


 

5. 실무 시각화 팁

 

  • 제목, 축 이름, 레이블을 반드시 추가하자
  • 색상은 정보를 강조하는 도구로 사용하되 과용하지 말 것
  • 데이터 전처리가 충분히 끝난 상태에서 그릴 것
  • 항상 데이터의 이상치, 결측치 여부를 인지한 후 시각화
  • seaborn 스타일은 기본적으로 예쁘지만 필요시 plt.style.use('ggplot') 등으로 커스터마이징 가능

 


 

6. 분석가는 ‘그림을 그리는 사람’이어야 한다

 

좋은 분석가는 단지 코드를 잘 짜는 사람을 넘어,

데이터에서 인사이트를 시각적으로 전달하는 능력을 갖춘 사람이다.

 

시각화는 데이터를 이해하고,

동료와 고객, 조직 내 경영진에게 설명하는 최고의 도구다.

 

“데이터는 숫자 속에 있지만,
통찰은 그래프 속에 있다.”

 


 

다음 편 예고

 

데이터 수집과 EDA 전략 시리즈 – 7화. EDA 자동화와 리포트 생성: pandas-profiling, sweetviz 실전 활용

 

반복적인 EDA 작업을 코드 한 줄로 자동화할 수 있다면?

pandas-profiling, sweetviz 등 자동 EDA 리포트 생성 툴을 활용한 실전 예제를 소개한다.

728x90