데이터 분석 (Data Analysis & Exploration) - 3. 탐색적 데이터 분석 (EDA, Exploratory Data Analysis)
3. 탐색적 데이터 분석 (EDA, Exploratory Data Analysis)
탐색적 데이터 분석(Exploratory Data Analysis, EDA)은 데이터 분석의 초기 단계에서 데이터의 특징을 파악하고, 패턴과 이상값을 탐색하며, 변수 간의 관계를 분석하는 과정을 의미합니다. 이 과정은 분석가가 데이터를 깊이 이해하고 적절한 분석 기법을 선택하는 데 중요한 역할을 합니다.
3.1 EDA의 개념 및 목적
EDA란 무엇인가?
탐색적 데이터 분석(EDA)은 데이터를 시각화하고, 기본 통계를 계산하며, 변수 간의 관계를 분석하는 과정입니다. 이를 통해 데이터의 구조를 파악하고, 숨겨진 패턴을 발견하며, 이상치를 탐지할 수 있습니다.
EDA의 목적
✅ 데이터의 기본적인 특성 이해
- 데이터셋의 크기, 컬럼 개수, 결측값 유무 등을 파악
- 데이터의 분포와 변수를 분석하여 인사이트 도출
✅ 데이터 정제 및 이상치 탐색
- 결측값, 중복 데이터, 이상값(outlier) 탐색
- 데이터 품질을 향상시켜 정확한 분석 수행
✅ 변수 간 관계 파악
- 변수 간의 상관 관계 분석
- 다중공선성(변수 간 강한 상관성) 문제 해결
✅ 시각화를 통한 인사이트 도출
- 데이터 분포를 그래프(히스토그램, 박스플롯 등)로 표현
- 변수 간 관계를 직관적으로 이해
EDA는 머신러닝 모델링 및 예측 분석 전에 필수적인 과정이며, 잘 수행하면 더 나은 모델 성능과 해석 가능성을 확보할 수 있습니다.
3.2 데이터의 분포 확인 (기술 통계, 히스토그램, 박스플롯)
1) 기술 통계 (Descriptive Statistics)
기술 통계는 데이터의 기본적인 요약 정보를 제공합니다.
- 평균(mean), 중앙값(median), 최빈값(mode): 데이터의 중심 경향을 확인
- 최솟값(min), 최댓값(max), 표준편차(std), 분산(variance): 데이터의 변동성을 측정
- 사분위수(quantile): 데이터 분포의 25%, 50%, 75% 백분위 값 확인
import pandas as pd
df = pd.read_csv("data.csv")
print(df.describe()) # 기술 통계 출력
2) 히스토그램 (Histogram)
히스토그램은 연속형 데이터의 분포를 시각적으로 표현하는 그래프입니다.
- 데이터의 빈도수를 막대 그래프로 표현
- 데이터가 정규 분포(Normal Distribution)를 따르는지 확인 가능
- 이상치가 존재하는지 시각적으로 탐색 가능
import matplotlib.pyplot as plt
df["column"].hist(bins=30, edgecolor="black")
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.title("Histogram of Column")
plt.show()
3) 박스플롯 (Boxplot)
박스플롯은 데이터의 분포와 이상값을 탐색하는 데 유용한 그래프입니다.
- 중앙값, 1사분위수(Q1), 3사분위수(Q3)로 데이터의 분포 표현
- 이상치(outlier)를 점으로 표시
- 여러 그룹 간 비교 분석 가능
import seaborn as sns
sns.boxplot(y=df["column"])
plt.title("Boxplot of Column")
plt.show()
3.3 변수 간 관계 분석 (산점도, 상관 분석)
변수 간 관계를 분석하면 어떤 변수가 서로 영향을 주는지 파악할 수 있습니다.
1) 산점도 (Scatter Plot)
산점도는 두 변수 간의 관계를 시각적으로 표현하는 그래프입니다.
- 선형 관계가 있는지 확인 가능
- 데이터가 어떤 패턴을 보이는지 탐색
sns.scatterplot(x=df["column1"], y=df["column2"])
plt.title("Scatter Plot of Column1 vs Column2")
plt.show()
2) 상관 분석 (Correlation Analysis)
상관 분석은 두 변수 간의 관계가 얼마나 강한지를 나타냅니다.
- 피어슨 상관계수 (Pearson Correlation): 선형 관계 분석 (값 범위: -1 ~ 1)
- 스피어만 상관계수 (Spearman Correlation): 순위 기반 관계 분석
corr_matrix = df.corr() # 상관계수 계산
sns.heatmap(corr_matrix, annot=True, cmap="coolwarm", fmt=".2f")
plt.title("Correlation Matrix")
plt.show()
3.4 범주형 데이터와 수치형 데이터 분석
EDA에서는 범주형 데이터(질적 데이터)와 수치형 데이터(양적 데이터)를 구분하여 분석해야 합니다.
1) 범주형 데이터 분석 (Categorical Data Analysis)
범주형 데이터는 고유한 그룹으로 나누어진 데이터입니다. (예: 성별, 직업, 지역 등)
- 빈도 분석: 각 카테고리별 개수 확인
- 막대그래프 (Bar Plot): 범주형 데이터의 분포 확인
df["category_column"].value_counts().plot(kind="bar")
plt.xlabel("Category")
plt.ylabel("Count")
plt.title("Bar Plot of Categories")
plt.show()
2) 수치형 데이터 분석 (Numerical Data Analysis)
수치형 데이터는 연속적인 값을 가지며, 평균, 표준편차 등의 수치로 분석 가능합니다.
- 기술 통계 활용
- 히스토그램 및 박스플롯 사용
sns.boxplot(x=df["numeric_column"])
plt.title("Boxplot of Numeric Column")
plt.show()
3.5 시각화를 통한 데이터 이해 (Matplotlib, Seaborn 활용)
데이터를 이해하는 데 있어 시각화는 필수적인 도구입니다. 대표적인 라이브러리로 Matplotlib와 Seaborn이 있습니다.
1) Matplotlib을 활용한 시각화
Matplotlib은 가장 기본적인 그래프 라이브러리입니다.
import matplotlib.pyplot as plt
plt.plot(df["column"])
plt.title("Line Plot")
plt.show()
2) Seaborn을 활용한 시각화
Seaborn은 Matplotlib을 기반으로 한 고급 시각화 라이브러리입니다.
import seaborn as sns
sns.histplot(df["column"], bins=30, kde=True)
plt.title("Histogram with Density Plot")
plt.show()
Seaborn을 사용하면 보다 세련된 시각화를 쉽게 구현할 수 있습니다.
정리
탐색적 데이터 분석(EDA)은 데이터 분석의 첫 단계로, 데이터를 이해하고 정리하는 과정에서 매우 중요한 역할을 합니다.
EDA를 통해 데이터의 분포를 확인하고, 변수 간의 관계를 파악하며, 시각화 기법을 활용하여 인사이트를 도출할 수 있습니다.