오늘은 EDA 에 대해서 배웠다. 데이터를 시각화하고, 데이터를 이해하는 단계로 꽤 재밌는 시간이었다.
그래프를 만들고, 정제하는 과정은 나에게 꽤 잘 맞는 것 같다.
EDA
EDA의 주요 목적
- 데이터의 기본 정보 파악:
- 결측치 및 이상치 탐색: 누락된 값과 비정상적인 값을 찾아 적절한 처리 방안을 결정.
- 기술통계를 이용한 데이터 요약: 평균, 중앙값, 표준편차 등 주요 통계량을 분석.
- 데이터의 분포 확인: 데이터가 정규분포를 따르는지 여부 등을 시각적으로 확인.
- 변수 간 관계 분석: 변수 간 상관관계를 분석하여 데이터의 패턴을 이해.
데이터 기본 정보 확인
: 데이터 크기, 컬럼 수, 데이터 타입 등을 확인
import pandas as pd
# 데이터 로드 (예제 데이터)
df = pd.read_csv("sample_data.csv")
# 데이터 크기 확인 (행, 열 개수)
print(f"데이터 크기: {df.shape}")
# 컬럼명 확인
print(f"컬럼명: {df.columns.tolist()}")
# 데이터 타입 확인
print(df.info())
# 상위 5개 행 출력
print(df.head())
결측치 및 이상치 탐색
# 결측치 확인
print(df.isnull().sum())
# 결측치 처리 방법
# 평균으로 대체
df['나이'] = df['나이'].fillna(df['나이'].mean())
# 최빈값으로 대체
df['소득'] = df['소득'].fillna(df['소득'].median())
이상치 탐색
- 박스플롯(Box Plot) 활용: 사분위수를 기반으로 이상치를 탐색.
- Z-score 활용: 데이터가 평균에서 얼마나 벗어났는지 확인.
# 박스플롯
import matplotlib.pyplot as plt
import seaborn as sns
# 박스플롯으로 이상치 확인
plt.figure(figsize=(6, 4))
sns.boxplot(x=df['소득'])
plt.title("소득 이상치 탐색")
plt.show()
# Z-score
from scipy import stats
# Z-score 계산
df["소득_Z"] = stats.zscore(df["소득"])
# Z-score가 3 이상인 데이터 조회
outliers = df[df["소득_Z"].abs() > 3]
print(outliers)
데이터 분포 확인
plt.figure(figsize=(6, 4))
sns.histplot(df["소득"], bins=30, kde=True)
plt.title("소득 분포")
plt.show()
import scipy.stats as stats
import numpy as np
import matplotlib.pyplot as plt
stats.probplot(df["소득"].dropna(), dist="norm", plot=plt)
plt.title("QQ-Plot")
plt.show()
# 수치형 변수 간의 상관계수 확인
correlation_matrix = df.select_dtypes(include=[float, int]).corr()
print(correlation_matrix)
히트맵
plt.figure(figsize=(8, 6))
sns.heatmap(correlation_matrix, annot=True, cmap="coolwarm", fmt=".2f")
plt.title("상관관계 히트맵")
plt.show()
plt.figure(figsize=(6, 4))
sns.scatterplot(x=df["소득"], y=df["구매횟수"])
plt.xlabel("소득")
plt.ylabel("구매횟수")
plt.title("소득과 구매횟수 관계")
plt.show()
박스플롯
plt.figure(figsize=(6, 4))
sns.boxplot(x=df["성별"], y=df["소득"])
plt.title("성별에 따른 소득 분포")
plt.show()
이상치 제거, 컬럼 제거
# 이상치 제거 (소득이 Z-score 3 초과인 데이터 제거)
df_cleaned = df[df["소득_Z"].abs() <= 3]
# 필요 없는 컬럼 제거 (Z-score 컬럼 삭제)
df_cleaned.drop(columns=["소득_Z"], inplace=True)
print(df_cleaned.info()) # 데이터 정리 후 구조 확인
'멋쟁이사자처럼 그로스마케터2기' 카테고리의 다른 글
[멋쟁이사자처럼부트캠프 그로스마케팅 2기 회고] 16일차 (0) | 2025.06.26 |
---|---|
[멋쟁이사자처럼부트캠프 그로스마케팅 2기 회고] 15일차 (T 검정, 회귀분석,선형회귀분석) (0) | 2025.06.25 |
[멋쟁이사자처럼부트캠프 그로스마케팅 2기 회고] 13일차 (Matplotlib 시각화, 보고서 작성) (0) | 2025.06.18 |
[멋쟁이사자처럼부트캠프 그로스마케팅 2기 회고] 12일차 (AARRR, 보고서 작성) (0) | 2025.06.18 |
[멋쟁이사자처럼부트캠프 그로스마케팅 2기 회고] 11일차 (API,감정분석, 워드클라우드) (2) | 2025.06.16 |