데이터를 구간별로 나눔; 데이터 값의 범위를 일정한 간격(bin)으로 나눔 → 각 구간에 속하는 데이터의 개수를 막대로 표시
데이터의 대칭성을 확인
sns.histplot(data, x, hue, multiple, bins)
multiple : 다른 범주를 어떻게 시각화할지 결정
* multiple 속성들 - layer : 겹치기(기본값) - dodge : 겹치지 않게 나란히 - stack : 쌓기 - fill : 비율
② KDE Plot (Kernel Density Estimation)
데이터의 분포를 곡선으로 표현
히스토그램 보다 데이터의 모양•구조를 정확하게 파악(히스토그램 : 이산적인 bin을 사용)
비모수적방법으로 데이터 분포를 모델링; 데이터에 대한 가정이 필요x
sns.kdeplot(data, x)
③ Rug Plot
데이터의 각 포인트를 축 위에 작은 선분(or 틱)으로 나타냄
다른 Plot 과 함께 사용 가능
sns.rugplot()
④ displot() 을 활용하여 histplot/kdeplot + rugplot 함께 시각화
sns.displot(data, x, y, hue, kind(메인 plot), rug(True))
2) 범주형 데이터 (Cat Plot)
Cat Plot ⊃ Bar Plot, Count Plot, Box Plot, Boxen Plot, Violin Plot, Swarm Plot, Strip Plot, Point Plot
① Bar Plot
막대's 높이(길이) : 해당 범주의 값•빈도
x 축 : 카테고리 변수
y 축 : 수치 변수
sns.barplot(data, x, y)
② Count Plot
범주형 데이터의 빈도 시각화
이산적인 데이터 항목 or 범주를 가진 열(column)
x or y 매개변수; 범주를 표시할 축을 선택
sns.countplot(data, x(or y), hue)
③ Box Plot
데이터's 중심 경향, 분산, 분포 형태 확인 → 데이터 그룹 간 비교
통계적 정보 제공; 중앙값, 사분위수(25%, 75%), 이상치 등
상자 수염(데이터의 최대•최소 값)을 벗어난 값 : 이상치
sns.boxplot(data, x, y, hue)
④ Boxen Plot
상자 크기로 값의 분포 정도를 추측
비대칭 분포 확인
box plot 보다 대형 데이터 출력에 유리
수염 無, 박스를 벗어나는 값 : 이상치
sns.boxenplot(data, x, y, hue)
⑤ Violin Plot
데이터의 분포를 곡선으로 출력(≓ KDE Plot)
너비; 데이터의 밀도 확인
비대칭 분포 확인
sns.violinplot(data, x, y, hue, split, inner)
- split : true일 경우, hue 에 따라 분포를 좌우로 분할 - inner : 그래프 안에 그려 넣을 요소(box, quartile, point, stick)
3) 기타 시각화 도구
Heatmap, Pair Plots, Pie Chart
① Heatmap
수치형 자료형 간의 상관관계를 시각적으로 표현
색상 맵; 값의 크기(상대적)에 따라 다양한 색으로 셀을 채움
sns.heatmap(corr_matrix)
.corr() 메서드를 활용하여 상관 행렬 계산
② Pair Plots
데이터프레임 내의 수치형 변수에 대한 산점도 매트릭스를 생성
변수 간의 관계 파악에 용이
대각선(변수 자기 자신에 대한 위치); 히스토그램 or KDE 플롯
sns.pairplot(dataframe, hue, vars)
vars : 시각화에 사용할 데이터를 리스트에 저장하여 지정
③ Pie Chart
전체 데이터에 대한 각 부분 데이터를 비율로 시각화(라벨링)
seaborn 에는 Pie Chart 생성 기능x; matplotlib 사용하여 구현
plt.pie(x, labels, autopctm)
x : 원형 차트 내부 각 조각의 크기
labels : 원형 차트 내부 각 조각의 레이블
autopctm : 각 조각의 비율을 계산하여 표시(일반적으로 %1.1f%% 사용)
📘 트러블 슈팅
[문제]
문제 내용
heatmap plot 결과, 타켓한 열("carat", "depth", "price") 외에 다른 데이터도 출력됨
# Q) 다이아몬드 데이터 중 carat, depth, price 열에 대해서 Heatmap을 시각화하시오
import seaborn as sns
import matplotlib.pyplot as plt
diamonds = sns.load_dataset("diamonds")
# diamonds.info()
numeric_diamonds = diamonds.select_dtypes(include=["float64", "int64"])
# 상관 행렬 계산; 얼마나 상관관계가 있는지 ~
# correlation(상관관계)
corr_matrix = numeric_diamonds.corr()
sns.heatmap(
corr_matrix,
annot=True,
)
plt.show()
문제 원인
타겟한 열만 선택하는 과정이 생략됨
[해결]
해결 방법
pandas 라이브러리를 이용하여 데이터프레임에서 타겟열을 복수 선택 → Heatmap을 통해 상관관계를 시각화
해결 결과
import seaborn as sns
import matplotlib.pyplot as plt
diamonds = sns.load_dataset("diamonds")
# 단순 복수 열 선택
# diamonds[["carat", "depth", "price"]]
# loc를 활용한 복수 열 선택
selected_diamonds = diamonds.loc[:, ["carat", "depth", "price"]]
# 상관행렬 계산 .corr()
corr_diamonds = selected_diamonds.corr()
# heatmap 기능 : 상관행렬 시각화
sns.heatmap(
data=corr_diamonds,
annot=True,
)
plt.show()