import plotly.express as px
import pandas as pd
# 예제 데이터 생성
= {
data 'Country': ['USA', 'China', 'India', 'Germany', 'UK'],
'GDP': [21.43, 14.34, 2.87, 3.86, 2.83], # 단위: 조 달러
'Population': [331, 1441, 1380, 83, 68], # 단위: 백만 명
'Life Expectancy': [78.9, 76.7, 69.7, 81.2, 81.3] # 단위: 년
}
= pd.DataFrame(data) df
Plotly Bubble Chart 그리기
Bubble Chart(버블 차트)는 데이터의 세 가지 변수 간 관계를 시각적으로 나타내는 데 매우 유용한 도구입니다. 이 차트는 데이터를 X축, Y축, 그리고 버블의 크기(반지름)로 표현하며, 추가적으로 버블의 색상을 통해 네 번째 변수를 시각화할 수도 있습니다.
이 글에서는 Bubble Chart가 효과적인 데이터 유형을 설명하고, Plotly를 사용하여 버블 차트를 구현하는 방법을 예제 코드와 함께 소개하겠습니다.
Bubble Chart를 사용하면 좋은 데이터 유형
Bubble Chart는 다음과 같은 유형의 데이터를 시각화할 때 특히 유용합니다.
- 다변수 데이터: 세 개 이상의 변수를 동시에 시각화하고 비교하고자 할 때.
- 예시: 도시별 인구수, 평균 소득, 실업률 데이터.
- 상대적 비교: 특정 카테고리 간 상대적인 크기나 중요성을 표현하고자 할 때.
- 예시: 각 나라의 GDP(국내총생산), 인구수, 평균수명.
- 관계 및 경향 분석: 변수가 서로 어떤 관계를 가지는지, 또는 경향성을 확인하고자 할 때.
- 예시: 광고비, 판매량, 수익 간의 관계.
Plotly로 Bubble Chart 구현하기
이제 Plotly를 사용하여 Bubble Chart를 구현하는 방법을 예제와 함께 살펴보겠습니다. 예제로는 가상의 데이터셋을 사용하여 각 나라의 GDP, 인구수, 평균 수명을 시각화해보겠습니다.
1. 라이브러리 설치 및 데이터 준비
먼저 필요한 라이브러리를 설치하고 데이터를 준비합니다.
2. Plotly로 Bubble Chart 그리기
이제 plotly.express
를 사용하여 버블 차트를 생성해보겠습니다.
# Bubble Chart 생성
= px.scatter(df,
fig ='GDP',
x='Life Expectancy',
y='Population',
size='Country',
color='Country',
hover_name=60,
size_max="GDP vs Life Expectancy (Bubble Chart)",
title={
labels'GDP': 'GDP (Trillion $)',
'Life Expectancy': 'Life Expectancy (Years)'
})
# 차트 출력
fig.show()
3. 코드 설명
x='GDP'
: X축에 GDP 값을 배치합니다.y='Life Expectancy'
: Y축에 평균 수명을 배치합니다.size='Population'
: 버블의 크기를 인구수로 설정합니다.color='Country'
: 버블의 색상을 각 나라별로 다르게 설정합니다.hover_name='Country'
: 마우스를 올렸을 때 각 나라의 이름이 표시되도록 합니다.size_max=60
: 버블의 최대 크기를 설정합니다.title
: 차트 제목을 지정합니다.labels
: 축의 이름에 단위를 추가합니다.
4. 결과 해석
이 차트를 통해 각 나라의 GDP와 평균 수명 간의 관계를 시각적으로 비교할 수 있습니다. 또한 버블의 크기로 인구수를 표현하여, 인구가 많은 나라가 어떻게 다른 변수와 상관관계를 가지는지를 한눈에 파악할 수 있습니다.
결론
Bubble Chart는 다차원 데이터를 시각화할 때 매우 강력한 도구입니다. 특히 세 개 이상의 변수 간의 관계를 명확하게 드러낼 수 있으며, 버블의 크기와 색상을 활용해 데이터를 더욱 직관적으로 표현할 수 있습니다.
Plotly는 이러한 버블 차트를 간단한 코드로 구현할 수 있도록 도와주며, 인터랙티브한 데이터 시각화를 통해 더욱 풍부한 인사이트를 제공합니다.