-
[2월 1주차-2/7(2)]📊 상관관계 분석 및 Seaborn 활용 정리Why Not SW CAMP 5기/수업 기록 2025. 2. 7. 16:13
NumPy와 Seaborn으로 살펴보는 데이터 분석과 시각화
데이터 분석을 위해 가장 많이 사용하는 두 가지 라이브러리가 있습니다. NumPy는 수치 연산과 배열 연산을 빠르게 수행할 수 있도록 도와주는 라이브러리이며, Seaborn은 데이터를 시각적으로 분석하기 위한 강력한 도구입니다. 이번 글에서는 NumPy를 활용한 상관관계 분석과 Seaborn을 이용한 데이터 시각화 기법을 살펴보겠습니다.
📌 NumPy로 상관관계 분석하기
1️⃣ 상관관계란?
변수들 간의 관계를 분석할 때 가장 중요한 개념이 **상관관계(correlation)**입니다.
- 양의 상관관계(Positive Correlation): 한 변수가 증가하면 다른 변수도 증가
- 음의 상관관계(Negative Correlation): 한 변수가 증가하면 다른 변수는 감소
- 상관계수(correlation coefficient): 상관관계의 정도를 나타내는 수치 (값의 범위: -1 ~ 1)
- 1에 가까울수록 강한 양의 상관관계
- -1에 가까울수록 강한 음의 상관관계
- 0에 가까울수록 관계가 거의 없음
2️⃣ numpy.corrcoef()를 활용한 상관관계 분석
NumPy의 corrcoef() 함수는 두 개 이상의 변수 간의 상관관계를 쉽게 구할 수 있습니다.
import numpy as np np.random.seed(85) # 동일한 결과를 얻기 위해 초기값 설정 x = np.arange(0, 10) y1 = x * 2 # x와 완벽한 양의 상관관계 print(np.corrcoef(x, y1))
📌 결과:
array([[1., 1.], [1., 1.]])
💡 1.0은 완벽한 양의 상관관계를 의미합니다.
3️⃣ 랜덤 데이터와의 상관관계 분석
무작위 데이터를 생성하여 상관관계를 구해보겠습니다.
y2 = x ** 3 # x의 세제곱 값 y3 = np.random.randint(0, 100, size=10) # 0~100 사이 랜덤 값 print(np.corrcoef(x, y2)) # x와 y2의 상관관계 print(np.corrcoef(x, y3)) # x와 y3의 상관관계
📌 결과:
array([[1. , 0.90843373], # x와 y2는 강한 양의 상관관계 [0.90843373, 1. ]]) array([[1. , 0.5002124], # x와 y3는 약한 양의 상관관계 [0.5002124, 1. ]])
4️⃣ 여러 변수 간의 상관관계 분석
변수 여러 개를 한꺼번에 비교할 수도 있습니다.
result = np.corrcoef((x, y2, y3)) print(result)
📌 결과:
array([[1. , 0.90843373, 0.5002124 ], [0.90843373, 1. , 0.43149426], [0.5002124 , 0.43149426, 1. ]])
💡 0.9084처럼 1에 가까운 값은 강한 양의 상관관계를 의미합니다.
5️⃣ 상관관계 행렬 시각화
NumPy에서 계산한 상관관계를 시각적으로 표현해보겠습니다.
import matplotlib.pyplot as plt plt.imshow(result, cmap='coolwarm') # 색상 적용 plt.colorbar() # 색상 바 추가 plt.show()
🔍 imshow()를 활용하면 상관관계를 쉽게 색으로 표현할 수 있습니다.
📌 Seaborn을 활용한 데이터 시각화
1️⃣ Seaborn이란?
Seaborn은 Matplotlib을 기반으로 한 시각화 라이브러리로, 더 고급스러운 차트를 쉽게 만들 수 있도록 도와줍니다.
import seaborn as sns sns.set_theme(style="darkgrid") # 테마 설정
2️⃣ Seaborn 기본 데이터셋 활용
Seaborn에는 기본적으로 여러 가지 샘플 데이터셋이 제공됩니다.
그중 tips 데이터셋을 활용하여 시각화를 진행하겠습니다.tips = sns.load_dataset('tips') tips.head() # 데이터 미리보기
3️⃣ 산점도 그래프 (relplot())
식사비(total_bill)와 팁(tip)의 관계를 시각화해보겠습니다.
sns.relplot(data=tips, x="total_bill", y="tip", col="time", hue="smoker", style="smoker", size="size") plt.savefig('test.png') # 이미지 저장하려면 show()전에 코드 쳐야됨 plt.show()
🔹 hue="smoker" → 흡연 여부에 따라 색상을 다르게 표시
🔹 col="time" → 점심/저녁 시간별로 그래프 분리
🔹 style="smoker" → 마커 스타일을 다르게 지정
4️⃣ 히스토그램 (distplot())
팁(tip)이 얼마나 분포되어 있는지 확인해보겠습니다.
sns.distplot(tips['tip'], kde=True, bins=20) plt.show()
🔹 kde=True → 데이터의 밀도를 부드러운 곡선으로 표시
🔹 bins=20 → 히스토그램 구간 개수 조절
5️⃣ 산점도에 선형 회귀선 시각화 (regplot())
팁과 식사비 간의 선형 관계를 확인해보겠습니다.
ax = sns.regplot(data=tips, x="total_bill", y="tip") ax.set_xlabel("Total Bill") ax.set_ylabel("Tip") ax.set_title("Total Bill and Tip Relationship") plt.show()
💡 regplot()은 산점도 위에 선형 회귀선을 그려줍니다.
6️⃣ 여러 변수 간 관계 시각화 (pairplot())
pairplot()을 사용하면 데이터셋 내 여러 변수들의 관계를 한눈에 볼 수 있습니다.
두 변수 a, b
상관도가 높을경우 a 증가시 b 증가합니다
상관도가 낮을 경우 b는 랜덤한 분포 또는 특정값에 몰립니다sns.pairplot(tips, kind="hist") plt.show()
7️⃣ Anscombe's quartet 데이터셋 활용
anscombe = sns.load_dataset('anscombe') print(anscombe.head()) # 데이터 확인 # 선형 회귀 시각화 sns.lmplot(x='x', y='y', data=anscombe.query("dataset == 'I'"), ci=None, scatter_kws={'s': 80}) plt.show() sns.lmplot(x='x', y='y', data=anscombe.query("dataset == 'III'"), ci=None, order=2, scatter_kws={'s': 80}) plt.show()
8️⃣ flights 데이터셋 활용
flights = sns.load_dataset('flights') # 연도별 승객 수 변화 시각화 sns.relplot(data=flights, x='year', y='passengers') plt.show() sns.relplot(data=flights, x='year', y='passengers', kind='line') plt.show()
📌 매년 비행기 이용객 수가 증가하는 추세를 확인할 수 있습니다.
✅ 정리
- numpy.corrcoef(): 상관계수 계산
- seaborn 활용 시각화
- relplot(), histplot(), regplot(), pairplot() 등 다양한 그래프 제공
- 다양한 데이터셋(tips, anscombe, flights) 활용 가능
🎨 Seaborn을 활용하면 복잡한 데이터 관계도 쉽게 파악할 수 있어요! 🚀
📌 마무리
이번 포스팅에서는 NumPy를 활용한 상관관계 분석과 Seaborn을 이용한 데이터 시각화 기법을 살펴보았습니다.
- numpy.corrcoef(): 상관계수 계산
- seaborn 활용 시각화
- relplot(), histplot(), regplot(), pairplot() 등 다양한 그래프 제공
- 다양한 데이터셋(tips, anscombe, flights) 활용 가능
🎨 Seaborn을 활용하면 복잡한 데이터 관계도 쉽게 파악할 수 있어요!
데이터 분석에서는 숫자로만 보는 것보다, 시각적으로 분석하는 것이 훨씬 직관적입니다.🚀
'Why Not SW CAMP 5기 > 수업 기록' 카테고리의 다른 글
[2월 1주차-2/7(4)]🍗 Python으로 치킨 브랜드 데이터 분석 & 시각화! 📊 (0) 2025.02.07 [2월 1주차-2/7(3)]🐼 Pandas 기초부터 활용까지! 데이터 분석의 시작 📊 (0) 2025.02.07 [2월 1주차-2/7(1)]🔥 NumPy 기초 정리: 다차원 배열과 연산 완벽 가이드 (0) 2025.02.07 [2월 1주차-2/6(5)]🚇 지하철 시간대별 승하차 인원 분석 (1) 2025.02.06 [2월 1주차-2/6(4)]📊 파이썬을 활용한 인구 데이터 시각화(파이차트&산점도) (0) 2025.02.06