import numpy as np
import pandas as pd
import plotly.express as px
# 데이터 생성 (샘플 데이터: x와 y가 양의 상관관계를 가짐)
42)
np.random.seed(= np.random.rand(100)
x = 2 * x + np.random.normal(0, 0.1, 100)
y
# pandas DataFrame으로 변환
= pd.DataFrame({'x': x, 'y': y})
df
# 산점도 생성
= px.scatter(df, x='x', y='y', title='Scatter Plot of Correlation between X and Y',
fig ={'x': 'Variable X', 'y': 'Variable Y'},
labels='ols') # 선형 회귀선 추가
trendline
# 그래프 출력
fig.show()
상관관계(Correlation) 분석
1. 상관관계란?
상관관계(Correlation)는 두 변수 간의 선형적 관계를 나타내는 통계적 개념입니다. 두 변수 사이의 연관성의 강도와 방향을 나타내며, 상관계수라는 값으로 측정됩니다. 상관관계는 다음과 같이 분류됩니다:
- 양의 상관관계: 한 변수가 증가하면 다른 변수도 증가하는 관계 (예: 공부 시간과 시험 성적).
- 음의 상관관계: 한 변수가 증가하면 다른 변수는 감소하는 관계 (예: 운동 시간과 체중).
- 상관관계가 없음: 두 변수 사이에 선형적인 관계가 없는 경우.
2. 상관계수
상관계수(Correlation Coefficient)는 -1에서 1 사이의 값을 가집니다: - +1: 완벽한 양의 상관관계. - 0: 상관관계 없음. - -1: 완벽한 음의 상관관계.
가장 많이 사용되는 상관계수는 피어슨 상관계수(Pearson Correlation Coefficient)로, 두 변수 간의 선형적 관계를 측정합니다.
3. 상관관계 분석의 중요성
상관관계 분석은 데이터 분석에서 중요한 역할을 합니다. 변수들 간의 관계를 파악함으로써, 어떤 변수들이 중요한지, 또는 변수 간의 잠재적 패턴을 발견할 수 있습니다. 예를 들어, 마케팅에서 광고 비용과 매출 간의 상관관계를 분석하여 광고가 매출에 미치는 영향을 파악할 수 있습니다.
4. Plotly를 사용한 상관관계 시각화
이제 Python의 Plotly 라이브러리를 사용하여 상관관계를 시각화하는 방법을 알아보겠습니다. 주로 산점도(Scatter Plot)와 상관 행렬(Correlation Matrix)을 사용하여 상관관계를 시각화할 수 있습니다.
4.1. 필요한 라이브러리 설치
먼저 plotly
와 데이터 처리를 위한 pandas
, numpy
, 그리고 상관계수를 계산하는 seaborn
라이브러리가 필요합니다. 아래 명령어로 설치할 수 있습니다.
pip install plotly pandas numpy seaborn
4.2. 산점도를 이용한 상관관계 시각화
산점도는 두 변수 간의 상관관계를 시각적으로 확인할 수 있는 가장 기본적인 방법입니다. 다음은 Plotly를 사용해 산점도를 생성하는 예제입니다.
코드 설명:
- 데이터 생성:
x
와y
가 양의 상관관계를 갖도록 샘플 데이터를 생성했습니다. - 산점도 생성:
px.scatter
함수를 사용하여 두 변수 간의 산점도를 그립니다.trendline='ols'
옵션을 사용하여 선형 회귀선을 추가하면 두 변수 간의 관계를 더욱 명확히 볼 수 있습니다.
4.3. 상관 행렬을 이용한 시각화
여러 변수 간의 상관관계를 한눈에 보기 위해 상관 행렬(Correlation Matrix)을 사용합니다. 이 행렬은 각 변수 간의 상관계수를 계산하여, 이를 색상으로 표현합니다.
다음은 상관 행렬을 시각화하는 코드입니다:
import seaborn as sns
import plotly.graph_objects as go
# 데이터 생성 (여러 변수 간 상관관계를 위한 샘플 데이터)
= pd.DataFrame({
data 'A': np.random.rand(100),
'B': np.random.rand(100),
'C': np.random.rand(100),
'D': np.random.rand(100)
})
# 상관계수 계산
= data.corr()
corr_matrix
# Heatmap (상관 행렬) 시각화
= go.Heatmap(
heatmap =corr_matrix.values,
z=corr_matrix.columns,
x=corr_matrix.columns,
y='Viridis'
colorscale
)
# 레이아웃 설정
= go.Layout(
layout ='Correlation Matrix Heatmap',
title=dict(title='Variables'),
xaxis=dict(title='Variables')
yaxis
)
# 그래프 생성 및 출력
= go.Figure(data=[heatmap], layout=layout)
fig fig.show()
코드 설명:
- 상관 행렬 계산:
data.corr()
를 사용하여 데이터의 상관계수를 계산합니다. - Heatmap 시각화:
go.Heatmap
을 사용하여 상관 행렬을 히트맵(Heatmap)으로 시각화합니다. 색상이 변수 간의 상관관계를 나타내며,colorscale
을 통해 색상표를 설정할 수 있습니다.
4.4. 상관계수 계산 및 해석
위 코드에서 계산된 상관계수는 -1에서 1 사이의 값을 가집니다. 예를 들어, 상관계수가 0.8 이상이면 두 변수는 강한 양의 상관관계를, -0.8 이하이면 강한 음의 상관관계를 가집니다. 상관계수가 0에 가까울수록 상관관계가 약하거나 없습니다.
5. 상관관계 분석의 활용 사례
- 마케팅 분석: 광고 비용과 매출 간의 상관관계를 분석하여 어떤 마케팅 캠페인이 효과적인지 평가할 수 있습니다.
- 의료 데이터 분석: 특정 약물 복용량과 환자 회복률 간의 상관관계를 분석하여 약물의 효과를 확인할 수 있습니다.
- 주식 시장 분석: 여러 주식 간의 상관관계를 분석하여 포트폴리오를 다양화하거나 위험을 관리할 수 있습니다.