예시가 될 데이터셋은 Kaggle에서 가져온 Flight Price Prediction 입니다.
좌석(class) 이코노미석인 데이터셋만 걸러서, 비행까지 남은일수(days_left)와 가격(price)간의 관계를 알아보니 상관계수 약 -0.56로 상당한 음의 상관관계를 보여주고 있네요.
산점도와 회귀선까지 시각화해서 두 칼럼간의 관계를 좀더 분석해보겠습니다.
# 패키지 불러오기
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')
# 좌석(class) 이코노미석인 데이터셋만 선택
df_economy = df[df['class']=='Economy']
# 비행기 출발까지 남은일수(days_left)와 가격(price)간의 상관관계 알아보기
df_economy.corr(numeric_only=True)['days_left']
1️⃣ sns 산점도 + 선형회귀 직선 그리기 :: sns.lmplot
seaborn의 lmplot() 메소드로 산점도와 선형회귀 직선을 함께 그릴 수 있습니다.
# lmplot으로 산점도+회귀선 그리기
sns.lmplot(
data = df_economy, x = 'days_left', y = 'price', # 데이터 지정
scatter_kws = {'color':'orange', 'alpha':0.5}, markers = '+', # 산점도 디자인
line_kws = {'color':'green'} # 회귀선 디자인
)
col 혹은 row 요소를 추가해서, 또다른 범주형 데이터를 기준으로 분리해서 서브플롯을 여러개 그릴수도 있습니다.
아래는 col = 'stops' 를 추가하여, 경유횟수에 따라 그래프를 나눠 그려본 결과입니다. 경유하지 않는 경우(맨 왼쪽)은 상관관계가 비교적 약해보이는데, 경유횟수가 많아질수록 음의 상관관계가 강해지는 것 같아요.
# 경유횟수(stops)에 따라 나눠서 그래프 여러개 그리기
sns.lmplot(
data = df_economy, x = 'days_left', y = 'price', # 데이터 지정
scatter_kws = {'color':'orange', 'alpha':0.5}, markers = '+', # 산점도 디자인
col = 'stops', # 특정 카테고리로 분리해서 서브플롯 생성
line_kws = {'color':'green'} # 회귀선 디자인
)