시각화를 통한 데이터 드릴다운 2 – FacetGrid

Ryan·2025년 1월 14일

SQL/Python 분석

목록 보기
43/94

데이터가 많거나, 분석해야 할 범주(부서 등)가 여러 개인 경우에는 한 화면에 담기가 쉽지 않습니다. 이럴 때 Seaborn의 FacetGrid를 활용하면, 특정 범주를 기준으로 여러 개의 서브플롯을 한 번에 생성할 수 있어 다차원으로 데이터를 살펴보기에 매우 편리합니다. 이번 포스팅에서는 FacetGrid와 map() 메서드를 이용해 부서별(Department) 연차(TotalWorkingYears)와 월급(MonthlyIncome)의 관계를 시각화해보겠습니다.


1. FacetGrid란?

  • Seaborn에서 제공하는 소규모 서브플롯(소겔) 망을 생성하는 도구
  • 특정 컬럼을 기준으로 행(row) 또는 열(col) 혹은 색상(hue)으로 나누어 여러 그래프를 한꺼번에 그릴 수 있음
  • 범주(집단)가 많을 때, 한꺼번에 시각화하여 비교하고 패턴을 파악하기 좋음

2. 코드 예시

python
코드 복사
import seaborn as sns
import matplotlib.pyplot as plt

# FacetGrid 생성: col='Department' → 부서별로 각각 플롯을 나눔
facet = sns.FacetGrid(df, col='Department')

# facet.map(그래프 함수, x축 컬럼, y축 컬럼, ...)
facet.map(sns.barplot, 'TotalWorkingYears', 'MonthlyIncome')

# 그래프 제목, 레이아웃 조정
plt.subplots_adjust(top=0.85)
plt.suptitle("FacetGrid: MonthlyIncome by TotalWorkingYears, split by Department", y=1.02)
plt.show()

코드 해설

  1. sns.FacetGrid(df, col='Department')
    • df에서 Department 컬럼을 기준으로 열(col) 방향으로 서브플롯을 나눔
    • 부서가 3개라면, 3개의 그래프가 가로로 생성
  2. .map(sns.barplot, 'TotalWorkingYears', 'MonthlyIncome')
    • FacetGrid에 각 서브플롯을 그릴 때 sns.barplot() 함수를 사용함
    • x축은 TotalWorkingYears, y축은 MonthlyIncome으로 매핑
  3. plt.suptitle()
    • 각 서브플롯 위에 전체적인 제목(super title) 지정
  4. 결과적으로, 부서(Department)마다 연차(TotalWorkingYears)와 월급(MonthlyIncome)의 관계를 별도 그래프로 한눈에 비교 가능

3. 결과 해석

위 코드가 정상적으로 실행되면, 화면에 각 부서별로 막대 그래프가 나란히 표시됩니다.

  • Research & Development / Sales / Human Resources 등 부서별로 연차가 높아질수록 월급이 어떻게 변화하는지 직관적으로 확인 가능
  • 일부 부서에서는 연차가 5~10년 차가 되는 시점에 월급 증가 폭이 클 수 있음
  • 다른 부서에서는 연차가 커지더라도 급여가 상대적으로 완만하게 오를 수 있음

이를 통해 부서 간 경력(연차)에 따른 급여 정책이 다르거나, 직무 특성에 따른 차이가 있음을 추정할 수 있습니다.


4. 추가 팁

  1. row, col, hue 활용
    • FacetGrid를 생성할 때 row='Gender', col='Department', hue='JobLevel'처럼 여러 기준을 동시에 설정 가능
    • 단, 기준이 많아지면 서브플롯이 너무 많아져서 가독성이 떨어질 수 있으니 주의
  2. 다른 그래프 함수 사용
    • map(sns.scatterplot, 'x', 'y')나 map(sns.histplot, 'x') 등 다양한 Seaborn 그래프 함수를 적용할 수 있음
    • barplot 외에도 박스플롯(boxplot), 바이올린플롯(violinplot) 등을 활용 가능
  3. order, ci 파라미터
    • map 함수로 barplot을 쓸 때, order나 ci=None 같은 추가 인자를 넣을 수 있음
    • 예: facet.map(sns.barplot, 'TotalWorkingYears', 'MonthlyIncome', order=[1,2,3,4,5], ci=None)
    • 범주 순서 지정, 신뢰구간(confidence interval) 표시 유무 결정
  4. Seaborn catplot
    • 사실 catplot이라는 고급 함수가 있어, kind='bar', kind='box', kind='count' 등으로 다양한 그래프를 한 번에 Facet 형태로 그릴 수 있음
    • 예:
      python
      코드 복사
      sns.catplot(data=df, x='TotalWorkingYears', y='MonthlyIncome', col='Department', kind='bar')
      

마무리

Seaborn의 FacetGrid는 다차원으로 데이터를 시각화할 때 매우 유용한 도구입니다. 위 예시처럼 부서별로 연차와 월급이 어떻게 달라지는지를 별도 그래프로 비교해 보면, 조직 구조나 보상 체계를 좀 더 입체적으로 이해할 수 있습니다.

0개의 댓글