데이터 분석 & 시각화/Matplotlib

시각화 라이브러리 mataplotib, Seaborn

머루아빠승우 2025. 5. 19. 23:56
import mataplotib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_diabetes

Scatterplot & boxplot (산점도와 박스플롯)

주요 변수와 목표값과의 관계 분석을 할 때 사용!!

  • 박스플롯과 산점도는 선형, 비선형 관계를 알 수 있으며 상관관계의 방향성을 확인할 수 있음
    • 하나의 목표 변수와 여러개의 주요 변수를 그리고자 할때 subplot
    • 기본적으로 하나만 출력할 때는 안써도 됨
더보기

 sns.subplots을 이용한 여러 레이블 그리기

# 산점도와 boxplot을 하려면 sns.subplots로 도화지 만들기
# fig : 액자 사이즈
# axes 차원 3x2 사이즈 만들기

fig, axes =plt.subplots(1,3, figsize=(12,6))

sns.scatterplot(x='bmi',y='target', data=df, ax=axes[0], hue='sex')
axes[0].set_title('bmi vs target')

sns.scatterplot(x='bp',y='target', data=df, ax=axes[1])
axes[1].set_title('bp vs target')

sns.scatterplot(x='s5', y='target', data=df, ax=axes[2])
axes[2].set_title('s5 vs target')

Scatterplot

x값에 따른 y값 추세 분포 확인 가능, x 증가에 따라 y도 증가하는 것을 볼 수 있음

boxplot 박스플롯

df['target_bin'] = pd.qcut(df['target'], q=4, labels=['Q1','Q2','Q3','Q4'])
# pandas 내 pd.qcut 사용!
# q = 4로 labels를 붙이면 더 보기 쉬움
fig, axes = plt.subplots(1,3, figsize=(12,6))
sns.boxplot(x='target_bin', y='bmi', data=df, ax=axes[0])
axes[0].set_title("target_bin vs bmi")

sns.boxplot(x='target_bin', y='bp', data=df, ax = axes[1])
axes[1].set_title("target vs bp")

sns.boxplot(x='target_bin', y='s5', data=df, ax = axes[2])
axes[2].set_title("target vs s5")
plt.show()
  1. 분위수를 나눠서 범주형 변수 생성할 것!
    • why? 수치가 너무 많음 -> 정리해줘야지
  2. 파생변수 생성
    • label 추가해주면 시각적으로 좋네 

결과 해석 : 중앙값 증가, 이상치 확인 가능

hue + scatterplot (다중 변수간의 상호작용 시각화)

fig, axse = plt.subplots(figsize=(12,6))
sns.scatterplot(data=df, x='s5',y='bmi', hue='target')
# x와 y를 두 개의 피처 조합으로 어떤 관계가 있는지 알기

결과 해석 : 두 변수 s5와 bmi가 높을수록 target의 분포가 300인 애들이 많이 찍힘

 

fig, axes = plt.subplots(1,2, figsize=(12,6))
sns.boxplot(data=df, x='sex', y='s5', ax=axes[0], hue='target_bin',)
sns.boxplot(data=df, x='sex', y='bmi', ax=axes[1], hue='target_bin')
axes[0].set_xticklabels(['Male', 'Female'])
axes[1].set_xticklabels(['Male', 'Female'])

결과 해석 : 당뇨병 환자 그룹별 성별에 따른 s5, bmi 박스플롯 BMI : 중앙값이 남성이 여성보다 높음

 

HeatMap

모든 변수 간 상관관계 행렬을 구하고 Heatmap을 구하고자할 때 모든 변수는 수치형 변수일 때 사용 가능!

- cbar : colorbar의 유무
- annot : 각 cell의 값 표기 유무 **꼭해줄 것!**
- cmap = 'Blues' 히트맵의 색 설정 

plt.figure(figsize=(10,8))
sns.heatmap(correlation_matrix,annot=True, cmap='Blues',cbar=True)
plt.show()

결과 분석 : 목표변수(target)과 같은 행 보기 → 상관계수가 제일 큰 칼럼 찾기 1. 0.59 bmi 2. 0.57 s5 3. 0.44 bp