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

여러 데이터 간의 관계를 한눈에 파악하고 싶으신가요? 그럴 때 분산형 차트(Scatter Plot)가 제격입니다. 특히, 범주별로 색상을 달리하고, 추세선까지 추가하면 복잡한 데이터도 쉽게 이해할 수 있답니다.
이 글에서는 분산형 차트 그리기를 Python의 matplotlib와 numpy를 사용해 단계별로 설명합니다. 더불어 추세선 추가, 스타일 적용 등 실무에서 자주 쓰이는 팁도 포함되어 있으니 놓치지 마세요!
분산형 차트란?

분산형 차트는 두 변수 간의 관계를 시각적으로 나타내는 강력한 도구입니다. 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()
코드 해설
- 라이브러리 임포트:
numpy: 데이터를 생성하고 연산에 활용.matplotlib.pyplot: 분산형 차트를 생성하는 주요 도구.
- 한글 폰트 설정:
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)x: 평균 0, 표준편차 1의 정규분포에서 생성된 데이터.y:x와 선형 관계를 가지며 약간의 노이즈 추가.categories: A, B, C 중 하나의 범주를 랜덤하게 부여.
- 범주별 산점도 생성:
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)에 대해 다른 색상으로 산점도를 생성.
- 추세선 추가:
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: 회귀 다항식을 생성해 추세선으로 표현.
- 스타일 및 시각적 요소 설정:
- 제목, X/Y축 레이블 설정:
plt.title("Scatter Plot with Trend Line", pad=20) plt.xlabel("X Variable") plt.ylabel("Y Variable") - 범주 설명은 범례(
plt.legend)로 제공.
- 제목, X/Y축 레이블 설정:
- 저장 및 출력:
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과 함께 시작해 보는 건 어떨까요? 한 발자국 더 나아가서 파이썬 시각화 능력을 키우시려면 파이썬 시각화로 배우는 도넛 차트 그리기와 중첩 방법 포스트를 확인해보세요!





