반응형
탐색적 데이터 분석 (EDA) 주요 단계
1. 데이터 구조 파악
목적
데이터의 기본적인 구조와 속성을 파악하여 분석 방향을 설정한다. 이를 통해 데이터 정제 필요성, 변수별 특징, 적절한 전처리 방법 및 모델링 전략을 결정할 수 있다.
주요 확인 사항
- 데이터 크기 (행, 열 개수) -> 데이터의 전체 규모 파악
- 변수(컬럼)의 개수 및 이름 -> 주요 변수 확인, 불필요한 변수 제거 여부 검토
- 데이터 타입 (숫자형, 범주형, 문자열 등)
- 숫자형 (int, float): 수치형 분석 및 통계적 분석에 활용
- 범주형 (object, category): 그룹별 분석 및 원-핫 인코딩 필요 여부 확인
- 문자열 (텍스트 데이터): 자연어 처리(NLP) 필요성 검토
- 누락된 값 (결측치)의 개수 -> 데이터 품질 평가 및 적절한 결측치 처리 방법 선택
- 데이터 요약 정보 -> 데이터의 대표적인 총계량을 확인하고 변수별 분포 파악
사용 메서드 및 예제 코드
import pandas as pd
df = pd.read_csv("data.csv") # 데이터 불러오기
print("데이터 크기:", df.shape) # 2차원 데이터의 경우 (행 개수, 열 개수)
print("\n컬럼 이름:", df.columns) # 변수명 확인
print("\n데이터 타입:\n", df.dtypes) # 변수별 데이터 타입 확인
print("\n결측치 개수:\n", df.isnull().sum()) # 변수별 결측치 개수 확인
print("\n데이터 개요:")
print(df.info()) # 전체적인 데이터 개요 확인
print("\n기초 통계량:")
print(df.describe()) # 수치형 변수에 대한 기초 통계량 확인
2. 결측치 확인
목적
결측치(missing values)는 분석의 신뢰도를 낮출 수 있으므로, 결측치의 존재 여부를 확인하고 적절한 처리 방법을 결정해야 한다.
주요 확인 사항
- 결측치 개수 및 비율 -> 각 변수에 결측치가 얼마나 존재하는지 확인
- 결측치의 분포 -> 특정 패턴이 있는지 확인하여 처리 방법 결정
- 결측치 처리 방법 선택
- 단순 삭제: 결측치가 적을 경우 해당 행/열 삭제
- 평균/중앙값 대체: 수치형 데이터의 경우 평균 또는 중앙값으로 대체
- 최빈값 대체: 범주형 데이터의 경우 최빈값으로 대체
- 예측 기반 대체: 머신러닝 기법을 활용하여 결측값 예측
사용 메서드 및 예제 코드
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv("data.csv") # 데이터 불러오기
# 결측치 개수 확인
print(df.isnull().sum())
# 결측치 비율 확인
print(df.isnull().sum() / len(df) * 100)
# 결측치 시각화
plt.figure(figsize=(10,6))
sns.heatmap(df.isnull(), cbar=False, cmap='viridis')
plt.title("결측치 분포 시각화")
plt.show()
3. 단변량 분석
목적
각 변수의 개별적인 분포와 특성을 분석하여 데이터의 중심 경향과 변동성을 파악한다.
주요 확인 사항
- 데이터의 분포 형태 (정규분포 여부, 편향 정도)
- 대표적인 통계값 (평균, 중앙값, 최솟값, 최댓값, 표준편차)
- 이상치 존재 여부
사용 메서드 및 예제 코드
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv("data.csv") # 데이터 불러오기
# 특정 변수의 기초 통계량 확인
print(df['변수명'].describe())
# 변수의 히스토그램 (분포 확인)
plt.hist(df['변수명'], bins=30, edgecolor='black')
plt.xlabel("변수명")
plt.ylabel("빈도")
plt.title("변수명 분포")
plt.show()
# 박스플롯 (이상치 확인)
sns.boxplot(x=df['변수명'])
plt.title("변수명 이상치 분석")
plt.show()
4. 이변량 분석
목적
두 변수 간의 관계를 분석하여 상관관계 또는 인과관계를 파악한다.
주요 확인 사항
- 수치형 변수 간의 관계 (산점도, 상관계수)
- 범주형 변수와 수치형 변수의 관계 (박스플롯)
사용 메서드 및 예제 코드
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv("data.csv") # 데이터 불러오기
# 두 수치형 변수 간의 관계 (산점도)
plt.scatter(df['변수1'], df['변수2'])
plt.xlabel("변수1")
plt.ylabel("변수2")
plt.title("변수1 vs. 변수2")
plt.show()
# 상관행렬 계산 및 시각화
corr_matrix = df.corr()
plt.figure(figsize=(10,6))
sns.heatmap(corr_matrix, annot=True, cmap="coolwarm", fmt=".2f")
plt.title("상관 행렬")
plt.show()
5. 데이터 시각화
목적
데이터를 시각적으로 표현하여 패턴을 쉽게 파악하고 인사이트를 도출한다.
주요 확인 사항
- 수치형 변수의 분포 -> 히스토그램 사용
- 범주형 변수의 분포 -> 파이 차트, 막대그래프 사용
- 두 변수 간 관계 -> 산점도, 상관행렬 사용
사용 메서드 및 예제 코드
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv("data.csv") # 데이터 불러오기
# 수치형 변수 히스토그램
df['변수명'].hist()
# 범주형 변수 파이 차트
df['범주형변수명'].value_counts().plot(kind='pie', autopct='%1.1f%%')
# 산점도
sns.scatterplot(x=df['변수1'], y=df['변수2'])
# 상관 행렬
sns.heatmap(df.corr(), annot=True, cmap="coolwarm", fmt=".2f")
6. 기초 통계 분석
목적
변수의 대표적인 통계값을 계산하여 데이터의 특성을 수치적으로 요약한다.
주요 확인 사항
- 평균, 중앙값, 표준편차 -> 데이터의 중심 경향과 변동성 파악
- 최솟값, 최댓값 -> 데이터의 범위 확인
- 사분위수(Q1, Q3, IQR) -> 이상치 탐색
사용 메서드 및 예제 코드
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv("data.csv") # 데이터 불러오기
# 기초 통계량 계산
mean_value = df['변수명'].mean() # 평균
median_value = df['변수명'].median() # 중앙값
std_dev = df['변수명'].std() # 표준편차
min_value = df['변수명'].min() # 최솟값
max_value = df['변수명'].max() # 최댓값
print(f"평균: {mean_value}, 중앙값: {median_value}, 표준편차: {std_dev}")
print(f"최솟값: {min_value}, 최댓값: {max_value}")
7. 결론 및 요약
EDA는 데이터를 이해하고 분석의 방향성을 설정하기 위한 중요한 과정으로, 데이터 구조 파악, 결측치 확인, 단변량 및 이변량 분석, 시각화, 기초 통계 분석 등을 포함한다. 이를 통해 데이터의 특성을 파악하고, 이상치 및 변수 간 관계를 식별하여 데이터 전처리 및 모델링에 필요한 인사이트를 도출할 수 있다. EDA는 분석 결과의 신뢰성을 높이고, 이후 분석에 필요한 적절한 조치를 취하는 데 중요한 역할을 한다.
반응형
LIST
'데이터 분석' 카테고리의 다른 글
PCA (주성분 분석, Principal Component Analysis) (0) | 2025.03.19 |
---|---|
데이터 전처리 (Data Preprocessing) (0) | 2025.03.12 |
범주형 데이터 처리 (0) | 2025.03.10 |
특징 선택(Feature Selection) (0) | 2025.03.10 |
표준화(Standardization)와 정규화(Normalization) (0) | 2025.03.09 |