ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [EDA] 탐색적 데이터 분석(Exploratory Data Analysis, EDA)
    Data Analysis/EDA 2020. 9. 30. 00:57

    Table of Contents

    1. Introduction

    2. 탐색적 데이터 분석(EDA)란?

    3. Reference

     

    Introduction

     데이터 분석을 하는 모든 사람들이라면 한번씩 접해볼 수 있는 용어 중 하나인 EDA는 데이터 입수 후에 가장 첫번째 단계이며, 내가 갖고 있는 데이터가 무엇인지 어떻게 생긴 데이터인지 확인할 필요가 있다. 만약 내가 가지고 있는 데이터에 빈칸만 존재한다면, 다음 스텝으로 넘어갈 수 없을 것이다. 따라서, 우리는 데이터 입수 후에 내 데이터에 빈칸이 존재하는지, 아니면 정상 범주에 포함되는 값이 들어가 있는지 확인할 필요가 있다.

     

     이 과정을 강조하고 싶은 이유는 바로 여기에 있다. 실제 프로젝트를 할 경우 수집한 데이터가 정상적으로 잘 쌓여 있는지 아무도 아는 사람이 없다. 데이터 분석 프로젝트가 시작하고, 데이터를 직접 받아서 보는 데이터 분석가는 어떤 데이터를 받은 것인지 모르는 상태에서 시작하게 된다.

     

     이때, 아무 생각 없이 데이터를 분리하여 학습 모델을 생성하게 된다면, 최악의 모델이 완성되는 것이다. 최악의 모델을 가지고 예측 또는 분류를 할 경우 성능이 높을 것이라곤 할 수 없다. 다시 데이터가 문제가 있는지 찾아보게 될 것이다. 이 과정에서 내가 가지고 있는 데이터가 쓰레기였음을 판단하는 순간, 이 프로젝트는 망했구나라고 생각이 들 것이다.

    <그림 1> MBC 예능 무한도전의 미래 예능 연구소편

     

    탐색적 데이터 분석(EDA)란?

     [Visualization] 데이터 시각화(Data Visualization)에서 소개했던 미국의 수학자, 존 튜키(John Wilder Tukey)는 탐색적 데이터 분석 방법을 제시한 인물이다. 앞서 데이터에 대한 파악 없이 모델을 생성하고, 이를 활용했던 것과 같은 끔찍한 일을 막기 위해서 필요한 과정이다. 그렇다면, EDA에서는 어떤 것들을 살펴봐야 할까? 샘플 데이터를 이용해서 확인해보자.

    K리그.xlsx
    0.05MB

    CASE 1. 변수의 유형이 무엇인가?

     시즌 변수에는 2020이라고 입력되어 있다. 이는 수치로 입력되었으나, 실제로는 2020의 수치에 대한 의미가 없고 2020시즌을 의미하는 것을 알 수 있다. 이러한 경우 시즌이라는 변수를 수치형 변수로 활용하는 것이 아니라 명목형 변수로 활용해야 한다.

     반면, 명목형 변수로 입력되어 있을지라도 실제로는 순서가 있을 수 있다. 예를 들어 선수별 슈팅 정확도를 상, 중, 하로 표현했다고 하자. 이때, 슈팅 정확도가 '상'인 선수는 '중'인 선수보다 등급이 높다. 즉,  슈팅 정확도 변수에서는 순서가 존재할 수 있으며, 이를 활용하기 위해서 더미변수를 만들어야 한다. 더미변수란, 실제 존재하는 변수는 아니지만 데이터를 상세 정의하기 위한 가변수이다. 이 변수를 만드는 방법에는 원핫 인코딩(One-hot Encoding)이나 RANK로 치환할 수 있다.

    구단 선수명 시즌 출장 어시스트 슈팅
    강원FC 가솔현 2020 0 0 0 0
    광주FC 김태곤 2020 0 0 0 0
    대구FC 고태규 2020 0 0 0 0
    부산아이파크 박경민 2020 0 0 0 0
    상주상무 박지민 2020 0 0 0 0
    서울FC 김원균 2020 0 0 0 0
    성남FC 김근배 2020 0 0 0 0
    수원삼성 안찬기 2020 0 0 0 0
    울산현대 김민덕 2020 0 0 0 0
    인천유나이티드 김유성 2020 0 0 0 0
    전북현대 김정훈 2020 0 0 0 0
    포항스틸러스 김주환 2020 0 0 0 0

     

    CASE 2. Null(결측값)이야? 0이야?

     위 데이터를 살펴보면, 모든 선수들의 출장, 골, 어시스트, 슈팅이 0으로 되어 있다. 이 값이, 측정이 안되서 들어온 값으로 판단해야할 것인가 아니면 2020시즌 출장을 전혀 안해서 나온 데이터인지에 대한 판단이 필요하다. 데이터 분석을 위한 플랫폼인 Kaggle이나 DACON 등에서는 데이터를 친절하게 설명해주고 있다. 그러나 실제 현장에서 데이터에 대한 설명이 전혀 없기 때문에 이와 같은 판단을 신중하게 해야 한다.

     

    CASE 3. 우리 데이터가 가지고 있는 변수는 어떻게 분포하지?

     R에서는 각 변수별로 어떤 값이 담겨 있는지, 어떤 분포를 하고 있는지 확인하기 위해서 다양한 라이브러리 혹은 함수를 활용해서 탐색할 수 있다. 한 눈에 보기 위해서 데이터 시각화를 활용하게 된다. 변수에 담긴 정보의 빈도를 표현하기 위해서 막대 그래프를 활용한다거나 얼마나 많은 비중을 차지하고 있는지 파악하기 위해서, 누적 막대그래프 혹은 파이차트 등을 확인할 수 있다.

     조금 더 생각의 폭을 확장하기 위해선, 일변량의 변수를 활용하는 것에서 멈추는 것이 아니라 이변량, 삼변량의 변수를 활용하여 다각도로 데이터의 분포를 확인할 필요가 있다. 이때, 산점도를 활용하여 데이터의 분포를 확인할 수 있다.

    library(xlsx)
    library(ggplot2)
    
    ###excel 파일로드
    k_league = read.xlsx("K리그.xlsx", sheetIndex = 1, encoding = "UTF-8", as.data.frame = T)
    
    ###ggplot2를 활용한 데이터 시각화
    ggplot(k_league, aes(구단)) +
      geom_bar(fill = "steelblue") +
      theme_minimal()

    <그림 2> 구단별 데이터 수 시각화 결과

     

    CASE 4. 변수들을 조합해서 볼 수 없을까?

     단일차원의 변수를 활용해서 긍정적인 인사이트를 얻기는 쉽지 않다. 우리는 데이터로부터 다양한 조합과 관계를 통해 다양하게 질문을 던질 수 있어야 하며, 이를 위해선 이변량, 삼변량의 데이터를 함께 볼 필요가 있다. 예를 들면, "구단에 따라 선수들의 득점 분포가 차이가 있는가?" 라는 질문에 답을 하기 위해서는 구단별 득점 정보를 시각화해야 한다. 이때, 박스 플랏(Box Plot)을 활용한다면 파악하기 좋을 것이다.

    ###Box Plot을 이용하여 데이터 시각화
    ggplot(k_league, aes(구단)) +
      geom_boxplot(aes(y = 골)) +
      theme_minimal()

    <그림 3> 구단별 득점 분포를 시각화한 결과

     

    CASE 5. 통계적 검정이 필요한가? 예측 모형이 필요한가?

     Case1부터 4까지 진행하면서 데이터에 대한 이해도가 높아졌을 것이며, 어떤 분석을 할 것인지 분석의 목적을 조금씩 결정하게 될 것이다. 이때, 우리는 통계적 검정을 통해 내가 주장하고자 하는 의견의 설명력을 높일 것인지 혹은 현재 데이터를 활용해서 예측 모형을 만들것인지 결정해야 한다. 이러한 결정을 하기 위해서는 해당 도메인에 대한 지식이 상당하게 축적되었을 경우에 데이터 분석의 퍼포먼스가 결정된다.

     

    Reference

    이제현 박사, "빅데이터 in Reality" ,youtu.be/4uxCLBKwmOM?t=5007

    Jay, "[Visualization] 데이터 시각화(Data Visualization)", jaydata.tistory.com/58

    R Package, "ggplot2", ggplot2.tidyverse.org/reference/geom_bar.html

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

    [EDA] 똑똑하게 EDA하기  (1) 2020.10.31

    댓글

Designed by Tistory.