📊 EDA (탐색적 데이터 분석)란?

탐색적 데이터 분석(Exploratory Data Analysis)은 데이터 분석 초기에 데이터를 다양한 각도에서 관찰하고 이해하는 과정입니다. 데이터의 숨겨진 패턴이나 이상치를 찾고, 분석 방향을 정하는 데 큰 도움을 줍니다.

  • 통계학 🧐: 수집된 데이터를 분석해 과거의 경향성을 설명합니다. (닫힌 가정)
  • 머신러닝 🤖: 새로운 데이터에 대한 미래를 추론하고, 사람이 찾기 힘든 패턴에서 인사이트를 얻습니다. (열린 가정)

💡 확증적 데이터 분석 (CDA) vs 탐색적 데이터 분석 (EDA)

  • CDA (Confirmatory): 가설을 먼저 세우고 데이터로 검증하는 전통적 방식. (‘추론 통계’)
  • EDA (Exploratory): 원본 데이터를 유연하게 탐색하며 특징과 구조를 파악. 빅데이터 분석에 필수! (‘기술 통계’)

🤔 왜 EDA가 중요할까? “Garbage in, Garbage out”

💡 앤스컴 콰르텟 (Anscombe’s Quartet)

기술 통계량(평균, 분산 등)은 거의 같지만, 시각화해보면 완전히 다른 분포를 보이는 4개의 데이터셋입니다.

결론: 숫자만 보지 말고, 반드시 데이터를 시각화해서 패턴을 직접 확인해야 한다는 중요성을 일깨워줍니다.


🧭 EDA의 접근 방식

  1. Bottom-up → Top-down
    • Bottom-up: 처음 데이터를 볼 땐, 아무 편견 없이 데이터 자체를 관찰하며 특징을 찾습니다.
    • Top-down: 그렇게 얻은 정보를 바탕으로 가설을 세우고, 특정 관점에서 데이터를 검증합니다.
  2. 다양한 관점으로 데이터 바라보기
    • 잘라보기, 달리보기: 특정 차원(시간, 공간 등)을 기준으로 데이터를 나누거나, 행과 열을 바꿔보는 등(transpose) 다양한 시도를 통해 새로운 인사이트를 얻을 수 있습니다.
    • 상관관계 vs 인과관계: 두 변수가 함께 움직인다고 해서 하나가 원인이라고 단정하면 안 됩니다. 항상 비판적으로 바라봐야 합니다.

📚 데이터 종류와 관련 용어

1. 데이터의 종류

구분 종류 설명 특징
질적(범주형) 명목형 순서 의미 없음 (e.g., 혈액형) 수학적 연산 불가 (비율만 의미)
  순서형 순서 의미 있음 (e.g., 학점)  
양적(수치형) 이산형 값을 셀 수 있음 (e.g., 주사위 눈) 덧셈, 뺄셈 등 연산 가능
  연속형 구간 안의 모든 값을 가짐 (e.g., 키, 몸무게)  

2. 관련 용어 정리

  • 모집단(Population): 분석 대상이 되는 전체 그룹.
  • 표본(Sample): 데이터를 수집한 모집단의 부분집합.
  • 원시 자료(Raw Data): 아무 가공도 거치지 않은 최초 데이터.
  • 데이터 정제(Data Cleaning): 오류를 찾고 수정하며 데이터의 신뢰도를 높이는 과정.

🎨 Matplotlib: 파이썬 시각화의 기초

Matplotlib은 파이썬에서 가장 널리 쓰이는 시각화 라이브러리입니다. 그래프를 그리기 위한 거의 모든 기능을 갖추고 있습니다.

✨ 기본 구조

  • Figure: 모든 요소를 담는 가장 큰 컨테이너 (도화지 전체).
  • Axes: 실제 그래프가 그려지는 영역 (하나의 그림).
import matplotlib.pyplot as plt
import numpy as np

# 기본 Plot
x = [0, 2, 4, 6, 8]
y = [1, 2, 3, 4, 5]

plt.plot(x, y, marker='o', linestyle='-.', color='b', label='Data 1')

# 레이블, 제목, 범례 추가
plt.title('기본 그래프 예제')
plt.xlabel('X축')
plt.ylabel('Y축')
plt.legend()

plt.show()

🛠️ 주요 그래프 종류

그래프 설명 언제 사용할까?
Bar Plot 범주형 데이터의 값(개수, 크기)을 막대로 표현 그룹별 데이터 비교
Histogram 연속형 데이터의 분포(빈도)를 막대로 표현 데이터의 전반적인 분포, 경향성 파악
Scatter Plot 두 양적 변수 간의 관계를 점으로 표현 변수 간 상관관계, 이상치 탐지
Pie Chart 전체에 대한 각 부분의 비율을 원형으로 표현 각 항목의 비율 비교 (항목이 적을 때 효과적)
Stack Plot 여러 그룹의 누적 값을 쌓아서 표현 시간에 따른 각 그룹의 기여도 변화 추적

🚀 Seaborn: Matplotlib을 더 예쁘고 쉽게

Seaborn은 Matplotlib을 기반으로 더 아름다운 그래프를 더 쉽게 그릴 수 있게 해주는 라이브러리입니다. 특히 통계적 시각화에 강점을 가집니다.

✨ Seaborn의 장점

  • 적은 코드로도 미려한 그래프 생성 가능.
  • 복잡한 통계 정보를 시각화하는 기능 내장.
  • Pandas 데이터프레임과 아주 잘 연동됨.
import seaborn as sns
import matplotlib.pyplot as plt

# Seaborn 내장 데이터셋 로드
tips = sns.load_dataset('tips')

# Box Plot: 데이터의 분포와 이상치를 한눈에!
sns.boxplot(data=tips, x='day', y='total_bill')
plt.title('요일별 전체 결제 금액 분포')
plt.show()

🛠️ Seaborn의 대표적인 그래프

그래프 설명 언제 사용할까?
Count Plot 범주형 데이터의 개수를 막대로 시각화 plt.bar와 비슷하지만 더 간편
KDE Plot 부드러운 곡선으로 데이터의 분포를 표현 히스토그램보다 매끄러운 분포 확인
Box Plot 데이터의 사분위수와 이상치를 상자 그림으로 표현 그룹 간 데이터 분포 비교, 이상치 탐지
Violin Plot Box Plot에 데이터 분포(KDE)를 함께 보여줌 데이터의 분포 형태까지 상세히 비교
Heatmap 숫자 데이터를 색상으로 표현 변수 간 상관관계 행렬 시각화
Pair Plot 데이터프레임의 모든 숫자형 변수 쌍에 대한 관계를 한 번에 시각화 데이터 전체의 관계를 빠르게 파악
# Pair Plot: 모든 변수 간의 관계를 한눈에 파악
sns.pairplot(tips, hue='day')
plt.show()