Coding Diary.

(데이터분석) 다변량 데이터에서 Faceting(면 분할)하기 본문

Coding/Data analysis

(데이터분석) 다변량 데이터에서 Faceting(면 분할)하기

life-of-nomad 2024. 5. 29. 09:21
728x90
반응형
지난 글에서 seaborn으로 히스토그램으로 패싯팅(면 분할, Faceting)하는 방법에 대해 알아보았습니다.
이번 글에서는 다변량 데이터에서 두 가지 방향으로 패싯팅하는 방법에 대해 알아보겠습니다.
두가지 방향으로 면 분할을 하고 각 면에 이변량 차트를 나타내면 다변량 자료를 만들 수 있습니다. 

 

🔻(참고)Faceitng🔻

 

(데이터분석) seaborn으로 히스토그램 faceting(면 분할) 하기

두 개 이상의 변수를 나타내는 차트를 다룰 때 일반적으로 사용되는 시각화 기법중 하나인 면 분할(Faceting)에 대해 알아보겠습니다. 🔻(참고자료) 바이올린 플롯🔻 (데이터분석) seaborn으로 Viol

life-of-nomad.tistory.com

 

1. 차급에 따른 연비의 산점도 

  • 먼저, 필요한 라이브러리와 연비 데이터를 불러옵니다.
import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
import seaborn as sns
  • trans_type 열을 새로 만들어서 변속기 종류를 Automatic과 Manual로만 분류하겠습니다.
df = pd.read_csv('../data/fuel-econ.csv')
df['trans_type'] = df['trans'].apply(lambda x:x.split()[0])
  • Facetgrid 함수에는 연비 DataFrame을 지정하고 VClass의 고유한 값을 열로 사용하도록 설정합니다.
  • 그 다음, FacetGrid의 map 함수를 사용해서 엔진 배기량과 복합 연비를 나타내는 일련의 이변량 산점도를 작성합니다.
# 차급에 따른 연비의 산점도
g = sns.FacetGrid(data=df, col='VClass')
g.map(plt.scatter, 'displ', 'comb')

  • 이 차트에서는 각 열이 서로 다른 차급을 나타냅니다.
  • 하나의 변수로만 면 분할을 할 수 있는 것은 아닙니다.
  • row 라는 매개변수를 추가할 수도 있습니다.

 

2. 차급과 변속기 종류에 따른 연비의 산점도

  • row를 추가해 trans_type으로 설정한 다음 동일한 map 함수를 실행해봅시다.
# 차급과 변속기 종류에 따른 연비의 산점도
g = sns.FacetGrid(data=df, col='VClass', row='trans_type', margin_titles=True)
g.map(plt.scatter, 'displ', 'comb')

  • 차트를 보면 변속기의 종류에 따라 행이 나눠지고 있습니다.
  • 첫 번째 행은 자동 변속기이고 두 번째 행은 수동 변속기이며, 각 열은 서로 다른 차급을 나타냅니다.
  • 하지만, 차트의 제목을 읽을 수가 없습니다.
  • 이때, 매개변수 margin_titles를 True로 설정하면 됩니다.
  • 그러면 행의 제목은 각 행에 별도로 표시됩니다.
g = sns.FacetGrid(data=df, col='VClass', row='trans_type', margin_title=True)
g.map(plt.scatter, 'displ', 'comb')

  • 행의 제목이 차트의 오른쪽으로 이동하면서 차트가 훨씬 깔끔해졌습니다.

3. 다변량 데이터에서의 면 분할

  • 이전 글에서는 FacetGrid를 사용해 범주형 변수의 수준별로 데이터 세트의 부분 집합을 만든 다음 각 부분 집합에 대하여 하나의 차트를 만들 수 있음을 확인했습니다.
  • 이전 글에서 본 면 분할 차트는 단변량 차트였습니다.
  • 하지만 면 분할 차트를 이변량 차트로 설정하여 다변량 데이터를 시각화 하는 것도 가능합니다.
#차트 작성의 편의를 위해 두 가지 연료만 선택
g = sns.FacetGrid(data=df, col='trans_type')
g.map(sns.boxplot, 'fuelType', 'highway',)
for ax in g.axes.flat:
	_ = ax.set_xticklabels(ax.get_xticklabels(), rotation=15)

  • 위의 면 분할 상자 그림을 보면 수동 변속기가 평균적으로 조금 더 효율적인 것 같기는 하지만 큰 차이는 없습니다. 하지만 연료 종류에 따른 차이는 분명합니다.
  • FacetGrid 에서는 열이 아니라 행을 기준으로 면 분할을 할 수도 있습니다.
  • 두 개의 다른 범주형 변수를 각각 서로 다른 축에 설정하는 방식으로도 다변량 데이터의 추세를 나타낼 수 있습니다.
# 간단하게 두 종류의 연료만 살펴보기
df_fueltypes = df[(df['fuelType'] == 'Regular Gasolin') | (df['fuelType'] == 'Disel')].reset_index(drop=True)

g = sns.FacetGrid(data=df_fueltypes, col='fuelType', row='trans_type', margin_titles=True)
g.map(sns.scatterplot, 'co2', 'highway')

  • margin_titles = True 의 설정은 각 면마다 행과 열의 레이블을 추가하는 대신, 해당 레이블을 그리드 상단과 오른쪽에 별도로 표시하겠다는 의미입니다.
728x90
반응형