데이터 분석 & 시각화/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()
- 분위수를 나눠서 범주형 변수 생성할 것!
- why? 수치가 너무 많음 -> 정리해줘야지
- 파생변수 생성
- 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