Visualizing statistical relationships(통계적 관계 시각화)
통계 분석은 데이터 셋의 변수가 서로 어떻게 관련되어 있고 이런 관계가 다른 변수에 어떻게 의존하는지 이해하는 과정정이다! 데이터가 제대로 시각화될 때 사람의 시각 구조는 관계를 나타내는 경향과 패턴을 볼 수 있기 때문에 시각화는 통계 분석 과정의 핵심 구성 요소가 될 수 있다.
이번 튜토리얼에서는 3개의 seaborn함수를 다룰 것이다. relplot()을 가장 많이 쓸 것이다. relplot()함수는 2개의 일반적 접근방식(산점도와 선그래프)를 사용한 통계적 관계 시각화를 위한 그림수준함수함수이다. replot()은 FacetGrid와 2가지 축수준 함수(산점도와 선그래프)중 하나를 결합시킨다.
scatterplot()은 kind='scatter'로...(기본값)
lineplot()은 kind='line'으로 결합시킨다.
보면 알겠지만.. 통계 관련 함수는 복잡한 데이터 셋 구조를 나타낼 수 있는 단순하고 이해하기 쉬운 데이터 표현을 사용하기 때문에 꽤 이해하기 쉬울 수 있다. 색조, 크기 및 스타일의 의미 체계를 사용하여 최대 3개의 추가 변수를 매핑하여 향상될 수 있는 2차원 그래픽을 그리기 때문에 이해하기 쉬울 수 있다!
일단 기본... 라이브러리 로드하자!
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")
Relating variables with scatter plots(산점도로 변수를 연관시키기)
산점도는 통계 시각화의 중심이다. 산점도는 각각의 점이 데이터셋에서 관측치를 나타내는 구름 때 같이 많은 점을 사용해 두 변수간 결합분포를 묘사한다. 이렇게 묘사한 것은 눈이 두 변수 사이에 의미있는 관계가 있는지에 대한 상당한 양의 정보를 추론하게 해준다.
seaborn으로 산점도를 그리는 몇 가지 방법이 있다. 두 변수 모두 수치형일 때 쓰이는 가장 기초적인 방법은 scatterplot()함수이다. 범주형 데이터에 대해서는... 범주 시각화 튜토리얼에서, 범주형 데이터를 시각하하기 위해 산점도를 사용하는 특수한 도구를 보기로하자. scatterplot()은 relplot()의 kind매개변수의 기본값이다.(kind='scatter'로 설정할 수도 있다!)
tips데이터로 산점도를 그려볼건데...
x는 총금액
y는 팁으로 그려보자!
tips = sns.load_dataset("tips")
sns.relplot(data=tips, x="total_bill", y="tip");
점이 2차원으로 그려졌는데... 3번째 변수에 관련된 점을 색칠함으로써 또 하나의 차원이 더해질 수 있다! 점의 색이 의미를 가지기 때문에 seaborn에서 이렇게 색으로 한 차원을 추가해준 것을 hue시맨틱을 사용한다고 불린다.
hue를 사용해서 산점도를 업그레이드 해보면...(hue는 smoker로 지정)
sns.relplot(data=tips, x="total_bill", y="tip", hue="smoker");
이렇게 흡연자 비흡연자를 나눠서 볼 수 있다!
클래스간 차이를 강조하기 위해... 그리고 이해하기 쉬우려고... 각 클래스별로 다른 마커 스타일을 사용할 수도 있다!
바로 위에서 그린 산점도에...
style을 smoker로 지정해주면...
sns.relplot(
data=tips,
x="total_bill", y="tip", hue="smoker", style="smoker"
);
좀 더 가독성을 높일 수 있다!
hue와 각 점의 style을 독립적으로 바꿈으로서 4개의 변수를 나타내는 것도 가능하다. 하지만 사람의 눈은 색에 비해 모양에 덜 민감하기 때문에 주의해야한다!
위의 그래프에서
style만 time으로 바꿔주면...
sns.relplot(
data=tips,
x="total_bill", y="tip", hue="smoker", style="time",
)
smoker여부와 시간 여부를 각각 색, 모양으로 표시할 수 있다!
위의 예시들에서는 hue시맨틱이 범주형이어서 기본 질적 팔레트가 적용되었다. hue시맨틱이 수치형(특히, 실수로 계산될 수 있다면)이면, 기본 컬러링이 순서형 팔레트로 바뀐다.
제일 처음 그림 산점도에서 hue만 size(손님 수 : 정수형)으로 바꿔주면...
sns.relplot(
data=tips, x="total_bill", y="tip", hue="size",
);
이렇게 팔레트 색상이 시퀀셜하게 바뀐다!
hue시멘틱이 범주형, 순서형일때 모두 컬러 팔레트를 커스터마이징 할 수 있다. 여기서는 cubehelix_palette()의 문자열 인터페이스를 사용해서 시퀀셜 팔레트를 커스터마이징 했다!
바로 위에서 그려준 산점도에 palette만 "ch:r=-.5,l=.75"로 지정해 주면...
sns.relplot(
data=tips, x="total_bill", y="tip",
hue="size", palette="ch:r=-.5,l=.75"
);
색상이 바뀌었다!
색상, 모양에 이은 3번째 종류의 시맨틱 변수는 각 점의 크기이다.
가장 처음 그려본 기본 산점도에서 size만 'size'로 지정해 주면...
sns.relplot(data=tips, x="total_bill", y="tip", size="size");
size(손님 수)별로 점 크기를 다르게 해서 산점도가 그려진다!
matplotlib.pyplot.scatter()과는 다르게, size변수의 문자그대로의 값은 점의 영역을 선택하는데 사용되지 않는다. 대신, 데이터 단위의 값 범위는 면적 단위의 범위로 정규화 된다! 이 범위는 커스터마이징 될 수 있다!
바로 위 산점도에서 sizes만 (15, 200)으로 지정해주면...
sns.relplot(
data=tips, x="total_bill", y="tip",
size="size", sizes=(15, 200)
);
점의 크기 범위가 더 커졌다!
다양한 시맨틱이 통계적 관계를 보여주는데 사용되는 방법을 커스터마이징 하는 더 많은 예제는 scatterplot() API예제에 있다!
참고사이트
https://seaborn.pydata.org/tutorial/relational.html#
'재미로 하는 코딩' 카테고리의 다른 글
numpy를 사용한 이미지 압축해보기! (2) | 2023.03.30 |
---|---|
시각화 뽀개기12 (0) | 2023.03.23 |
다이아몬드 가격 예측해보기 (4) | 2023.03.19 |
시각화 뽀개기10 (0) | 2023.03.16 |
시각화 뽀개기9 (0) | 2023.03.05 |
댓글