✅ 막대 그래프 (바 그래프)
선 그래프 (Line Plot) |
matplotlib 메소드 |
seaborn 메소드 |
•범주/카테고리에 따른 수량과 통계량을 살펴보기에 적합함 •범주별 수치를 한눈에 대소비교 하기에 좋음
|
plt.bar() |
sns.barplot() |
0️⃣ 패키지 & 데이터프레임 불러오기
- 예시가 될 데이터셋은 Kaggle에서 가져온 Flight Price Prediction 입니다.
- airline(비행편)에 따라 price(티켓가격) 평균이 어떻게 달라지는지, 막대 그래프로 살펴보고자 합니다.
groupby 메소드로 평균값 데이터셋을 만든 다음 시각화를 진행해보겠습니다.
# 패키지 불러오기
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 데이터셋 불러오기
df = pd.read_csv('./Clean_Dataset.csv', encoding='cp949')
df = df.drop([df.columns[0]], axis=1)
# airline(비행편)별 price(티켓가격) 평균값
airline_price = df.groupby(by='airline').mean(numeric_only=True)[['price']]
1️⃣ plt 막대 그래프 그리기 :: plt.bar
- 막대그래프 생성: plt.bar(x=범주데이터, height=범주별 수치데이터)
- 데이터라벨 표시: plt.text() 활용 (아래 코드 참조)
- 눈금선 표시: plt.grid(True)
- x,y축 이름 표시하기: plt.xlabel('x축 이름'), plt.ylabel('y축 이름')
# 차트 영역 지정하기
plt.figure()
# 차트에서 한글 표시하기
plt.rcParams['font.family'] = "NanumBarunGothic"
plt.rcParams['axes.unicode_minus'] = False
# 막대그래프 그리기
plt.bar(
x = airline_price.index, # x축 = 범주
height = airline_price['price'], # y축 = 막대 높이 = 범주별 수치
color = 'c', edgecolor = 'k' # 막대, 테두리 색상 설정
)
# 데이터 라벨 표시하기
for i in range(len(airline_price)):
plt.text(
x = airline_price.index[i], # 라벨 위치 x축
y = airline_price['price'][i], # 라벨 위치 y축
s = np.round(airline_price['price'][i]), # 표시할 데이터 (반올림)
ha='center') # 막대 가운데 표시
# 눈금선 표시하기
plt.grid(True,
linewidth = 1, linestyle = ':' # 눈금선 두께, 스타일 설정
)
# x,y축 이름 정하기
plt.xlabel('비행사 (airline)', labelpad = 10)
plt.ylabel('티켓가격 (price)', labelpad = 10)
# 차트 표시하기
plt.show()
- Air_India와 Vistara의 가격만 특히 높습니다. 비행사만 기준으로 나눠서 보니 데이터가 이렇게 쏠려서 보이는 것 같아요.
좌석클래스 별로도 한번더 나눠서 막대그래프를 다시 그려보겠습니다.
2️⃣ sns 막대 그래프 그리기 :: sns.barplot
- 그래프 배경, 팔레트, 폰트 등 스타일 지정: sns.set_theme()
- 막대그래프 생성: sns.barplot(data=데이터프레임, x=범주데이터, y=범주별 수치데이터, hue=색상으로 구분할 범주)
- 범례 위치 지정: sns.move_legend(barplot, '범례 위치')
- 데이터라벨 표시: barplot.bar_label() 활용 (아래 코드 참조)
# 그래프 스타일 지정
sns.set_theme(
style='whitegrid',
palette='muted',
font='NanumBarunGothic',
rc = {'figure.figsize' : (12,6),
'axes.unicode_minus' : False}
)
# 막대그래프 그리기
barplot1 = sns.barplot(data=df, x='airline', y='price', hue='class')
# 축 범위, 축 이름, 그래프 제목 지정하기
barplot1.set(
xlabel = '비행사 (airline)',
ylabel = '티켓 가격 (price)',
title = '비행사별 좌석에 따른 평균 티켓가격'
)
# y축 눈금 설정하기
barplot1.set_yticks(np.arange(0,55000,5000))
# 범례 위치 지정하기
sns.move_legend(barplot1, 'upper left')
# 데이터 라벨 표시하기
for i in barplot1.containers:
barplot1.bar_label(i, fontsize=10)
- 예상한대로 비즈니스석 때문에 Air_India, Vistara 2개 비행사만 티켓가격 평균이 특히 높은 거였네요!
- 비즈니스석을 제외해도.. 이 2개 비행사의 이코노미석 가격도 다른 비행사들에 비해 비싼 편인 것을 알 수 있습니다.