분산형 차트 만들기: Python으로 데이터 시각화

파이썬으로 분산형 차트 그리기
( 파이썬으로 분산형 차트 그리기 )

여러 데이터 간의 관계를 한눈에 파악하고 싶으신가요? 그럴 때 분산형 차트(Scatter Plot)가 제격입니다. 특히, 범주별로 색상을 달리하고, 추세선까지 추가하면 복잡한 데이터도 쉽게 이해할 수 있답니다.

이 글에서는 분산형 차트 그리기를 Pythonmatplotlibnumpy를 사용해 단계별로 설명합니다. 더불어 추세선 추가, 스타일 적용 등 실무에서 자주 쓰이는 팁도 포함되어 있으니 놓치지 마세요!

분산형 차트란?

분산형 차트 이용 인사이트

분산형 차트는 두 변수 간의 관계를 시각적으로 나타내는 강력한 도구입니다. X축과 Y축에 데이터를 배치하고 각 점의 위치가 특정 데이터를 표현합니다.

분산형 차트를 사용하면 다음과 같은 인사이트를 얻을 수 있습니다:

  • 변수 간의 상관관계(양의 상관관계, 음의 상관관계, 무관계).
  • 데이터의 패턴 및 군집.
  • 이상치(Outlier) 탐지.

Python으로 분산형 차트 그리기

아래 코드는 범주형 데이터별로 구분된 분산형 차트를 그리며, 추세선도 함께 추가합니다.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc

# 한글 폰트 설정
rc('font', family='HCR Dotum')

# 임의의 데이터 생성
np.random.seed(42)
x = np.random.normal(0, 1, 100)
y = x * 0.5 + np.random.normal(0, 0.5, 100)
categories = np.random.choice(['A', 'B', 'C'], 100)

# 그래프 스타일 설정
plt.style.use('ggplot')  # ggplot 스타일로 변경
plt.figure(figsize=(10, 6))

# 범주별로 다른 색상으로 산점도 생성
for category in np.unique(categories):
    mask = categories == category
    plt.scatter(x[mask], y[mask], 
                label=category, 
                alpha=0.6, 
                s=100)

# 추세선 추가
z = np.polyfit(x, y, 1)
p = np.poly1d(z)
plt.plot(x, p(x), "r--", alpha=0.8)

# 그래프 꾸미기
plt.title("Scatter Plot with Trend Line", pad=20)
plt.xlabel("X Variable")
plt.ylabel("Y Variable")

# 그리드 추가
plt.grid(True, linestyle='--', alpha=0.7)

# 범례 표시
plt.legend(title="Categories", loc='upper left')

# 축 범위 설정
plt.xlim(min(x)-0.5, max(x)+0.5)
plt.ylim(min(y)-0.5, max(y)+0.5)

# 그래프 저장 및 표시
plt.savefig('scatter_plot.png', dpi=300, bbox_inches='tight')
plt.show()

코드 해설

  1. 라이브러리 임포트:
    • numpy: 데이터를 생성하고 연산에 활용.
    • matplotlib.pyplot: 분산형 차트를 생성하는 주요 도구.
  2. 한글 폰트 설정: rc('font', family='HCR Dotum')
    • 차트 제목 및 레이블을 한글로 표시하기 위해 폰트를 설정합니다.
  3. 데이터 생성: np.random.seed(42) x = np.random.normal(0, 1, 100) y = x * 0.5 + np.random.normal(0, 0.5, 100) categories = np.random.choice(['A', 'B', 'C'], 100)
    • x: 평균 0, 표준편차 1의 정규분포에서 생성된 데이터.
    • y: x와 선형 관계를 가지며 약간의 노이즈 추가.
    • categories: A, B, C 중 하나의 범주를 랜덤하게 부여.
  4. 범주별 산점도 생성: for category in np.unique(categories): mask = categories == category plt.scatter(x[mask], y[mask], label=category, alpha=0.6, s=100)
    • 각 범주(A, B, C)에 대해 다른 색상으로 산점도를 생성.
  5. 추세선 추가: z = np.polyfit(x, y, 1) p = np.poly1d(z) plt.plot(x, p(x), "r--", alpha=0.8)
    • np.polyfit: X와 Y 간의 선형 회귀를 계산.
    • np.poly1d: 회귀 다항식을 생성해 추세선으로 표현.
  6. 스타일 및 시각적 요소 설정:
    • 제목, X/Y축 레이블 설정: plt.title("Scatter Plot with Trend Line", pad=20) plt.xlabel("X Variable") plt.ylabel("Y Variable")
    • 범주 설명은 범례(plt.legend)로 제공.
  7. 저장 및 출력: plt.savefig('scatter_plot.png', dpi=300, bbox_inches='tight') plt.show()
    • 고해상도로 차트를 저장(scatter_plot.png)하고 출력.

분산형 차트의 활용

1. 변수 간 상관관계 분석

  • 양의 상관관계: X가 증가하면 Y도 증가하는 패턴.
    • 예: 광고비(X)가 증가하면 매출(Y)이 증가하는 경우.
  • 음의 상관관계: X가 증가하면 Y는 감소하는 패턴.
    • 예: 가격(X)이 높아지면 판매량(Y)이 감소하는 경우.
  • 무관계: X와 Y 사이에 아무런 관계가 없는 경우.
    • 예: 특정 지역의 날씨와 해당 지역에서 소비되는 인터넷 트래픽.

분산형 차트를 통해 상관관계를 직관적으로 파악할 수 있으며, 이를 기반으로 더 깊은 데이터 분석을 수행할 수 있습니다.

2. 데이터 분포 및 군집 탐지

  • 데이터 군집 확인
    분산형 차트는 데이터가 특정 구간에 집중되어 있는지(군집) 확인하는 데 효과적입니다.
    • 예: 고객 연령대(X)와 구매 빈도(Y)를 산점도로 표현했을 때, 특정 연령대의 고객이 더 자주 구매하는 패턴을 발견할 수 있습니다.
  • 이상치 탐지(Outlier Detection)
    이상치 데이터는 다른 데이터와 현저히 다른 패턴을 보입니다. 분산형 차트에서 눈에 띄는 외곽의 점으로 표시되므로, 이상치를 시각적으로 쉽게 탐지할 수 있습니다.

3. 데이터 분류 및 범주 시각화

  • 데이터가 여러 범주(Category)로 나뉘어 있을 경우, 분산형 차트는 이를 효과적으로 표현합니다.
    • 예: 제품 카테고리(A, B, C)에 따른 매출(X)과 고객 만족도(Y)를 산점도로 표현하면, 각 카테고리의 특성을 색상으로 구분하여 파악할 수 있습니다.
  • 범주별로 데이터 패턴을 분석해, 특정 카테고리가 다른 카테고리보다 더 우수한 성과를 보이는지 확인할 수 있습니다.

4. 회귀 분석 및 예측 모델링

  • 추세선 추가: 분산형 차트에 추세선을 추가하면 데이터 간의 관계를 더 명확히 분석할 수 있습니다.
    • 예: 주거 지역(X)과 주택 가격(Y)을 산점도로 표현한 뒤, 추세선을 추가해 주택 가격의 변화를 시각화.
  • 이러한 추세는 예측 모델을 설계하거나, 데이터를 기반으로 한 의사 결정을 내리는 데 중요한 참고 자료가 됩니다.

5. 마케팅 및 성과 분석

  • 고객 행동 분석
    • 고객의 나이(X)와 월별 구매 횟수(Y)를 표현하여, 어떤 연령대의 고객이 가장 활발하게 활동하는지 확인.
  • 성과 지표 추적
    • 광고 캠페인의 클릭률(X)과 전환율(Y)을 표현해, 어떤 광고가 더 큰 성과를 보이는지 데이터로 설명할 수 있습니다.

정리하기

이 포스트에서는 분산형 차트 그리기를 Python으로 구현하며, 데이터의 관계와 패턴을 시각화하는 방법을 배웠습니다. 추세선과 범주 구분을 통해 데이터를 더 명확히 분석할 수 있었죠.

여러분도 위 코드를 활용해 다양한 데이터를 시각화해 보세요! 데이터 분석의 첫걸음을 Python과 함께 시작해 보는 건 어떨까요? 한 발자국 더 나아가서 파이썬 시각화 능력을 키우시려면 파이썬 시각화로 배우는 도넛 차트 그리기와 중첩 방법 포스트를 확인해보세요!

유사한 게시물