본문 바로가기
재미로 하는 코딩

시각화 뽀개기11

by 헬푸밍 2023. 3. 19.

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#

 

Visualizing statistical relationships — seaborn 0.12.2 documentation

Visualizing statistical relationships Statistical analysis is a process of understanding how variables in a dataset relate to each other and how those relationships depend on other variables. Visualization can be a core component of this process because, w

seaborn.pydata.org

 

'재미로 하는 코딩' 카테고리의 다른 글

numpy를 사용한 이미지 압축해보기!  (2) 2023.03.30
시각화 뽀개기12  (0) 2023.03.23
다이아몬드 가격 예측해보기  (4) 2023.03.19
시각화 뽀개기10  (0) 2023.03.16
시각화 뽀개기9  (0) 2023.03.05

댓글