우공이산(愚公移山)

자신과 세상을 바꾸는 것은 머리좋고 가진것이 많은 사람이 아니라 결코 포기하지 않는 의지로 꾸준히 노력해 가는 사람이다. 오늘이 쌓여 내일을 만들고, 내일이 쌓여 인생을 만든다.

Data Science

데이터 EDA 기본 Template

보노보노 2024. 6. 26. 08:39

1. 데이터 로드 및 결측치


import pandas as pd

# 데이터 로드
df = pd.read_csv('your_dataset.csv')  # 데이터 파일 경로를 입력하세요.

# 데이터프레임 기본 정보 확인
print(df.info())
print(df.describe())

# 결측치 확인
missing_values = df.isnull().sum()
print(missing_values[missing_values > 0])

 

2. 데이터 분포 및 상관관계 분석

import seaborn as sns
import matplotlib.pyplot as plt

# 히스토그램을 통해 각 컬럼의 분포 확인
df.hist(bins=30, figsize=(20, 20))
plt.show()

# 상관관계 매트릭스
corr_matrix = df.corr()
plt.figure(figsize=(15, 15))
sns.heatmap(corr_matrix, annot=True, fmt='.2f', cmap='coolwarm')
plt.show()

 

3. 결측치 처리

# 결측치 비율이 높은 컬럼 제거 (임계값을 설정하여 제거)
threshold = 0.5
df = df[df.columns[df.isnull().mean() < threshold]]

# 결측치 채우기 (숫자형은 평균, 범주형은 최빈값으로 채우기)
num_cols = df.select_dtypes(include=['float64', 'int64']).columns
cat_cols = df.select_dtypes(include=['object']).columns

df[num_cols] = df[num_cols].fillna(df[num_cols].mean())
df[cat_cols] = df[cat_cols].fillna(df[cat_cols].mode().iloc[0])

 

4. 주요 변수 시각화

# 상위 몇 개의 컬럼에 대해 박스플롯 및 바이올린 플롯 그리기
top_columns = df.columns[:10]  # 상위 10개 컬럼에 대해 시각화

for col in top_columns:
    plt.figure(figsize=(12, 6))
    sns.boxplot(data=df, x=col)
    plt.title(f'Boxplot of {col}')
    plt.show()

    plt.figure(figsize=(12, 6))
    sns.violinplot(data=df, x=col)
    plt.title(f'Violinplot of {col}')
    plt.show()

 

5. 범주형 변수 시각화

# 범주형 변수의 값 분포 확인
for col in cat_cols:
    plt.figure(figsize=(12, 6))
    sns.countplot(data=df, x=col)
    plt.title(f'Countplot of {col}')
    plt.xticks(rotation=90)
    plt.show()

 

6. 주요 변수 간의 관계 시각화


# 상관관계가 높은 변수들 간의 관계 시각화
import numpy as np

# 상관계수가 높은 상위 n개 변수 추출
n = 10
corr_pairs = corr_matrix.unstack().sort_values(kind="quicksort", ascending=False).drop_duplicates()
high_corr_pairs = corr_pairs[(corr_pairs > 0.5) & (corr_pairs < 1)]

# 상위 n개 변수 간의 관계 시각화
for pair in high_corr_pairs.index[:n]:
    plt.figure(figsize=(12, 6))
    sns.scatterplot(data=df, x=pair[0], y=pair[1])
    plt.title(f'Scatterplot of {pair[0]} and {pair[1]}')
    plt.show()