import plotly.express as px
# 예시 데이터 생성
= {
data 'Class':['Class 1', 'Class 1', 'Class 2', 'Class 2', 'Class 2', 'Class 3', 'Class 3', 'Class 3', 'Class 3', 'Class 3'],
'Study Hours': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'Exam Score': [50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
}
# 산점도 그리기
= px.scatter(
fig
data,='Study Hours',
x='Exam Score',
y='Class',
text='Class',
color='Study Hours vs Exam Score',
title={'Study Hours': 'Study Hours (hrs)', 'Exam Score': 'Exam Score (%)'})
labels
fig.show()
Scatter Plot
Plotly로 산점도(Scatter Plot) 그리기
데이터 분석과 시각화는 데이터를 이해하고 의사 결정을 내리는 데 필수적인 과정입니다. 이 중에서도 산점도(Scatter Plot)는 두 변수 간의 관계를 시각화할 때 가장 유용한 도구 중 하나입니다. 이 글에서는 산점도의 특징, 어떤 데이터에 적합한지, 그리고 Plotly를 사용해 산점도를 그리는 방법을 다양한 예시와 함께 설명하겠습니다.
1. 산점도의 특징
산점도는 데이터를 2차원 평면에 점으로 표현하여 두 변수 간의 관계를 시각적으로 나타냅니다. 각 점은 두 변수의 관측값 쌍을 나타내며, 보통 X축과 Y축에 각각 하나의 변수를 배치합니다. 산점도를 이용하면 아래와 같은 데이터 분석을 할 수 있습니다.
- 패턴과 관계 파악: 산점도는 두 변수 간의 상관관계(양의 상관, 음의 상관 또는 무상관)를 시각적으로 확인하는 데 매우 유용합니다.
- 분포의 확인: 데이터를 통해 특정 패턴(직선, 곡선 등)이나 이상치(Outliers)를 쉽게 식별할 수 있습니다.
- 클러스터링: 데이터가 여러 집단(Cluster)으로 나뉘어 있는지 확인할 수 있습니다.
2. 산점도를 사용하기 좋은 데이터
산점도는 주로 다음과 같은 데이터 분석을 위해 사용됩니다.
- 두 변수 간의 관계를 분석하고자 할 때: 예를 들어, 학생들의 공부 시간(X)과 시험 점수(Y) 간의 관계를 파악할 때.
- 분포를 시각화할 때: 특정 변수의 값이 어떻게 분포되어 있는지 확인할 때 유용합니다.
- 이상치 탐지: 데이터에서 정상 범위를 벗어나는 값이 있는지 확인할 때.
- 클러스터 분석: 데이터가 여러 그룹으로 나뉘어 있는지 파악하고자 할 때.
산점도는 데이터가 어떻게 그룹화되어 있는지 시각적으로 확인할 수 있게 해줍니다. 특정 영역에 점들이 모여 있으면, 그 데이터가 특정한 그룹이나 클러스터를 형성하고 있음을 의미합니다.
3. Plotly로 산점도 그리기
이제 Plotly를 사용하여 산점도를 그리는 방법을 단계별로 살펴보겠습니다. Plotly의 px.scatter
함수를 사용하면 매우 간단하게 산점도를 만들 수 있습니다.
위 코드에서는 Study Hours
(공부 시간)와 Exam Score
(시험 점수) 간의 관계를 시각화한 산점도를 그렸습니다. title
과 labels
옵션을 통해 그래프의 제목과 축 라벨을 설정할 수 있습니다.
text
는 점에 표시될 글자를 표현하고 color
는 서로 다른 색으로 표현할 데이터를 위한 정보를 제공합니다. 3개의 Class 그룹이 서로 다른 색으로 표현됩니다.
4. 다양한 예시를 통한 산점도 활용
산점도는 다양한 데이터 유형에 적용할 수 있습니다. 몇 가지 예를 들어보겠습니다.
키와 몸무게 간의 관계
사람들의 키와 몸무게 간의 관계를 시각화하면, 이 두 변수 간의 상관관계를 쉽게 파악할 수 있습니다.
import plotly.express as px
# 예시 데이터 생성
= {
data 'Height(cm)': [150, 160, 165, 170, 175, 180, 185, 190],
'Weight(kg)': [50, 55, 60, 70, 75, 80, 85, 90]
}
# 산점도 그리기
= px.scatter(data, x='Height(cm)', y='Weight(kg)',
fig ='Height vs Weight',
title={'Height(cm)': 'Height (cm)', 'Weight(kg)': 'Weight (kg)'})
labels
fig.show()
5. Plotly 산점도의 주요 기능
Plotly의 산점도는 단순한 점 그래프에 그치지 않고 다양한 시각적 표현을 추가할 수 있습니다. 주요 기능들을 살펴보겠습니다.
색상으로 그룹 구분
데이터 포인트를 특정 그룹별로 색상으로 구분할 수 있습니다. 이 기능은 데이터의 카테고리나 클래스를 시각적으로 분류할 때 유용합니다.
import plotly.express as px
# 예시 데이터
= {
data 'X': [1, 2, 3, 4, 5, 6],
'Y': [10, 15, 13, 17, 22, 19],
'Category': ['A', 'B', 'A', 'B', 'A', 'B']
}
# 카테고리에 따른 색상 구분
= px.scatter(data, x='X', y='Y', color='Category', title='Scatter Plot with Color Grouping')
fig fig.show()
Category에 따라 다른 색으로 점을 표시하여 데이터의 그룹을 시각적으로 구분합니다. 데이터가 색을 통해서 구분이 가능합니다.
점의 크기 조절
데이터 포인트의 크기를 다른 변수에 따라 다르게 설정할 수 있습니다. 이 기능은 세 번째 변수를 시각화하는 데 유용합니다.
import plotly.express as px
# 가상 데이터
= {
data 'City': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix'],
'Population': [8419600, 3980400, 2716000, 2328000, 1690000],
'Area': [789, 1214, 589, 1651, 1340], # km^2
}
# 인구 밀도 계산
'Density'] = [data['Population'][i] / data['Area'][i] for i in range(len(data['City']))]
data[
# 산점도 그리기
= px.scatter(data, x='Area', y='Density', size='Population', hover_name='City',
fig ='City Area vs Population Density',
title= 'City',
text = 'City',
color ={'Area': 'City Area (km²)', 'Density': 'Population Density (people/km²)'})
labels
fig.show()
x축
Area는 도시의 면적, y축
Population Density는 인구 밀도(= 인구 / 면적)입니다 점의 크기는 각 도시의 인구를 나타내도록 설정하겠습니다.
x축
을 이용하면 도시의 면적의 차이를 알 수 있습니다. Chicago
가 가장 작은 면적입니다. y축
을 이용해서 New York
이 가장 높은 인구 밀도는 갖는 것을 알 수 있습니다.
가장 큰 점의 크기를 갖는 New York
이 인구가 가장 많으며 Phoenix
의 인구가 가장 작은 걸 알 수 있습니다.
점과 선을 연결
이 예시에서는 가상의 데이터셋을 사용하여 세계 주요 도시의 GDP, 인구, 대륙 간의 관계를 시각화합니다.
import plotly.express as px
# 가상 데이터
= {
data 'City': ['New York', 'Los Angeles', 'Tokyo', 'London', 'Paris', 'Shanghai', 'Mumbai'],
'GDP': [1700, 1040, 1650, 835, 764, 550, 310], # GDP in billions of USD
'Population': [8419600, 3980400, 13929000, 8982000, 2148000, 24150000, 20411000], # Population in millions
'Continent': ['North America', 'North America', 'Asia', 'Europe', 'Europe', 'Asia', 'Asia'],
'Year': [2024, 2024, 2024, 2024, 2024, 2024, 2024] # Year for ordering
}
# 산점도 그리기
= px.scatter(data, x='GDP', y='Population', size='GDP', color='Continent',
fig ='City', text='City', title='World Major Cities: GDP vs Population',
hover_name={'GDP': 'GDP (Billions of USD)', 'Population': 'Population (Millions)'},
labels=60) # 점의 최대 크기 설정
size_max
='lines+markers+text', textposition='top center')
fig.update_traces(mode fig.show()
px.scatter() 함수에 사용된 옵션을 정리합니다.
fig = px.scatter(data, x='GDP', y='Population', size='GDP', color='Continent',
hover_name='City', text='City', title='World Major Cities: GDP vs Population',
labels={'GDP': 'GDP (Billions of USD)', 'Population': 'Population (Millions)'},
size_max=60) # 점의 최대 크기 설정
CODE | 설명 |
---|---|
x=‘GDP’ | X축에 GDP 값을 설정합니다. |
y=‘Population’ | Y축에 인구 값을 설정합니다. |
size=‘GDP’ | 각 데이터 점의 크기를 GDP 값에 비례하도록 설정합니다. GDP가 클수록 점의 크기가 큽니다. |
color=‘Continent’ | 데이터 점의 색상을 도시가 속한 대륙별로 구분합니다. 대륙마다 다른 색으로 표시됩니다. |
hover_name=‘City’ | 마우스를 데이터 점 위에 올리면 도시 이름이 나타납니다. |
text=‘City’ | 각 데이터 점에 도시 이름을 레이블로 표시합니다. |
title | 그래프의 제목을 설정합니다. |
labels | X축과 Y축의 라벨을 지정합니다. |
size_max=60 | 점의 최대 크기를 설정합니다. 이 값을 통해 시각적으로 점이 너무 커지지 않도록 조절합니다. |
='markers+text', textposition='top center') fig.update_traces(mode
CODE | 설명 |
---|---|
mode=‘lines+markers+text’ | 각 데이터 점을 선으로 연결합니다. 이 기능은 데이터의 순서를 시각화하거나, 시간의 흐름에 따른 변화를 나타낼 때 유용합니다. |
textposition=‘top center’ | 텍스트 레이블의 위치를 점의 위쪽 중앙에 표시하도록 설정합니다. |
5. 결론
산점도는 두 변수 간의 관계를 명확히 이해할 수 있는 매우 유용한 도구입니다. Plotly를 사용하면 이 산점도를 쉽게 만들고, 다양한 데이터에 적용하여 분석할 수 있습니다.
또한 Plotly의 상호작용 기능을 활용하면, 마우스 오버로 세부 정보를 확인하거나 축을 확대/축소하는 등 데이터 탐색이 훨씬 더 편리해집니다.