Multivariate views on complex datasets(복잡한 데이터셋의 다변량 시각화)
일단 필요 라이브러리를 호출하고..
# Import seaborn
import seaborn as sns
%matplotlib inline
seaborn에 내장되어 있는 펭귄 데이터셋을 보자!
344마리의 펭군을...
종류, 사는 섬, 부리 길이, 부리 깊이?, 날개 길이, 무게, 성별 조사를 한 데이터 셋 같다?
jointplot을 사용해 날개 길이와 부리 길이의 관계를 보자!(hue는 species로 해서 종별로 나눠서 보자!)
sns.jointplot(data=penguins, x="flipper_length_mm", y="bill_length_mm", hue="species")
대체로 날개 길이가 길면 부리 길이도 긴 것을 확인했다!
또 Gentoo종이 날개 길이가 대체로 길고...
Chinstrap종이 부리 길이가 대체로 긴 것을 확인 할 수 있다!
이번엔 pairplot을 통해 모든 변수의 상관관계를 시각화 해보면...
sns.pairplot(data=penguins, hue="species")
각 변수의 상관관계를 모두 확인해 볼 수 있다!
날개 길이와 몸무게의 상관관계가 가장 강해보인다!
Lower-level tools for building figures(시각화 위한 저수준 도구)
이번엔 펭귄 데이터에 대한 복잡한 그림을 그려볼건데...
천천히 하나씩 추가하면서 그려보자!
g = sns.PairGrid(penguins, hue="species", corner=True)
위와 같이 코드를 작성해 주면
빈 공간이 생성된다!
coner=True로 지정해줘서 대칭되는 부분이 잘렸다!
따라서 먼저 그린 그림에서와 같이 겹치는 부분을 없앨 수 있다!
코드를 추가해서 kdeplot을 그려주는데...
KDE는 Kernel Density Estimator의 줄임말로 커널 밀도 추정...? 이라고 한다?
g = sns.PairGrid(penguins, hue="species", corner=True)
g.map_lower(sns.kdeplot, hue=None, levels=5, color=".2")
이렇게 등고선 같은 것이 그려지는데...
map_lower여서 대각선 아래부분에 그리고...
leves=5라서 층이 5개로 나뉘고...
color는 0에 가까울수록 진해지고 1에 가까울수록 옅어지는 것 같다!
다시 코드를 추가해서...
산점도를 같은 위치에다 그려주는데...
g = sns.PairGrid(penguins, hue="species", corner=True)
g.map_lower(sns.kdeplot, hue=None, levels=5, color=".2")
g.map_lower(sns.scatterplot, marker="+")
marker='+'로 지정해서 +로 점을 찍어놨다!
코드를 한 줄 더 추가해서 각 변수의 히스토그램을 그려준다!
g = sns.PairGrid(penguins, hue="species", corner=True)
g.map_lower(sns.kdeplot, hue=None, levels=5, color=".2")
g.map_lower(sns.scatterplot, marker="+")
g.map_diag(sns.histplot, element="step", linewidth=0, kde=True)
map_diag를 통해 대각선에 그려주었고...
element는 bars, step, poly가 가능한데...
그중에서 step(막대그래프인데 붙어있고 경계가 없는 모습?)으로 설정해줬는데
linewidth=0이라서 bars랑 큰 차이를 못느끼는...? 그런 부분이다!
그래서 차이를 보려고 linewidth=1로 설정해서 그래프를 봤다!
순서대로 bars, element, poly로 그려본 것이다!
암튼... linewidth=0으로 히스토그램을 구성하는 빈도수 바깥 테두리 선을 없게 만들었고...
kde=True로 kde곡선도 같이 그려줬다!
코드를 한 줄 더 추가해서
범례를 넣는 코드를 추가했다!
g = sns.PairGrid(penguins, hue="species", corner=True)
g.map_lower(sns.kdeplot, hue=None, levels=5, color=".2")
g.map_lower(sns.scatterplot, marker="+")
g.map_diag(sns.histplot, element="step", linewidth=0, kde=True)
g.add_legend(frameon=True)
frameon=True를 통해 범례 바깥 네모난 상자로 프레임을 만들어줬다!
마지막으로 범례위치 조정을 해줬다!
g = sns.PairGrid(penguins, hue="species", corner=True)
g.map_lower(sns.kdeplot, hue=None, levels=5, color=".2")
g.map_lower(sns.scatterplot, marker="+")
g.map_diag(sns.histplot, element="step", linewidth=0, kde=True)
g.add_legend(frameon=True)
g.legend.set_bbox_to_anchor((.61, .6))
이렇게 범례 위치가 조정된 상태로 그림이 완성!
차례차례해봤는데도... 할 수 있을까? ㅋㅋㅋ
암튼 완성된 그림이 지리긴 한다...
참조 사이트
https://seaborn.pydata.org/tutorial/introduction.html#multivariate-views-on-complex-datasets
댓글