[데이터 시각화 소개] 산점도
산점도(Scatter Plots)
산점도는 기본적으로 두 변수 간의 관계를 점으로 표시하여 이해를 돕는 시각화 기법의 하나입니다. 이는 데이터 내에 존재하는 변수들 간의 상관 관계, 패턴, 추세 등을 식별하는 데 매우 유용합니다.
산점도의 기본 구조 및 생성 방법
산점도에서 각 점은 두 데이터 변수의 한 쌍의 값을 나타냅니다. 이 두 변수는 가로축(x축)과 세로축(y축)에 각각 매핑되어 있으며, 각 점의 위치는 해당 변수의 값에 따라 결정됩니다. 기본적으로 산점도는 데이터 내 변수들 사이의 관계를 파악하고, 데이터 집합에 포함된 개별 관찰 항목을 시각화하는데 사용됩니다.
Seaborn 등을 활용한 산점도 그리기
Python에서는 Seaborn과 같은 라이브러리를 활용하여 손쉽게 산점도를 그릴 수 있습니다. Seaborn은 Matplotlib을 기반으로 더 풍부한 시각화 기능과 간편한 인터페이스를 제공하기 때문에 데이터 시각화에서 매우 인기가 많습니다. 다음은 Seaborn을 사용하여 산점도를 그리는 기본적인 예시 코드입니다.
import seaborn as sns
import matplotlib.pyplot as plt
# 샘플 데이터 로드
tips = sns.load_dataset("tips")
# Seaborn을 사용한 산점도
sns.scatterplot(x="total_bill", y="tip", data=tips)
plt.show()
위 코드에서는 Seaborn에서 기본적으로 제공하는 tips
데이터 세트를 사용하여, 식사 금액(total_bill
)과 팁(tip
) 간의 관계를 산점도로 나타냅니다.
산점도에서의 색상 및 크기 활용: 데이터 포인트의 추가 차원 표현
산점도에서는 색상과 크기를 다르게 하여 데이터 포인트의 추가 정보를 제공할 수 있습니다. 예를 들어, 각 점의 색상을 다르게 설정하여 세 번째 변수의 영향을 시각화할 수 있습니다. 마찬가지로, 점의 크기를 조정하여 데이터 포인트의 중요성이나 또 다른 변수의 값을 나타낼 수 있습니다. Seaborn을 사용하면 이러한 추가 차원을 쉽게 표현할 수 있습니다. 다음은 색상과 크기를 활용한 예시 코드 입니다.
# Seaborn을 사용한 산점도에서 색상과 크기 활용하기
sns.scatterplot(x="total_bill", y="tip", size="size", hue="sex", style="time", data=tips)
plt.legend(title='Key')
plt.show()
이 코드에서는 size
와 hue
인자를 사용하여 점의 크기와 색상을 다르게 하여 각 점이 나타내는 데이터의 추가적인 차원('size'와 'sex')을 시각화합니다. style
을 통해 점의 스타일도 변경하여 또 다른 차원('time')을 나타낼 수 있습니다.
산점도를 통해 데이터의 복잡한 관계와 패턴을 직관적으로 이해할 수 있으며, Seaborn과 같은 라이브러리는 이 과정을 보다 간편하게 만들어 줍니다. 데이터의 다양한 측면을 시각적으로 탐색하고 싶을 때, 색상 및 크기를 활용한 산점도는 매우 유용한 도구가 될 것입니다.
상관 관계는 데이터 두 변수 간의 관계의 정도를 수치적으로 나타낸 것입니다. 이 관계는 어떤 변수가 변할 때 다른 변수가 어떻게 움직이는지를 보여줍니다. 변수 사이에 강한 상관 관계가 있으면, 하나의 변수가 변화할 때 다른 변수도 예측 가능한 방향으로 변화합니다. 이러한 상관 관계를 평가하는 것은 데이터를 분석하고 해석하는 데 있어 기본적이면서 중요한 단계입니다.
상관 계수 이해하기
상관 관계를 수치화하기 위한 가장 일반적인 방법은 상관 계수를 사용하는 것입니다. 상관 계수는 -1과 1 사이의 값을 가지며, 0은 아무 관계가 없음을, 1 혹은 -1은 완전한 양 또는 음의 선형 관계를 나타냅니다. 상관 계수의 절대값이 클수록 변수들 간의 상관 관계가 강하다고 할 수 있습니다.
가장 널리 알려진 두 가지 상관 계수 방법은 피어슨(Pearson)과 스피어만(Spearman) 상관 계수입니다.
-
피어슨 상관 계수는 두 변수 사이의 선형 관계를 평가합니다. 이는 두 변수가 함께 변하는 정도를 측정하며, 변수들이 정규 분포를 따를 때 가장 잘 작동합니다.
-
스피어만 상관 계수는 두 변수 사이의 순위 관계를 평가합니다. 이는 비선형 관계를 감지할 수 있으며, 변수들이 정규 분포를 따르지 않거나 순위 척도로 측정되는 경우 유용합니다.
Python 예시: Seaborn을 사용하여 상관 계수 시각화하기
Python에서는 seaborn 라이브러리를 사용하여 두 변수의 상관 관계를 쉽게 시각화하고 분석할 수 있습니다. seaborn은 matplotlib를 기반으로 하며, 보다 아름다우면서 복잡한 통계 그래프를 쉽게 그릴 수 있게 돕습니다.
아래는 seaborn을 사용하여 데이터셋의 상관 계수를 시각화하는 간단한 예제입니다.
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
# 임의의 데이터셋 로드
# 이 예시에서는 seaborn에서 제공하는 tips 데이터셋을 사용합니다.
tips = sns.load_dataset("tips")
# 데이터셋의 상관 계수 행렬 계산
corr = tips.corr()
# 히트맵을 사용하여 상관 계수 시각화
sns.heatmap(corr, annot=True, cmap="coolwarm")
plt.show()
이 코드는 tips
데이터셋에 대한 상관 계수 행렬을 계산하고, heatmap
함수를 사용하여 이를 시각화합니다. annot=True
는 셀에 숫자를 표기하도록 하며, cmap="coolwarm"
은 색상 체계를 설정합니다.
상관 계수를 이해하고 분석하는 것은 데이터 분석에서 중요한 역할을 하며, 이를 통해 변수 간의 관계를 파악하고 예측 모델을 개선하는 데 도움이 됩니다.
추세선은 통계적 그래프에서 데이터 포인트들 사이의 관계를 나타내기 위해 사용되는 선입니다. 이 선은 데이터 집합의 경향성을 보여줌으로써, 두 변수 사이의 관계가 어떤지를 명확히 이해할 수 있게 도와줍니다.
추세선의 개념
추세선은 데이터 셋에서 관찰된 데이터 포인트들을 가장 잘 대표하는 선을 그린 것입니다. 이는 특히 시간에 따른 데이터의 변화 추세나 두 변수 간의 상관 관계를 분석할 때 유용합니다. 추세선에는 주로 선형(직선)이나 비선형(곡선) 추세선이 있습니다.
선형 추세선과 비선형 추세선
-
선형 추세선: 이는 데이터 포인트들 사이의 관계가 직선적인 경향을 보일 때 사용됩니다. 가장 기본적인 형태의 추세선으로, 두 변수 사이의 선형 관계를 표시합니다.
-
비선형 추세선: 때로는 데이터 포인트들 사이의 관계가 비선형적일 수 있습니다. 이런 경우, 곡선 형태의 비선형 추세선이 사용되며 다항식이나 지수 함수 등을 통해 표현될 수 있습니다.
추세선을 통한 데이터 이해
추세선은 데이터 집합에서 일반적인 경향을 이해하는 데 도움을 줍니다. 예를 들어, 선형 추세선은 시간이 지남에 따라 변수 A가 증가함에 따라 변수 B도 증가하는 경향을 보여줄 수 있습니다. 반대로, 비선형 추세선은 더 복잡한 관계를 나타낼 수 있으며, 변수 간에 선형 관계가 없을 때 유용합니다.
예시: Seaborn으로 추세선 추가하기
Python의 Seaborn 라이브러리는 데이터 시각화를 위해 통계적 그래프를 쉽게 그릴 수 있는 강력한 도구입니다. 아래에서는 seaborn을 이용하여 선형 추세선을 추가하는 방법을 보여줍니다.
# 필요한 라이브러리를 불러옵니다.
import seaborn as sns
import matplotlib.pyplot as plt
# 예제 데이터셋 로드
tips = sns.load_dataset("tips")
# 산점도와 함께 선형 추세선을 그리는 코드
sns.lmplot(x="total_bill", y="tip", data=tips)
plt.show()
이 코드는 'tips' 데이터셋을 사용하여 total_bill
과 tip
사이의 관계를 산점도로 표현하고, 이 두 변수 사이의 선형 추세선을 추가합니다. lmplot
함수는 여기서 선형 모델 플롯을 의미하며, 자동으로 데이터 포인트들 사이의 최적의 선형 추세선을 계산하고 그래프에 추가해줍니다.
추세선을 통해 데이터의 경향성을 더 잘 이해함으로써, 데이터가 전달하고자 하는 주요 메시지와 패턴을 명확히 파악할 수 있습니다.
회귀 분석(Regression Analysis)은 변수 간의 관계를 탐색하고 예측하는 통계적 기법입니다. 이 기법은 의사 결정 과정에서 중요한 통찰력을 제공하며, 데이터에 내재된 경향성을 이해하는 데 핵심적인 역할을 합니다.
단순 선형 회귀와 다중 회귀 분석의 차이
회귀 분석은 크게 단순 선형 회귀(Simple Linear Regression)와 다중 회귀 분석(Multiple Regression Analysis)으로 나뉩니다.
-
**단순 선형 회귀(SLR)**는 한 개의 독립 변수(X)와 한 개의 종속 변수(Y) 사이의 선형 관계를 모델링합니다. 공식은 Y = β0 + β1X + ε로 표현되며, 여기서 β0는 절편, β1은 기울기를 의미하고, ε는 오차 항입니다.
-
**다중 회귀 분석(MRA)**은 두 개 이상의 독립 변수(X₁, X₂, ... Xn)가 하나의 종속 변수(Y)에 영향을 준다고 가정하고, 이들 간의 선형 관계를 모델링합니다. 공식은 Y = β0 + β1X₁ + β2X₂ + ... + βnXn + ε로 나타낼 수 있습니다.
회귀 직선의 해석
회귀 직선은 데이터의 경향성을 나타내는 선입니다. 단순 선형 회귀에서 회귀 직선의 기울기(β1)는 X의 한 단위 변화가 Y에 미치는 평균적인 영향을 나타냅니다. 절편(β0)은 X가 0일 때 Y의 예상 값입니다.
회귀 분석을 위한 가정
회귀 분석을 정확하게 수행하기 위해서는 몇 가지 가정이 필요합니다.
- 선형성(Linearity): 독립 변수와 종속 변수 간에는 선형 관계가 있어야 합니다.
- 독립성(Independence): 오차 항은 서로 독립적이어야 합니다.
- 등분산성(Homoscedasticity): 오차 항의 분산은 독립 변수에 대해 일정해야 합니다.
- 정규성(Normality): 오차 항은 정규 분포를 따라야 합니다.
잔차 분석을 통한 모델 평가
잔차(Residual)는 실제 관측값과 회귀 모델을 통해 예측된 값의 차이입니다. 잔차 분석을 통해 모델의 적합도를 평가하고, 위의 가정들이 충족되는지 확인할 수 있습니다.
Python 코드 예시 (Seaborn 사용)
다음은 Seaborn 라이브러리를 사용하여 단순 선형 회귀를 시각화하고 회귀 분석을 수행하는 예시 코드입니다.
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 임의의 데이터셋 생성
np.random.seed(10)
data = pd.DataFrame({
'X': np.random.rand(100),
'Y': 2 + 3 * np.random.rand(100) + np.random.normal(0, 0.1, 100)
})
# 단순 선형 회귀 시각화
sns.regplot(x='X', y='Y', data=data, ci=None)
plt.title('Simple Linear Regression')
plt.show()
# 회귀 분석 수행 (SciPy 사용)
import scipy.stats as stats
slope, intercept, r_value, p_value, std_err = stats.linregress(data['X'], data['Y'])
print(f"Slope: {slope}")
print(f"Intercept: {intercept}")
print(f"R-squared: {r_value**2}")
print(f"P-value: {p_value}")
print(f"Standard Error: {std_err}")
이 코드는 데이터셋에 대한 단순 선형 회귀를 시각화하고, SciPy 라이브러리를 통해 주요 회귀 분석 지표를 계산합니다.