데이터 분석을 시작할 때 가장 처음 하는 일이 탐색적 데이터 분석(EDA, Exploratory Data Analysis) 입니다.  탐색적 데이터 분석을 할 때 데이터 형태와 구조를 파악하고, 많은 요약/기술 통계량도 뽑아보고, 그래프도 그려보면서 데이터의 형태와 특성, 분포 등을 파악하곤 합니다.  즉, 데이터 분석의 시작은 그래프라고 해도 관언이 아니겠습니다.

 

R의 장점 중에 하나가 바로 출판물에 사용해도 좋을 만큼 미적으로도 아름다우면서도 어떤 모양, 조건으로도 그래프를 그려서 인사이트를 뽑아내기에 유용한 다양한 그래프/시각화를 지원한다는 점입니다.  R의 강력한 그래프/시각화 기능 때문에 R을 이용한다고 하는 사용자도 있을 정도니깐요. 

 

 

왜 그래프/시각화가 중요할까요?  

 

1) 그래프/시각화는 숫자나 표보다 직관적으로 이해하기가 쉽습니다. 

 

2) 그래프/시각화가 이해하기 쉬우므로 의사소통하기에도 쉽고 효과적입니다.  마치 몇 페이지의 호소문이나 사설보다 한 장의 역사 사진이 사람들에게 울림이 더 큰 경우가 있듯이요.

 

3) 자칫 통계량만을 뽑아보고 의사결정했을 때 자칫 오류를 범할 수 있는데요, 이때 그래프/시각화를 통해 데이터의 분포, 형태나 변수간의 관계에 대해서 중요한 통찰을 얻을 수 있습니다.

 

 

영국의 통계학자 Francis Anscombe 가 "Graphs in Statistical Analysis"(1973년)라는 논문 (링크를 클릭하면 pdf 다운로드 가능)에서 왜 통계분석을 할 때 반드시 통계량 뿐만 아니라 그래프 분석을 병행해야 하는지를 보여주는 데이터 예를 듭니다.  (x1, y1), (x2, y2), (x3, y3), (x4, y4) 변수들로 구성된 4개 그룹이 있는데요, x1~x4, y1~y4 끼리 평균, 표준편차가 같고,  (x1, y1), (x2, y2), (x3, y3), (x4, y4) 변수들 간의 상관계수와 회귀모형이 같습니다.  이정도면 같은 모집단에서 뽑은 같은 성격/특징/형태를 보이는 4개의 표본이라고 지레짐작하기 쉬운데요, 그래프를 그려보면 4개의 표본이 날라도 너무 달라서 깜짝 놀라게 됩니다.   

 

 

He later became interested in statistical computing, and stressed that "a computer should make both calculations and graphs", and illustrated the importance of graphing data with four data sets now known as Anscombe's quartet

 

* source: https://en.wikipedia.org/wiki/Frank_Anscombe

 

 

 

 

 

R에 base패키지인 datasets 패키지에 'anscombe'라는 데이터 프레임이 기본 탑재되어 있는 데이터 셋이어서 쉽게 불러다가 예시를 들어보겠습니다.  str()함수로 데이터 구조를 보니 8개 변수에 11개 관측치로 구성되어있는 데이터 프레임이고, x1, x2, x3, x4, y1, y2, y3, y4 모두 숫자형(numeric) 변수들이군요.

 

> ## Anscombe's Quartet of ‘Identical’ Simple Linear Regressions > # Four x-y datasets which have the same traditional statistical properties > # (mean, variance, correlation, regression line, etc.), > # yet are quite different. > > # 데이터 구조 > str(anscombe) 'data.frame': 11 obs. of 8 variables: $ x1: num 10 8 13 9 11 14 6 4 12 7 ... $ x2: num 10 8 13 9 11 14 6 4 12 7 ... $ x3: num 10 8 13 9 11 14 6 4 12 7 ... $ x4: num 8 8 8 8 8 8 8 19 8 8 ... $ y1: num 8.04 6.95 7.58 8.81 8.33 ... $ y2: num 9.14 8.14 8.74 8.77 9.26 8.1 6.13 3.1 9.13 7.26 ... $ y3: num 7.46 6.77 12.74 7.11 7.81 ... $ y4: num 6.58 5.76 7.71 8.84 8.47 7.04 5.25 12.5 5.56 7.91 ... >  

 

 

관측치가 11개 밖에 안되므로 모두 불어와 보면 아래와 같습니다. 이처럼 숫자만 봐서는 데이터 분포, 특성, 변수간 관계가 어떠한지 한눈에 안들어오고 이해가 잘 안되지요? 

 

> # 데이터 view
> anscombe
   x1 x2 x3 x4   y1  y2   y3   y4
1  10 10 10  8  8.0 9.1  7.5  6.6
2   8  8  8  8  7.0 8.1  6.8  5.8
3  13 13 13  8  7.6 8.7 12.7  7.7
4   9  9  9  8  8.8 8.8  7.1  8.8
5  11 11 11  8  8.3 9.3  7.8  8.5
6  14 14 14  8 10.0 8.1  8.8  7.0
7   6  6  6  8  7.2 6.1  6.1  5.2
8   4  4  4 19  4.3 3.1  5.4 12.5
9  12 12 12  8 10.8 9.1  8.2  5.6
10  7  7  7  8  4.8 7.3  6.4  7.9
11  5  5  5  8  5.7 4.7  5.7  6.9

 

 

이럴때 보통 기술통계량을 보곤 하지요.  중심화 경향을 나타내는 평균과 퍼짐 정도를 나타내는 표준편차를 살펴보겠습니다.  x1~4x 의 평균과 표준편차가 같고, y1~y4의 평균과 표준편차가 같게 나왔습니다.

 

> # 변수별 평균, 표준편차
> options(digits = 2) # 소수점 자리 설정
> 
> sapply(anscombe, mean) # mean
 x1  x2  x3  x4  y1  y2  y3  y4 
9.0 9.0 9.0 9.0 7.5 7.5 7.5 7.5 
> 
> sapply(anscombe, sd) # standard deviation
 x1  x2  x3  x4  y1  y2  y3  y4 
3.3 3.3 3.3 3.3 2.0 2.0 2.0 2.0 

 

 

이번에는 (x1, y1), (x2, y2), (x3, y3), (x4, y4) 변수들 간의 상관계수를 살펴보겠습니다.  4개 집단 모두 상관계수가 0.82로 동일하게 나왔습니다.

 

> # x, y 상관계수 (x, y correlation)
> attach(anscombe)
> cor(x1, y1)
[1] 0.82
> cor(x2, y2)
[1] 0.82
> cor(x3, y3)
[1] 0.82
> cor(x4, y4)
[1] 0.82
> detach(anscombe) 

 

 

다음으로 4개의 각 집단별로 종속변수 y, 독립변수 x 로 해서 단순회귀모형을 적합시켜보겠습니다.

결과는 4개 집단 모두 y = 3.0 + 0.5*x  로 나왔습니다. (y절편 3.0, 변수 x의 계수 0.5)

 

 

> # Simple Linear Regrassions by 4 groups
> attach(anscombe)
The following objects are masked from anscombe (pos = 3):

    x1, x2, x3, x4, y1, y2, y3, y4

> lm(y1 ~ x1)

Call:
lm(formula = y1 ~ x1)

Coefficients:
(Intercept)           x1  
        3.0          0.5  

> lm(y2 ~ x2)

Call:
lm(formula = y2 ~ x2)

Coefficients:
(Intercept)           x2  
        3.0          0.5  

> lm(y3 ~ x3)

Call:
lm(formula = y3 ~ x3)

Coefficients:
(Intercept)           x3  
        3.0          0.5  

> lm(y4 ~ x4)

Call:
lm(formula = y4 ~ x4)

Coefficients:
(Intercept)           x4  
        3.0          0.5

 

 

위에 살표본 바를 종합해보면,

  • (1) 4개 집단의 x변수들의 평균, 표준편차가 같고, y변수들의 평균, 표준편차가 같습니다.
  • (2) 4개 집단의 x변수와 y변수들 간의 상관계수가 동일합니다.
  • (3) 4개 집단의 x독립변수와 y종속변수간 단순회귀모형 적합결과 x변수 계수와 y절편 값이 같은 동일 모델로 적합되었습니다.

이쯤되면 4개 집단의 x, y 변수 데이트들이 동일한 모집단에서 랜덤하게 추출된 동일한 형태/분포/특성을 지닌 데이터라고 믿어도 되지않겠습니까? 

 

 

그런데, 그게 아닙니다.

 

아래의 4개 그룹별 x변수, y변수 산점도를 살펴보시지요.  그래프를 그려서 눈으로 보니 4개 집단이 다르지요?  통계량들은 이 4개의 집단이 같다고 말하고 있지만, 그래프는 이 4개 집단이 다르다고 말하고 있습니다.  이래서 서양 표현에 "One Look Is Worth A Thousand Words" 말이 있는 거지요.

 

> # Scatter Plot & Simple Linear Regression Line
> par(mfrow = c(2,2)) # 2 x 2 layout
> 
> attach(anscombe)
The following objects are masked from anscombe (pos = 3):

    x1, x2, x3, x4, y1, y2, y3, y4

> 
> plot(x1, y1); abline(lm(y1~x1), col = "blue", lty = 3)
> plot(x2, y2); abline(lm(y2~x2), col = "blue", lty = 3)
> plot(x3, y3); abline(lm(y3~x3), col = "blue", lty = 3)
> plot(x4, y4); abline(lm(y4~x4), col = "blue", lty = 3)
> 
> detach(anscombe)

 

 

 

 

 

시각화가 왜 중요한지, 왜 인사이트를 뽑아내는데 효과적인지, 왜 그동안 몰랐던 사실을 발견하는데 큰 역할을 하는지에 대한 사례를 하나 더 들자면, TED에서 유명인사가 된 한스 로즐링(Hans Rosling)의 Dynamic Visualization 을 들고 싶습니다.  Youtube에서 "TED & Hans Rosling" 이라는 키워드로 검색을 해보면 많은 동영상이 검색이 될거예요.  그중에 하나를 아래에 링크를 걸어놓습니다.  연도별로 그래프가 움직이면서 변화하는데요, 시간이라는 차원을 그래프에 녹여낸 아주 기가 막힌 시각화 방법이 되겠습니다.  거기다가 한스 로즐링의 열정적인 설명까지 곁들여져서 한편의 인상적인 통계학 공연이 완성이 됩니다. ^^

마음 편하게 한번 감상해 보시지요.  (아래 동영상 말고도 한스 로즐링거 많습니다)

 

 

 

 

이밖에도 구글 지도에 매쉬업을 해서 시각화를 한다든지, 소셜 네트워크 분석을 한다든지, 워드 크라우드 분석을 한다든지, 타이타닉 생존자에 대한 모자이크 그림 분석을 한다든지, 회귀분석을 하기 전 변수들 간 산점도 행렬 그래프 분석을 한다든지, 정규성 가정 검증을 위해 Q-Q plot을 그려본다든지, 분포 형태를 파악하기 위해 히스토그램이나 박스그림을 그려본다든지, 등, 등, 등 ... 그래프/시각화가 얼마나 중요한지, 왜 필요한지를 알 수 있는 사례, 예시는 무수히 많습니다.  앞으로 하나씩 차근차근 포스팅을 해나가도록 하겠습니다.

오늘 포스팅의 결론은, "반드시 그래프/시각화를 병행하라!" 가 되겠습니다.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^

 

 

Posted by R Friend Rfriend

댓글을 달아 주세요

  1. 짱모 2021.01.10 19:36  댓글주소  수정/삭제  댓글쓰기

    통계와 R을 배우고 싶어 검색을 하다가 선생님 블로그를 알게 되어
    정말 감사히 배우고 있는 직장인입니다.

    사실 아무것도 알지 못해, 지금까지는 1페이지부터 하나씩 넘기며 따라 하며 얼추 배워가고
    있었습니다. https://rfriend.tistory.com/ 1,2,3 ... -> 65 이런 식으로요.

    모르거나 이해가 안 되는 내용이 나오면 구글링을 통해 파악하고 넘어가는 방식으로
    따라오고 있었습니다. 그런데 이번 페이지부터 갈림길이 생긴 것 같아 질문드리네요.
    (사실 시그널 데이터 변환부턴 무척 어렵더라구요.)

    궁금한 점은
    1. 지금처럼 해왔던 방식으로 페이지를 하나하나 넘겨가며 따라가는 것이 좋을까요?
    2. 통계분석의 내용들을 보면 시각화에 대한 함수들이 포함되어 있는 것 같아 건너뛸 수
    없을 것 같은데, 그렇다면 1. 방식으로 진행을 하는데 통계에 대한 기초가 없으면
    혹시 따라가고 이해하는데 힘들까요?
    따로 공부를 하고 봐야 할지... 시간이 많지 않은 저에게 어떤 선택이 좋을지 모르겠습니다.

    (선형대수 파트는 중간에 보셔야 좋다고 하셔서 전부 봐서 어느 정도 이해하게 되었습니다.)

    • R Friend Rfriend 2021.01.10 20:23 신고  댓글주소  수정/삭제

      안녕하세요 짱모님.
      반갑습니다.

      공부하는 방법에는 왕도가 없는지라 어떻게 말씀을 드려야 할지 좀 어렵네요. ^^'

      제가 블로그 포스팅을 할 때 일반 통계, 기계학습 교과서들 처럼 체계를 갖추어서 순서대로 작성했다기 보다는 제가 필요한 주제나 공부한 주제를 주말에 틈틈히 포스팅했던 것이예요. 그래서 순서대로 포스팅을 읽어나가시다 보면 중간 중간 흐름이 끊기고 주제가 바뀌면서 포스팅이 된게 눈에 뜨일 거예요. 아직까진 글을 많이 쓰지 못해서 통계나 기계학습 전반을 다 커버하지도 못하고 있구요.

      그래서 통계나 기계학습 교과서를 하나 정해서 공부하시는게 체계적으로 공부하시는데 도움이 될거 같습니다.

      시각화는 어려운 이론은 없기 때문에 R이나 Python 시각화 함수 사용법 위주로 빠르게 실습해보고 넘어갈 수 있을 거예요.

      저도 R이나 Python 함수를 매개변수까지 해서 모두 다 기억하고 있지는 못하답니다. 그래서 저도 회사에서 일할 때 R이나 Python 함수 syntax가 기억이 다 안나면 그때 그때 구글링해서 제 블로그 와서 사용법 확인하곤 해요. 업무에 사용하면서 자주 자주 익히는게 제일 좋은 방법인거 같아요.

    • 짱모 2021.01.11 13:48  댓글주소  수정/삭제

      친절하신 답변 감사드립니다.
      책 하나 옆에 두고 병행해야겠네요.