오늘 할 일: 끝내주게 숨쉬기
article thumbnail

데이터를 파악하기 위해서는 시각화가 필수입니다. 데이터가 어떻게 생겼는지 확인하기 위해 여러 그림을 그리다보면 한번에 그리고 싶을 때가 있죠. 본 포스팅에서는 matplotlib의 subplots 함수와 seaborn 라이브러리를 이용하여 그래프를 한번에 여러개 그려보도록 하겠습니다.

 

먼저 필요한 라이브러리들과 데이터를 불러옵니다. 데이터는 캐글에서 가져온 HR 자료를 사용했습니다.

import pandas as pd
import numpy as np

import seaborn as sns
import matplotlib.pyplot as plt

df = pd.read_csv('./data/HR_comma_sep.csv')
display(df.shape, df.head())

 

위 데이터로부터 부서(Department)마다 퇴사여부(left)의 현황을 알아보는 countplot을 그려보겠습니다.

 

먼저 어떤 부서가 있는지, 총 몇개 부서가 있는지를 확인해야겠죠! 

 

unique()를 이용해서 컬럼이 어떤 unique한 값들을 갖고 있는지 리스트로 가져오고, 이를 sorted 함수를 이용하여 정렬합니다. 리스트의 원소에 대소문자가 섞여있으면 대문자로 시작하는 문자열을 먼저 정렬하고 뒤에 소문자로 시작하는 문자열을 정렬합니다. 저는 sorted 함수key 파라미터를 이용해서 대소문자 구분 없이 정렬했습니다. key=str.lower라고 지정해주면 알파벳 소문자를 기준으로 정렬하고 반환해줍니다.

dept_list = sorted(df.Department.unique(), key=str.lower)
display(dept_list)
['accounting',
 'hr',
 'IT',
 'management',
 'marketing',
 'product_mng',
 'RandD',
 'sales',
 'support',
 'technical']

 

이제 부서별 퇴사여부를 카운트하여 시각화하는 그림을 그려보겠습니다.

fig, axes = plt.subplots(nrows=4, ncols=3, figsize=(15, 16))

for row in range(4):
    for col in range(3):
        idx = row * 3 + col
        
        if idx < len(dept_list):
            ax = axes[row][col]
            dept = dept_list[idx]
            sns.countplot(data=df[df.Department == dept], x='left', ax=ax)
            ax.set(xlabel=dept)

pyplot의 subplots 함수는 한 캔버스를 행, 열로 나눠서 각 구역마다 원하는 그림을 그릴 수 있게 해줍니다. nrows, ncols 파라미터를 이용해 행은 4, 열은 3으로 구역을 나누었습니다. 

이후 반복문에서 axes를 이용해 그림을 그릴 구역을 지정해주었고, seaborn의 countplot 함수를 이용해 부서별 퇴사여부 수를 시각화했습니다. 

subplots을 이용해서 12개의 구역이 나눠지도록 만들었지만, 부서는 10개만 있기 때문에 어떻게 그려야할지 고민하셨을텐데요, 반복문과 조건문을 이용해 이런 방법으로 그릴 수도 있다는 것을 알아가시면 좋을 것 같습니다. 조건문이 없어도 그릴 수는 있지만 나눠진 구역 수와 그리려는 그림의 수가 맞지않아 IndexError 발생하니 주의하세요! 

시각화는 데이터 이해를 위해 필수이니 유용하게 사용하시길 바랍니다.

앞으로도 종종 실전에 쓸만한 코드들을 갖고 오겠습니다. 좋은 주말 보내세요~!

 

 

데이터 출처

https://www.kaggle.com/giripujar/hr-analytics

 

HR Analytics

 

www.kaggle.com