요일별 매출액 구하기 #postgresql

hongcha_log·2023년 9월 30일
0

인프런 sql 실습 강의를 들으면서 선생님은 짚지 않고 넘어가셨지만 더 궁금한 부분을 찾아 채우고 있다. 저작권 보호를 위해 강의와 동일한 쿼리는 업로드 하지 않으며, 본문의 쿼리는 내가 궁금한 부분을 변용한 것이다.

SQL : postgresql
시각화 및 전처리: python

👀 오늘의 목표

현재 dataset에는 날짜만 알 수 있을 뿐 무슨 요일인지 나와있지 않다. 날짜에 맞는 요일로 변환하여 컬럼을 추가하고, 요일로 그룹을 묶어 어떤 요일에 판매액이 높은지 요일별 추이를 확인하는 그래프를 그려보자!

기본 dataset

👉 Step1. 날짜컬럼을 요일로 변환하기

TO_CHAR(날짜컬럼, 'day')

  • 출력값 : 소문자 요일변환 (monday, tuesday,wednesday...)

TO_CHAR(날짜컬럼, 'DAY')

  • 출력값 : 대문자 요일변환 (MONDAY,TUESDAY,WEDNESDAY...)

TO_CHAR(날짜컬럼, 'D')

  • 출력값 : 요일을 숫자로 변환 (1(일),2(월)...7(토))

👉 Step2. df에 저장하고, 시계열 추이를 확인하기

해당 그림만 보면 분명 튀는 시점이 있지만, 무슨 요일에 상승하고 무슨 요일에 하락하는지 추이를 파악하기 어려웠다. 저작권 문제가 있으므로, 내가 더 고민해본 것이 아니라 강의와 동일한 쿼리는 업로드를 생략한다.

👉 Step3. df_agg에 저장하고, 매출액이 큰 순서대로 내림차순 하기

이 단계에서 내림차순 전처리를 하지 않으면, 나중에 그래프를 그렸을 때 x열의 범주가 우리에게 익숙한 월화수목금토일 순서로 나오는 것도 아니고 문자열 기준으로 오름차순된 Friday, Monday, Saturday, Sunday ... 순서대로 출력된다.

나는 지금 어떤 요일에 매출액이 높은지 추이를 확인하려는 것이기 때문에, day를 기준으로 groupby, 매출액을 기준으로 sum을 해주었다.

⭐️ 인덱스를 열로 변환 reset_index()

df.groupby('day').sum('sum_amount').reset_index()

Before : groupby 함수로 전달한 그룹화 기준 컬럼은 그룹 연산한 결과의 index가 된다. 나중에 시각화할 때 x열로 가져올 수 없다.

After : reset_index()를 통해 열로 지정하기

⭐️ 내림차순 sort_values(ascending=False)

매출액을 기준으로 내림차순 해주었다.

df_agg = df.groupby('day').sum('sum_amount').reset_index().sort_values(by='sum_amount' , ascending=False)

👉 Step4. bar그래프 그리기

import plotly.express as px
fig = px.bar(data_frame=df_agg, x='day', y='sum_amount', color = 'sum_amount', color_continuous_scale='Blues')
fig.show()

날짜에 맞는 요일로 변환하고, 요일로 그룹을 묶어 어떤 요일에 판매액이 높은지 요일별 추이를 확인하는 그래프를 그리기 완료!

👉 결론

금요일> 월요일>화요일>수요일>목요일 순서대로 매출액이 높음을 확인했다.
프로모션을 금요일에 적극적으로 하는 방식으로 활용할 수 있을 것이다.

profile
차 마시는 것을 좋아하는 차분한 데이터분석가

0개의 댓글