EDA

코딩다시시작·2024년 10월 20일

빅데이터분석

목록 보기
5/19

EDA(Exploratory Data Analysis)

  • EDA (탐색적 데이터 분석)
  • EDA는 데이터 분석의 초기 단계에서 데이터를 이해, 그 속성을 탐구하는 과정
  • EDA는 주로 통계적 요약과 시각화를 통해 데이터의 특징을 파악
  • 데이터에 숨어 있는 패턴, 이상치(outliers), 관계성 등을 발견하는 데 중점
  • 데이터 분석이나 모델링을 시작하기 전에 필수적인 단계
  • 데이터에 대한 직관적 이해를 높여 데이터 기반의 의사결정 도움

EDA 목적

  1. 데이터 구조 파악: 데이터셋의 변수, 값의 분포, 데이터 타입, 결측치(NaN, Null 등) 확인
  2. 데이터의 특성 탐색: 통계적 방법(평균, 중앙값, 분산, 표준편차 등)을 사용해 데이터의 특성을 파악
  3. 가설 설정: 데이터가 가지고 있는 특징을 통해 가설 설정, 이후 분석이나 모델링을 위한 방향성 제시
  4. 데이터 정제: 과정에서 발견된 이상치나 결측치를 처리하여 데이터의 품질을 향상
  5. 변수 간 관계 파악: 상관분석, 그래프 등을 통해 변수들 간의 상관관계나 의존성을 분석

EDA에서 주로 사용하는 기법:

  1. 기술 통계(Descriptive Statistics): 데이터의 기초적인 통계를 통해 데이터를 요약 (예: 평균, 중앙값, 분산, 범위, 최댓값, 최솟값)
  2. 시각화 기법:
    • 히스토그램: 변수의 분포를 시각적으로 나타내어 데이터의 분포를 파악
    • 상자 그림(Box Plot): 이상치와 중앙값, 사분위수를 통해 데이터 분포 시각화
    • 산점도(Scatter Plot): 두 변수 간의 관계를 시각화
    • 상관행렬(Correlation Matrix): 변수 간 상관관계를 숫자와 색을 통해 관계성을 파악
    • 히트맵(Heatmap): 여러 변수 간의 상관관계를 시각화

EDA의 단계:

  1. 데이터 로드 및 초기 관찰: 데이터를 로드한 후, 간단한 기술 통계와 시각화를 통해 데이터셋을 관찰
  2. 결측치 처리: 결측 데이터(NaN, NULL 등)가 있는지 확인하고 이를 처리
  3. 변수 분석: 각 변수의 분포와 특성을 개별적으로 분석
  4. 변수 간 관계 분석: 변수 간 상관관계와 의존성을 파악
  5. 이상치 탐색: 이상한 값이나 극단값이 존재하는지 확인, 분석 결과에 미치는 영향을 평가
  6. 데이터 정제 및 변환: 데이터를 분석하기 좋은 형태로 변환하거나 정제

Python


라이브러리

1) pandas

데이터 프레임을 사용하여, 데이터 조작 및 분석에 사용

import pandas as pd

#데이터 부러오기
df = pd.read_csv('data.csv'

#데이터 확인
print(df.head())
print(df.info())
print(df.describe())

2) Matplotlib 및 Seaborn

시각화에 유용한 라이브러리

import matplotlib.pyplot as plt
import seaborn as sns

# 히스토그램: 데이터 분포 확인
sns.histplot(df['age'])
plt.show()

# 상자 그림(Box Plot): 이상치 탐색
sns.boxplot(x='age', data=df)
plt.show()

# 산점도: 두 변수 간의 관계
sns.scatterplot(x='age', y='income', data=df)
plt.show()

# 상관관계 히트맵
corr = df.corr()  # 변수 간의 상관계수 계산
sns.heatmap(corr, annot=True, cmap='coolwarm')
plt.show()

3)NumPy

배열 연산 및 수치 연산에 특화

import numpy as np

# 결측치 처리
df['age'] = df['age'].replace(np.nan, df['age'].mean())  # 결측치를 평균값으로 대체

4) SciPy

통계 분석과 과학 계산

from scipy import stats

# 정규성 검정 (Normality Test)
k2, p = stats.normaltest(df['age'])
if p < 0.05:
    print("정규 분포가 아님")
else:
    print("정규 분포임")

EDA 절차 with python

1) 데이터 불러오기 및 구조 파악

#데이터셋 불러오기
df = pd.read_csv('data.csv')

#데이터 기본 정보 확인
print(df.info())
print(df.describe()) #수치형 데이터 요약 통계
print(df.isnull().sum()) #결측치 확인

2) 기술 통게 계산

# 변수별로 기술 통계량 계산
print(df['age'].mean())  # 평균값
print(df['age'].median())  # 중앙값
print(df['age'].std())  # 표준편차

3) 결측치 처리

# 결측치 확인
print(df.isnull().sum())

# 결측치를 평균값으로 채우기
df['age'] = df['age'].fillna(df['age'].mean())

4) 이상치 탐지

# 상자 그림으로 이상치 확인
sns.boxplot(df['age'])
plt.show()

# IQR 방식으로 이상치 제거
Q1 = df['age'].quantile(0.25)
Q3 = df['age'].quantile(0.75)
IQR = Q3 - Q1
df_cleaned = df[~((df['age'] < (Q1 - 1.5 * IQR)) | (df['age'] > (Q3 + 1.5 * IQR)))]

5) 변수 간 관계 분석

# 상관계수 계산 및 히트맵 시각화
corr_matrix = df.corr()
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.show()

# 산점도
sns.scatterplot(x='age', y='income', data=df)
plt.show()
profile
gpt로 다시 배우는 개발

0개의 댓글