예시가 될 데이터셋은 Kaggle에서 가져온 Flight Price Prediction 입니다.
출발시간(departure_time)별로 빈도수가 어떻게 다른지 빈도 그래프를 작성해보겠습니다.
# 패키지 불러오기
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.countplot
범주형데이터에 포함된 항목별로 빈도수를 카운트해서, 빈도그래프를 그리고 싶을 때 sns.countplot을 활용할 수 있습니다.
카운트할 칼럼은 x 에 넣어주면 됩니다. x = 'departure_time'
칼럼 내 항목들의 순서를 정하고 싶다면, 아래 코드처럼 order를 활용합니다. order = 리스트
여기서 범례를 추가하고 싶다면 hue 를 추가합니다. hue = 'class' 를 추가해서 좌석클래스 별로 그래프 컬러를 구분했습니다.
# 빈도그래프 작성
countplot_1 = sns.countplot(
data = df, # 데이터 지정
x = 'departure_time', # '출발시간' 기준으로 빈도그래프 작성
order = ['Early_Morning','Morning','Afternoon','Evening','Night','Late_Night'], # 데이터 순서
hue = 'class', # '좌석클래스' 기준으로 색상 구분
palette = plt.cm.Set2.colors # 색상 팔레트 지정
)
# 데이터 라벨 추가
for i in countplot_1.containers:
countplot_1.bar_label(i,fontsize=8)
2️⃣ 빈도가 아닌 비율(퍼센트) 기준으로 그래프 작성하기 (percent)
그래프를 빈도수가 아닌 비율로 비교해서 작성하고 싶다면, stat = 'percent' 를 추가합니다.
막대별로 퍼센트수치 라벨을 표시하는 방법은 아래 코드를 참고해주세요.
# 빈도그래프 작성
countplot_2 = sns.countplot(
data = df, # 데이터 지정
x = 'departure_time', # '출발시간' 기준으로 빈도그래프 작성
order = ['Early_Morning','Morning','Afternoon','Evening','Night','Late_Night'], # 데이터 순서
stat = 'percent', # 빈도수를 퍼센트로 변환
hue = 'class', # '좌석클래스' 기준으로 색상 구분
palette = plt.cm.Set2.colors # 색상 팔레트 지정
)
# 데이터 라벨 추가
for i in countplot_2.containers:
countplot_2.bar_label(i,fontsize=8,fmt='%.2f%%')
3️⃣ 가로 그래프로 작성하기 (horizontal)
그래프를 가로로 작성하고 싶다면, x 대신 y 에 카운트할 칼럼을 넣어주면 됩니다. y = 'departure_time'
# 빈도그래프 작성
countplot_3 = sns.countplot(
data = df, # 데이터 지정
y = 'departure_time', # '출발시간' 기준으로 빈도그래프 작성
order = ['Early_Morning','Morning','Afternoon','Evening','Night','Late_Night'], # 데이터 순서
stat = 'percent', # 빈도수를 퍼센트로 변환
hue = 'class', # '좌석클래스' 기준으로 색상 구분
palette = plt.cm.Set2.colors # 색상 팔레트 지정
)
# 데이터 라벨 추가
for i in countplot_3.containers:
countplot_3.bar_label(i,fontsize=8,fmt='%.2f%%')
# x축 눈금 설정하기
countplot_3.set_xticks(np.arange(0,19,2))