Matplotlib & Seaborn with bar chart

Page content

개요

  • 본 코드는 다음 유투브 영상에서 다룬 내용 중 다루지 못한 내용을 추가한 블로그입니다.

Youtube

  • 유투브 영상은 다음과 같습니다. 전체 강의자료 및 데이터셋은 udemy 또는 inflern에서 확인 가능합니다.

가상의 데이터셋 생성

  • 먼저 라이브러리를 불러온 후, 가상의 데이터셋을 만듭니다.
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

years = [2007, 2008]
months = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']

np.random.seed(0)  # For reproducibility
data = {
    'year': np.repeat(years, 12),
    'month': months * 2,
    'house_prices': np.random.randint(100, 500, 24)
}

df_random = pd.DataFrame(data)
  • 데이터셋은 크게 year, month, house_prices로 구성되어 있습니다.
df_random.head()

Untitled

df_random.tail()

Untitled

데이터 가공

  • bar chart를 연도별로 표현하기 위해 분리를 진행합니다.
result_2007_random = df_random.loc[df_random['year'] == 2007, :]
result_2008_random = df_random.loc[df_random['year'] == 2008, :]

matplotlib 시각화

  • x축에는 텍스트가 입력할 수 없기 때문에 np.arange() 활용하여 x축 범위를 설정합니다.
  • bar chart의 너비 설정합니다.
months_numeric = np.arange(len(result_2007_random['month'])) # x축 범위 설정
bar_width = 0.35  # Width of the bars
  • 시각화 코드를 작성한다.
fig, ax = plt.subplots(figsize=(12, 6))

# 2007년과 2008년 bar chart 나란히 표현
ax.bar(months_numeric - bar_width/2, result_2007_random['house_prices'], bar_width, label='2007')
ax.bar(months_numeric + bar_width/2, result_2008_random['house_prices'], bar_width, label='2008')

# 옵션 추가
ax.set_xlabel('Month')
ax.set_ylabel('House Prices')
ax.set_title('House Prices by Month in 2007 and 2008')
ax.set_xticks(months_numeric)
ax.set_xticklabels(result_2007_random['month'])
ax.legend()

plt.tight_layout()
plt.show()
  • 핵심 코드는 ax.bar() 입니다. 여기서 두 개의 막대 그룹이 생성됩니다. 하나는 2007년 데이터를 위해 (months_numeric - bar_width/2 위치에) 그리고 다른 하나는 2008년 데이터를 위해 (months_numeric + bar_width/2 위치에) 그려집니다. **bar_width**는 막대의 폭을 제어합니다.

Untitled

Seaborn 시각화

  • 이번에는 seaborn 시각화로 진행을 합니다. 이 때에는 df_random 데이터를 별도 가공할 필요 없이 그대로 사용이 가능합니다.
  • seaborn 라이브러리에서 barplot()을 활용합니다.
import seaborn as sns 
months_numeric = np.arange(len(result_2007_random['month']))

fig, ax = plt.subplots(figsize=(12, 6))
sns.barplot(x='month', y='house_prices', hue='year', ax=ax, data=df_random)

ax.set_xlabel('Month')
ax.set_ylabel('House Prices')
ax.set_title('House Prices by Month in 2007 and 2008')

plt.tight_layout()
plt.show()

Untitled

두 라이브러리 활용법

  • seaborn으로 우선 차트를 작성 후, matplotlib 세부 옵션을 설정하는 방법이 가장 효율적입니다.