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()
df_random.tail()
데이터 가공
- 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
**는 막대의 폭을 제어합니다.
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()
두 라이브러리 활용법
- seaborn으로 우선 차트를 작성 후, matplotlib 세부 옵션을 설정하는 방법이 가장 효율적입니다.