일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Leetcode
- 파이썬
- 데이터분석
- Til
- python
- Tableau
- 유데미부트캠프
- 데이터프레임
- 브루트포스 알고리즘
- 태블로
- pandas
- ndarray
- 유데미코리아
- 유데미큐레이션
- matplotlb
- 유데미
- 데이터시각화
- 넘파이
- numpy
- 취업부트캠프
- 스타터스부트캠프
- 정렬
- 백준
- DataFrame
- 코딩테스트
- 데이터드리븐
- 판다스
- 부트캠프후기
- 시각화
- 그리디 알고리즘
- Today
- Total
Diary, Data, IT
[TIL] 52일차 TIL(20230419) - SQL 미니 프로젝트 본문
[TIL] 52일차 TIL(20230419) - SQL 미니 프로젝트
📗 SQL 데이터 분석
✅ 데이터 분석 과정
1. 데이터 탐색
2. 분석 목적 설정
- 누구를 위한 분석인지, 대상을 정하고 대상에 알맞은 비즈니스 가치 창출을 위한 목적을 구체적으로 설정한다
ex) 고객 담당자, 효과적인 고객 관리 전략을 위한 데이터 분석 > 고객 세분화
3. 지표 설정 및 분석 계획
4. 데이터 추출/정제/가공/분석
5. 리포트 작성
📗 SQL 미니 프로젝트
✅ 주제 선정 과정
데이터셋을 탐색하여 목표 배송 날짜보다 늦게 도착하거나, 배송 기간이 오래걸리는 주문들이 상당수 존재한다는 사실을 알게됐다. 또 이런 주문들은 주(State)의 영향이 존재한다는 사실을 파악하였다.
그렇다면 배송이 오래걸리고, 운임비가 높지만, 매출이 일정 이상 발생하는 지역이 있다면 이 지역에 물류 창고를 설치하여 배송의 효율성을 높이고 비용은 감소하는 효과를 얻을 수 있을 것이다.
✅ 주제
지역별 판매 현황을 통해 상품 수요를 예측하고 물류 창고 신설 지역을 선정한다.
물류창고 신설 지역을 선정하는 기준은
1) 지역별 수요가 꾸준히 발생하는 지역
2) 배송이 오래걸려 배송의 개선이 필요한 지역
으로 선정했다.
✅ 사용 데이터 선정
존재하는 테이블에서 분석목적에 적합한 관련 컬럼들을 선별했다. 지역별 매출 발생량을 확인하기 위해 주문과 고객정보 데이터를 가져오고, 구체적으로 어떤 상품 혹은 카테고리에서 매출이 많이 발생하는지 살펴보기 위해 products 테이블에서 관련 정보를 가져왔다. 선정한 모든 데이터는 다음과 같다.
✅ 선정 지표
- 지역별 상품 판매 현황: 주문수량, 판매금액, 상품별 판매수량 등
- 지역별 년도별-분기별 상품 판매 현황: 주문수량, 판매금액, 상품별 판매수량 등
- 지역별 예상일차이: 예상배송일시 - 배송완료일시
✅ SQL 데이터 추출
앞서 선정한 데이터(컬럼)과 지표를 바탕으로 데이터를 추출하는 쿼리문을 작성했다.
SELECT
p.product_id,
p.product_category_name,
t.product_category_name_english 카테고리명,
o.order_id,
o.order_purchase_timestamp 구매일시,
o.order_delivered_customer_date 배송완료일시,
o.order_estimated_delivery_date 예상배송일시,
oi.shipping_limit_date 배송목표일시,
oi.price,
oi.freight_value,
c.customer_unique_id,
c.customer_zip_code,
c.customer_city,
c.customer_state,
date_part('day', o.order_delivered_customer_date - o.order_purchase_timestamp) 전체배송소요기간,
date_part('day', o.order_delivered_customer_date - o.order_estimated_delivery_date) 예상일차이,
case
when date_part('hour', o.order_delivered_customer_date - oi.shipping_limit_date) < 0 then 1
WHEN date_part('hour', o.order_delivered_customer_date - oi.shipping_limit_date) >=0 then 0
end as 제한일경과여부
FROM order_items oi
JOIN orders o ON o.order_id = oi.order_id
JOIN customers c ON c.customer_id = o.customer_id
JOIN products p ON p.product_id = oi.product_id
LEFT JOIN product_category_name_translation t ON p.product_category_name = t.product_category_name
WHERE p.product_category_name notnull;
'STARTERS > TIL' 카테고리의 다른 글
[TIL] 54일차 TIL(20230421) - SQL, Tableau 개념 정리 (0) | 2023.04.24 |
---|---|
[TIL] 53일차 TIL(20230420) - SQL 미니 프로젝트 2 (0) | 2023.04.20 |
[TIL] 51일차 TIL(20230418) - SQL RFM 분석, 재구매율, 이탈률 분석 (0) | 2023.04.18 |
[TIL] 50일차 TIL(20230417) - SQL 고객분석 (0) | 2023.04.17 |
[TIL] 49일차 TIL(20230414) - SQL Z차트, 그룹함수(grouping sets, roll up) (0) | 2023.04.14 |