[데이터 분석] EDA(Exploratory Data Analysis)

2023. 3. 5. 21:09·AI Research/Data Analysis
728x90
반응형

▶ EDA(Exploratory Data Analysis)란?

탐색적 데이터 분석입니다. 데이터 분석에 있어서 매우 중요한 초기 분석 단계입니다. 쉽게 말해서 데이터가 어떤 형태를 띄고 있는지 견적을 내는 일이다라고 할 수 있습니다. 이 단계가 중요한 이유는 데이터의 특성을 알아야 해결하고자 하는 문제의 해결 방법을 탐색해 볼 수 있기 때문입니다.

간단히 설명하자면, EDA란!

- 시각화를 통해 패턴을 발견하고,

- 데이터의 특성을 확인하고,

- 통계와 그래픽을 통해 가설을 검정하는 과정을 통해 데이터에 대해 알아보는 것입니다.

​

​

▶ EDA의 목적

EDA의 목적은 아래와 같습니다.

- 시각화와 통계를 사용해 데이터를 이해하고 살펴볼 수 있습니다.

- 도출하고자 하는 결과의 기본이 되는 가설에 접근하고 가설을 검증할 수 있습니다.

- 가설을 세우기 전 데이터를 이해할 수 있습니다.

=> 가장 궁극적인 목적은 데이터가 어떻게 만들어졌는지에 대한 직관적 발전입니다.

​

​

▶ EDA의 대상

EDA의 목표라고 할 수 있는 데이터는 두 가지로 분류할 수 있습니다.

1. Univariate(일변량)

EDA를 통해 파악하려는 변수가 1개인 경우를 말합니다. 데이터를 설명하고 그 안에 어떤 패턴이 존재하는지 찾는 것이 주요 목적입니다.

2. Multi-variate(다변량)

EDA를 통해 파악하려는 변수가 여러개인 경우를 말합니다. 여러 변수들이 어떤 관계를 갖는지 살펴 보는 것이 주요 목적입니다. 여러 변수를 동시에 보기 전에 개별 데이터를 먼저 파악해야 오류 발생을 낮출 수 있습니다.

​

​

▶ EDA의 종류

크게 두 가지로 분류할 수 있습니다.

1. Graphic(시각화)

그래프, 그림을 이용해 데이터를 확인하는 방법입니다.

2. Non-Graphic(비시각화)

그래픽적 요소를 사용하지 않고, 주로 summary-statistics를 통해 데이터를 확인하는 방법입니다.

=> 데이터를 graphic EDA를 통해 시각화하여 확인하면 한눈에 파악할 수 있습니다. 반면에 non-graphic한 방법을 선택한다면 정확한 값을 확인해볼 수 있습니다.

​

​

▶ EDA의 유형

위에서 설명한 대상과 종류에 따라 4가지로 나눌 수 있습니다.

1. Uni-Non Graphic(일변량 비시각화)

주어진 데이터의 분포를 확인하는 것이 주목적입니다. Numeric data 인지, Categorical data인지에 따라 확인할 수 있는 것들이 조금 다릅니다.

- Numeric data

● Center(Mean, Median, Mod),

● Spread(Variance, SD, IQR, Range)

● Modality(Peak)

● Shape(Tail, Skewness, Kurtosis)

● Outliers

- Categorical data

●Occurence

●Frequency

●Tabulation

​

2. Uni-Graphic(일변량 시각화)

주어진 데이터를 전체적으로 살펴보는 것이 주목적입니다. Histogram, Pie chart, Stem-leaf plot, Boxplot, QQplot(데이터의 실제 분포와 이론상 분포가 일치하는지 확인하는 방법) 등이 있습니다.

​

3. Multi-Non Graphic(다변량 비시각화)

주어진 둘 이상의 변수 사이의 관계를 확인하는 것이 주 목적입니다. Cross-Tabulation(Categorical data에 사용), Cross-Statistics(Numerical data에 사용, Correlation, Covariance) 등을 사용합니다.

​

4. Multi-Graphic(다변량 시각화)

주어진 둘 이사의 변수 사이의 관계를 전체적으로 살펴보는 것이 주목적입니다.

- Categorical data와 Numeric data 로 Multi-Graphic 으로 EDA를 한다면, Boxplots, Stacked bar, Parallel Coordinate, Heatmap등으로 나타낼 수 있습니다.

- Numeric data와 Numeric data 로 Multi-Graphic 으로 EDA를 한다면, Scatter Plot등으로 나타낼 수 있습니다.

​

​

▶ EDA를 잘 하려면?

- raw data의 description, dictionary를 통해 각 데이터의 행과 열의 의미를 이해해야 합니다.

- 결측치를 잘 처리할 수 있어야 하며, 추가적인 데이터 필터링 기술이 필요합니다.(범주형 데이터를 수치형 데이터로 변환)

- 쉽게 시각화 할 수 있는 기술이 있어야 합니다.

​

​

▶ EDA 직접 해보기

미국 성인 인구조사 데이터 셋을 이용한 소득 예측 데이터를 이용해 kaggle에서 직접 EDA를 해보았습니다. EDA후 모델 훈련, 예측까지 해보겠습니다. 코드는 이곳에서 확인할 수 있습니다.

- 필요 라이브러리 import 및 데이터 읽어오기

import numpy as np 
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib as mpl

train = pd.read_csv('train.csv')

 

- 전체 데이터 살펴 보기

train.head()

​

- 전체 데이터의 통계치 살펴보기

train.describe()

​

​

- Null 데이터 확인하기

import missingno as msno
msno.matrix(train) ##null 데이터 확인

​

​

- 'age' 열 밀도 함수로 확인하기

sns.kdeplot(train['age'])

​

- 'workclass' 확인하기

fig, ax= plt.subplots(1,1,figsize=(12,5))
sns.countplot(data=train, x='workclass', ax=ax)
plt.show()

​

-'race'와 'sex' 사이의 관계 살펴보기

fig, ax= plt.subplots(1,1,figsize=(12,5))
sns.countplot(data=train, x='race', ax=ax, hue='sex')
plt.show()

​

- 모델에 적합한 input만들기

모델을 통해 예측해야하는 'income' 에 대한 feature는 따로 인코딩하여 저장하겠습니다. '>50K'와 '<=50K'를 각각 1과 0으로 바꿔주겠습니다.

train['income'] = (train['income'] != '<=50K').astype(int)

 

- 'race'와 'sex'에 따른 income의 평균 피벗 테이블로 나타내기

race로 먼저 묶고, sex로 묶은 다음 평균을 낸것입니다.

train.groupby(['race', 'sex'])[['income']].mean().style.background_gradient(cmap='Purples')

위와 동일한 내용을 pandas를 이용해 해보겠습니다.

pd.pivot_table(train, columns='sex', index='race', values='income',aggfunc='mean')

​

- 데이터의 분포 확인하기

fig, ax=plt.subplots(1,1, figsize=(10,6))
sns.boxplot(data=train, x='race', y='age', hue='sex')

sns.violinplot(data=train, x='race', y='age')

 

 

- numeric data에 대한 상관 계수( 두 변수 사이의 통계적 관계)를 표와 heatmap으로 확인해보기

train.corr() ## 상관계수(숫자형 데이터)
train.corr().style.background_gradient(cmap='coolwarm')

# 다양한 heapmap
sns.heatmap(corr)
sns.heatmap(corr, square=True, linecolor='white', linewidth='0.1', cmap='coolwarm',
           vmax=1.0, vmin=-1.0)

​

​

 

- 라벨 인코딩

from category_encoders.ordinal import OrdinalEncoder
LE_encoder = OrdinalEncoder(list(train.columns))# 모든 컬럼에 대해 인코딩 진행
train_le = LE_encoder.fit_transform(train, target)
test_le = LE_encoder.transform(test)

 

- 모델 학습하기

Decision Tree를 이용해 학습 해보겠습니다.

from sklearn.tree import DecisionTreeClassifier
dt_clf = DecisionTreeClassifier()
dt_clf.fit(train_le, target)

 

- 테스트 셋을 이용해 예측하기

dt_clf.predict(test_le)

 

 

​

참고 : https://velog.io/@yuns_u/EDA-Exploratory-Data-Analysis

728x90
반응형
저작자표시 (새창열림)

'AI Research > Data Analysis' 카테고리의 다른 글

[데이터 분석] Feature Engineering (Sklearn)  (0) 2023.03.05
[데이터 분석] Data Preprocessing (Pandas)  (0) 2023.03.05
[데이터 분석] 자주 쓰이는 라이브러리 함수(Pandas)  (2) 2023.03.05
'AI Research/Data Analysis' 카테고리의 다른 글
  • [데이터 분석] Feature Engineering (Sklearn)
  • [데이터 분석] Data Preprocessing (Pandas)
  • [데이터 분석] 자주 쓰이는 라이브러리 함수(Pandas)
ga.0_0.ga
ga.0_0.ga
    반응형
    250x250
  • ga.0_0.ga
    ##뚝딱뚝딱 딥러닝##
    ga.0_0.ga
  • 전체
    오늘
    어제
    • 분류 전체보기 (181)
      • Paper Review (51)
        • Video Scene Graph Generation (6)
        • Image Scene Graph Generation (18)
        • Graph Model (5)
        • Key Information Extraction (4)
        • Fake Detection (2)
        • Text to Image (1)
        • Diffusion Personalization (4)
        • etc (11)
      • AI Research (49)
        • Deep Learning (30)
        • Artificial Intelligence (15)
        • Data Analysis (4)
      • Pytorch (10)
      • ONNX (5)
      • OpenCV (2)
      • Error Note (34)
      • Linux (2)
      • Docker (3)
      • Etc (7)
      • My Study (16)
        • Algorithm (10)
        • Project (4)
        • Interview (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    i3d
    linear regression
    HRNet
    활성화 함수
    contiguous
    Activation Function
    Inductive bias
    dataloader
    알고리즘
    TypeError
    tensorflow
    fine tuning
    dataset
    그래프신경망
    Logistic regression
    오차 역전파
    차원의 저주
    나이브 베이즈 분류
    forch.nn.functional
    pandas
    ONNX
    JNI
    torch.nn
    pytorch
    정규화
    RuntimeError
    3dinput
    transformer
    permute
    GCN
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
ga.0_0.ga
[데이터 분석] EDA(Exploratory Data Analysis)
상단으로

티스토리툴바