빅데이터 분석결과 해석 및 활용 - 관계 시각화

반응형

 

관계 시각화 정의

  • 데이터 사이의 관계를 시각적으로 표현하는 것
    • 산점도(Scatter Plot), 버블 차트(Bubble Chart), 히트맵(Heat map) 등
  • 데이터셋에 변수가 2개 이상 있을 때, 이 변수들의 상관관계를 표현
  • 예시1) 편의점에서 우유와 빵의 판매량 사이의 관계 표현
  • 예시2) 키와 몸무게 사이의 관계 표현

산점도(스캐터플롯, Scatter Plot)

  • 두 변수의 값을 2차원(또는 3차원) 좌표계를 활용하여 점으로 표시한 것
  • 점들의 집합이 모여서 두 변수 사이의 관계를 표현
  • 두 변수 사이의 다양한 관계 표현 가능
    • 양의 상관관계(비례) : 점이 오른쪽 위로 올라가는 추세
    • 음의 상관관계(반비례) : 점이 오른쪽 아래로 떨어지는 추세
    • 직선관계, 지수관계, 로그관계 등 다양한 상관관계 함수로 유추될 수 있는 관계
  • 점들의 분포에 따라 집중도(강도, 영향력) 확인 가능
  • 관계 추정을 위해 추세선 추가할 수 있음
  • 점의 크기, 형태, 색상 등을 다르게 하여 하나의 산점도에 다양한 데이터의 특징 표현 가능

<음의 상관관계 산점도의 예시>

import plotly.express as px

x = [1, 2, 3, 3, 4, 5, 7, 10, 12, 22, 24, 24, 25, 26, 27, 29, 30, 33, 35, 40]
y = [50, 40, 32, 22, 21, 28, 25, 18, 23, 19, 18, 17, 10, 2, 3, 5, 2, 4, 2, 1]

fig = px.scatter(x, y)
fig.show()

<추세선이 포함된 음의 상관관계 산점도의 예시>

import plotly.express as px

x = [1, 2, 3, 3, 4, 5, 7, 10, 12, 22, 24, 24, 25, 26, 27, 29, 30, 33, 35, 40]
y = [50, 40, 32, 22, 21, 28, 25, 18, 23, 19, 18, 17, 10, 2, 3, 5, 2, 4, 2, 1]

# 추세선 종류(trendline)
## ols : ordinary least square의 약자로 최소자승법으로 회귀 모델
## lowess : locally weighted scatterplot smoothing
## rolling : 기본 이동 평균선
## expanding : Cumulative 이동 평균선
## ewm : exponentially weighted 이동평균선
fig = px.scatter(x, y, trendline="ols")
fig.show()

버블 차트(Bubble Chart)

  • x, y값의 위치를 표시하는 산점도에 점의 위치에 해당하는 제3의 변수값을 원의 크기로 표현한 그래프
    • x축과 y축은 각 요소의 위치, 원의 넓이는 각 요소의 크기를 표현
  • 한 번에 3개의 변수를 비교할 수 있음
  • 제3의 값을 표시하는 원(버블)은 면적으로 표현
    • 반지름이나 지름으로 표현되면 실제 값보다 너무 크게 원이 그려질 수 있어서 주의
  • 국가나 지역에 따른 값의 분포를 표현하는데 유리
    • 예시) 도시별 인구밀집도, 도시별 우유 판매량 등

<버블 차트의 예시, 출처 matplotlib>

import numpy as np
import matplotlib.pyplot as plt

N = 30
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30 * np.random.rand(N))**2  # 0 to 15 point radii

plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.show()

히트맵(Heat Map)

  • 데이터 분포와 관계에 대한 정보를 색(Heat)으로 표현한 그래프
  • 데이터를 식별하기 위해 각각의 칸마다 색으로 수치의 정도를 표현

<히트맵 예시, 출처 위키독스>

import plotly.express as px

z = [[.1, .3, .5, .7, .9],
     [1, .8, .6, .4, .2],
     [.2, 0, .5, .7, .9],
     [.9, .8, .4, .2, 0],
     [.3, .4, .5, .7, 1]]

fig = px.imshow(z, text_auto=True)
fig.show()

참고

반응형