📊 EDA (탐색적 데이터 분석)란?
탐색적 데이터 분석(Exploratory Data Analysis)은 데이터 분석 초기에 데이터를 다양한 각도에서 관찰하고 이해하는 과정입니다. 데이터의 숨겨진 패턴이나 이상치를 찾고, 분석 방향을 정하는 데 큰 도움을 줍니다.
- 통계학 🧐: 수집된 데이터를 분석해 과거의 경향성을 설명합니다. (닫힌 가정)
- 머신러닝 🤖: 새로운 데이터에 대한 미래를 추론하고, 사람이 찾기 힘든 패턴에서 인사이트를 얻습니다. (열린 가정)
💡 확증적 데이터 분석 (CDA) vs 탐색적 데이터 분석 (EDA)
- CDA (Confirmatory): 가설을 먼저 세우고 데이터로 검증하는 전통적 방식. (‘추론 통계’)
- EDA (Exploratory): 원본 데이터를 유연하게 탐색하며 특징과 구조를 파악. 빅데이터 분석에 필수! (‘기술 통계’)
🤔 왜 EDA가 중요할까? “Garbage in, Garbage out”
💡 앤스컴 콰르텟 (Anscombe’s Quartet)
기술 통계량(평균, 분산 등)은 거의 같지만, 시각화해보면 완전히 다른 분포를 보이는 4개의 데이터셋입니다.
결론: 숫자만 보지 말고, 반드시 데이터를 시각화해서 패턴을 직접 확인해야 한다는 중요성을 일깨워줍니다.
🧭 EDA의 접근 방식
- Bottom-up → Top-down
- Bottom-up: 처음 데이터를 볼 땐, 아무 편견 없이 데이터 자체를 관찰하며 특징을 찾습니다.
- Top-down: 그렇게 얻은 정보를 바탕으로 가설을 세우고, 특정 관점에서 데이터를 검증합니다.
- 다양한 관점으로 데이터 바라보기
- 잘라보기, 달리보기: 특정 차원(시간, 공간 등)을 기준으로 데이터를 나누거나, 행과 열을 바꿔보는 등(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()