데이터마이닝 - EDA

조쿨러·2024년 1월 8일

Python

목록 보기
7/12

3. EDA

EDA(탐색적 데이터 분석)

EDA

  • 탐색적 데이터 분석을 의미
  • 데이터를 다양한 각도에서 관찰하고 이해하는 모든 과정을 의미

EDA 필요성

  • 데이터 수집 및 정제 과정
  • 데이터 수집, 데이터 전처리, 순수 데이터, EDA(탐색적 데이터 분석)
  • 데이터의 잠재적인 문제 발견
  • 데이터의 다양한 패턴 발견
  • 자료수집을 위한 기반 (추가 자료수집도 포함)
  • 적절한 통계 도구 제시

데이터에 대한 이해와 탐색을 기반으로 문제 발견 및 해결, 데이터 분석을 하는 과정에서 필요한 통계도구, 자료수집 등을 결정하는 데도 도움

EDA의 대상(타깃)

일변량

  • EDA를 통해 파악하려는 변수 1개 : 데이터를 설명하고 패턴을 찾는 것이 목적
  • 일변량 분석은 어떤 대상의 성격을 규명하기 위하여 한가지 측면에서 그 대상을 관찰하고 분석하는 것에 유용

다변량
EDA를 통해 파악하려는 변수 여러개 : 변수들간의 관계를 보는 것이 목적
여러 개의 독립변수에 여러 개의 종속변수를 동시에 분석하는 것
다변량 분석은 여러 각도와 측변에서 변수들의 관계를 분석하는 것에 유용

EDA의 종류

시각화

  • 차트, 그림 등을 이용하여 데이터를 확인하는 방법
  • 데이터를 한눈에 파악하여 대략적인 형태 파악 가능

비시각화

  • 그래픽적인 요소를 사용하지 않고, 주로 Summary Statistics으로 데이터 확인
  • 정확한 값을 파악하기 좋음
  • 대표적으로 요약통계량 describe() 함수를 사용하면 평균, 중앙값, 최대/최소값 등 데이터의 컬럼별 요약 통계량 확인가능

EDA의 유형

  • 일변량 비시각화 : 데이터의 분포를 확인하는 것이 주목적
  • 일변량 시각화 : 데이터를 전체적으로 살펴보는 것이 주목적
  • 다변량 비시각화 : 주어진 둘 이상의 변수간 관계를 확인하는 것이 주목적
  • 다변량 시각화 : 주어진 둘 이상의 변수간 관계를 전체적으로 살펴보는 것이 주목적

EDA(탐색적 데이터분석)

EDA의 단계
1. 전체적인 데이터 분석

  • 분석의 목적과 목적에 맞는 변수가 무엇인지
  • 데이터형 확인/데이터의 오류나 누락이 없는지
  • 데이터를 구성하는 각 속성값이 예측한 범위와 분포를 갖는지, 아니라면 그 이유가 무엇인지 확인
  1. 데이터의 개별 속성값 관찰
  • 개별 데이터를 관찰하며 전체적인 추세와 특이사항 관찰
  • 적절한 요약통계 지표 사용 (평균, 중앙값, 분산 등)
  • 시각화를 통해 데이터의 개별 속성에서 어떤 통계 지표가 적절한지 결정
  1. 속성 간의 관계분석
  • 개별 속성 관찰에서 찾아내지 못했던 속성들의 조합, 패턴 발견
  • 그래프를 통해 시각화하여 속성 간의 관계 분석
  • 상관계수를 통한 상관관계 확인

통계치 분석
이상치 : 관측된 데이터의 범위에서 많이 벗어난 아주 작은 값이나 큰 값

이상치 분석 방법

  • 표준편차 : 데이터의 분포가 정규 분포를 이룰 때, 표준편차 범위를 벗어나면 이상치로 간주
# 이상치 구하기 z-score

import numpy as np
data = [1,2,3,4,1,1,20,1,2,3,2,1,1,2]

mean = np.mean(data)
std = np.std(data)

print('평균 : ', mean)
print('표준편차 : ', std)
threshold = 3

outlier = []
for i in data :
	z = (i-mean) / std
    if z > threshold :
    	outlier.append(i)
print('outlier :', outlier)

IQR 이상치 탐색

  • EDA를 개발한 존 튜키가 만든 이상치 검출 방법
  • 데이터가 정규분포를 이루지 않을 때 활용 가능한 방법

Q1과 Q3은 데이터를 4등분 했을 대의 범위로 Q1은 최소값을 포함한 하위 25% 범위를, Q3은 최대값을 포함한 상위 25%의 범위를 표현
IQR의 값은 Q3에서 Q1을 뺀 값

(Q1 - 1.5 IQR)보다 작거나 (Q3 + 1.5 IQR)보다 큰 데이터를 이상치로 처리

import numpy as np

def iqr_outlier(df=None, column=None, weight=1.5) :
	# target 값과 상관관계가 높은 열을 우선적으로 진행
   quantile_25 = np.percentile(df[column].values, 25) #Q1의 값
   quantile_75 = np.percentile(df[column].values, 75) #Q3의 값
   
   iqr = quantile_75 - quantile_25 # iqr = Q3 - Q1
   iqr_weight = iqr * weight
   
   low_outlier = quantile_25 - iqr_weight #최솟값
   hight_oulter = quantile_75 + iqr_weight #최댓값
   
   #이상치 검색
   outlier_idx = df[column][ (df[column] < low_outlier) | (df[column] > high_outlier)  ].index
   return outlier_idx
   
result = iqr_outlier(df=df, column='컬럼명', 1.5)

결측치
누락된 데이터로, 전처리 단계에서 적절한 값으로 처리가 필요

결측치 타입

  • 완전 무작위 결측(MCAR) : 결측치가 다른 변수들과 아무런 상관관계가 없는 경우 (단순 응답 누락)
  • 무작위 결측(MAR) : 특정 변수와 관련되어 누락됐지만, 변수들의 상관관계를 알 수 없는 경우 (다수의 여성이 몸무게 무응답)
  • 비무작위 결측(NMAR) : 누락된 변수의 값이 누락된 이유와 관련이 있는 경우 (무거운 사람들이 자신의 체중을 설문조사에 무응답)

4. folium - 지도시각화

Python 언어를 사용하여 지도 시각화를 구현할 수 있는 라이브러리

profile
지지 않기

0개의 댓글