•중앙값을 포함한 사분위수를 시각화하는 통계분석 도구 •박스플롯으로 볼 수 있는 통계량 - 제1사분위수(25%), 중앙값(50%), 제3사분위수(75%) - IQR (InterQuartile Range) = 제3사분위수 - 제1사분위수 - 최솟값 = 제1사분위수 - 1.5*IQR 보다 큰 값들 중 최솟값 - 최댓값 = 제3사분위수 + 1.5*IQR 보다 작은 값들 중 최댓값 - 이상치 = 위 최댓값과 최솟값을 넘어가는 값들
plt.boxplot()
sns.boxplot()
0️⃣ 패키지 & 데이터프레임 불러오기
예시가 될 데이터셋은 Kaggle에서 가져온 Flight Price Prediction 입니다.
# 패키지 불러오기
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)
1️⃣ sns 박스플롯 그리기 :: sns.boxplot
박스플롯 생성: sns.boxplot(data=데이터프레임, x=범주, y=수치)
# 박스플롯 생성
sns.boxplot(data=df, x='arrival_time', y='price')
박스플롯을 보니 시간대별로 최솟값, 제1사분위수, 중앙값은 크게 차이나지 않고 비슷한 편이네요.
이른아침과 심야 비행편이 눈에 띄게 낮은 가격대에 분포하고 있습니다. 제3사분위수가 다른 시간대에 비해 상당히 낮네요. 아래와 같이 평균값을 도출해봐도 꽤 낮은 가격입니다. 다만 박스플롯에서 보이듯이 높은 가격의 이상치도 많습니다.
2️⃣ 박스플롯 커스터마이징
아래와 같이 다양한 요소로 박스플롯의 디자인요소를 커스텀할 수 있습니다.
boxplot 생성 시 hue 요소를 추가하여, 분류할 카테고리 변수를 추가할 수도 있습니다.
# 그래프 스타일 및 한글출력 설정
sns.set_theme(
style = 'whitegrid', # 그래프 배경 지정
font = 'NanumBarunGothic', # 한글 폰트 지정
rc = {'figure.figsize' : (12,6), # 그래프 크기 지정
'axes.unicode_minus' : False}
)
# 박스플롯 생성
boxplot = sns.boxplot(
data=df, x='arrival_time', y='price', # 데이터 지정
hue='class', # 색상으로 구분할 카테고리 변수
width=.5, # 박스 두께
fliersize = 2, # 이상치 점 크기
palette=plt.cm.Set3.colors # 색상 팔레트 지정
)
# 축 범위, 축 이름, 그래프 제목 지정하기
boxplot.set(
xlabel = '출발시간 (arrival_time)',
ylabel = '가격 (price)',
title = '출발시간에 따른 좌석별 가격 박스플롯'
)
출발시간에서 좌석클래스로 한번더 카테고리를 나누고 보니 이코노미석은 시간대별로 차이가 그렇게 크지 않고, 분포도 넓지 않은 편입니다. 그에 비하면 비즈니스석은 시간대에 따라 차이가 약간 있는 편이고, 가격 분포가 상당히 넓습니다.
위에서 좌석을 나누기 전에는 이른아침과 심야시간 가격대가 낮고, 높은 이상치가 많은 편이었는데 이렇게 나누고 보니 높은 이상치는 비즈니스석 가격이었던 것 같네요.