데이터 상관관계 한 눈에 파악하기 2 – Enumerate와 Subplot 활용

Ryan·2025년 1월 14일

SQL/Python 분석

목록 보기
45/94

데이터 분석 과정에서 여러 변수를 동시에 시각화하고 싶을 때, 한 화면에 여러 그래프를 나란히 배치하면 비교가 훨씬 수월해집니다. 이번 포스팅에서는 파이썬의 enumerate() 함수와 plt.subplot()을 함께 사용하여, 하나의 Figure 안에 두 개 이상의 그래프를 간단히 그리는 방법을 알아보겠습니다.


1. 아이디어: 반복문과 Subplot

  • matplotlibsubplot() 함수를 사용하면, 한 Figure(창) 안에 다수의 서브플롯(작은 그래프)을 배치할 수 있음
  • 예: plt.subplot(1, 2, 1) → 1행 2열 중 첫 번째 위치에 그래프 생성
  • 예: plt.subplot(1, 2, 2) → 1행 2열 중 두 번째 위치에 그래프 생성

이를 enumerate()와 함께 사용하면, 반복문을 통해 여러 컬럼을 순회하면서 서브플롯을 자동으로 생성할 수 있습니다.


2. 코드 예시

아래 코드는 ['Age', 'DistanceFromHome'] 두 변수를 순회하면서, 각 변수의 히스토그램(Histogram)을 나란히 그립니다.

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

# 데이터프레임 df가 있다고 가정
# 예: df = pd.read_csv('file.csv')

plt.figure(figsize=(10, 4))  # 그래프 전체 크기 설정

for i, col in enumerate(['Age', 'DistanceFromHome']):
    # 1행 2열 중 i+1번째 서브플롯 선택
    plt.subplot(1, 2, i + 1)

    # 해당 컬럼에 대한 히스토그램 그리기
    sns.histplot(df[col])

    # 그래프 제목 달기
    plt.title(f"Distribution of {col}")

plt.tight_layout()  # 서브플롯 간격 조절
plt.show()

코드 해설

  1. plt.figure(figsize=(10, 4))
    • 전체 그래프의 크기를 (가로 10인치, 세로 4인치)로 지정
  2. for i, col in enumerate(['Age', 'DistanceFromHome']):
    • enumerate()를 사용해 반복 시 인덱스(i)컬럼명(col)을 동시에 얻음
    • i는 0부터 시작하므로, 서브플롯 인덱스를 위해 i + 1을 사용
  3. plt.subplot(1, 2, i + 1)
    • 1행 2열의 서브플롯 구성에서, i+1번째 위치에 그래프를 그림
    • i=0일 때는 왼쪽 그래프, i=1일 때는 오른쪽 그래프
  4. sns.histplot(df[col])
    • col에 해당하는 컬럼의 분포(Histogram)를 시각화
    • 예: 첫 번째 반복에서 ‘Age’, 두 번째에서 ‘DistanceFromHome’
  5. plt.title(f"Distribution of {col}")
    • 각 그래프에 컬럼명이 포함된 제목을 지정
  6. plt.tight_layout()
    • 서브플롯 간격을 자동으로 맞춰, 제목과 축 라벨 등이 겹치지 않도록 조정
  7. plt.show()
    • 최종적으로 모든 서브플롯이 한 창에 표시

3. 결과 해석

위 코드를 실행하면, 아래와 같은 형태의 그래프 두 개가 한 줄에 나란히 생성됩니다.

  1. 왼쪽 그래프: Age의 분포
    • 예: 직원 연령대가 2030대에 몰려 있는지, 4050대도 많은지 한눈에 확인
  2. 오른쪽 그래프: DistanceFromHome(출퇴근 거리) 분포
    • 예: 대부분의 직원이 회사에서 5km 이내에 거주하는지, 혹은 20km 이상의 장거리 출퇴근자가 많은지 확인

이처럼 히스토그램을 통해 각 변수의 분포 특성(치우침, 최고빈도 구간 등)을 알 수 있으며, 각각을 시각적으로 비교할 수 있습니다.


4. 추가 팁

  1. 서브플롯 개수 늘리기
    • subplot(2, 3, index) 등을 사용해 2행 3열 레이아웃을 만들 수도 있음
    • for 루프 안에서 변수 목록을 늘리면, 자동으로 여러 변수를 시각화 가능
  2. 다른 그래프 조합
    • 예: sns.boxplot(), sns.scatterplot() 등을 적용해도 동일한 방식으로 서브플롯에 그릴 수 있음
  3. enumerate() 응용
    • start=1 옵션을 통해 i가 1부터 시작하도록 설정 가능
    • 예: for i, col in enumerate(columns, start=1): plt.subplot(1, 2, i)
  4. seaborn의 FacetGrid
    • 여러 그래프를 한 번에 그리는 또 다른 방법으로 FacetGrid가 있음(이전 포스팅 참고)
    • 다만, FacetGrid는 주로 범주형 변수(부서, 직급 등)로 분할할 때 편리
  5. 레이블 및 축 범위 설정
    • plt.xlim(), plt.ylim(), plt.xlabel(), plt.ylabel() 등을 적절히 조정해 더 명확한 그래프 전달 가능

마무리

enumerate() + subplot() 조합은 반복문을 통해 여러 변수를 간편히 시각화할 수 있는 강력한 기법입니다. 이를 통해 수많은 컬럼 중 어떤 부분이 특이 분포를 갖는지, 혹은 서로 다른 변수를 시각적으로 빠르게 비교할 수 있습니다.

0개의 댓글