
< 이커머스 주문 데이터 분석과 사업 현황 >
- 진행방식
- Google Big Query
- 태블로 / 루커스튜디오
- Data set : kaggle ( olist )
Brazilian E Commerce Public Dataset by Olist**
제품/주문/고객/주문상품/카테고리명 번역
약 10만건의 실제 브라질 이커머스 주문 데이터
지리정보, 리뷰 등 다양한 데이터 포함
기간 : 2016 ~ 2018
샘플링, 익명화 완료
여러가지 데이터셋으로 쪼개어져 있음
객단가
Data Warehouse?
서비스와 연결되어 있는 데이터로부터 분석을 위해 따로 모아둔 데이터 창고 같은 곳
기본적으로 SQL 문법 사용
프로젝트 > 데이터 세트 > 테이블
탭 구분 기능 활용 ~
지표
매출
with 절
WITH tb명 AS (table만드는 쿼리);WITH tb명_1 AS (), tb명_2 AS (), ... ;날짜 다루기
| 유형 | ||
|---|---|---|
| DATE | 2024-10-14 | |
| DATETIME | 2024-10-14T11:54:50 | |
| TIMESTAMP | 2024-10-14 11:54:50 UTC | 타임존 정보 포함 - 한국:UTC+9 |
| TIME | 11:54:50 |
DATE ( TIMESTAMP “2024-10-14 11:54:50+08", "America/Los_Angeles" ) - 지역 반영해서 DATE 형식으로 변환EXTRACT ('추출 부분' FROM '날짜 컬럼') - 원하는 정보 추출 EXTRACT 결과 컬럼 datatype - 정수
| 추출 부분 | 의미 |
|---|---|
| YEAR | 연도 |
| MONTH | 월 |
| DAY | 일 |
| DAYOFWEEK | 요일(0:일 ~ 6:토) |
| WEEK | 주 |
| WEEK(MONDAY) | 주(월요일을 주 시작 기준 ) |
| QUARTER | 분기 |
DATE_TRUNC ( '날짜', '남기는 부분' ) - 어디까지 남길지 TRUNC 결과 컬럼 datatype - date
| 추출 부분 | 의미 | 결과(날짜) |
|---|---|---|
| YEAR | 연도 | 해당 연도 첫 날 |
| MONTH | 월 | 해당 연도, 월의 첫 날 |
| DAY | 일 | 해당 날짜 0시 0분 |
| WEEK | 주 | 해당 주차 첫 날(일) |
| WEEK(MONDAY) | 주(월요일을 주 시작 기준 ) | 해당 주차 첫 날(월) |
| QUARTER | 분기 | 해당 분기 첫 날 |
| HOUR, MINUTE, SECOND |
주석 처리 - 주석처리 하고 싶은 부분 block지정 후 “ctrl + /”
저장방식 - 열 기반
Big Query 함수
SELECT * EXCEPT ('제외할 컬럼')SELECT * REPLACE (’대체할 값’ AS ‘컬럼명’)CAST ('값' AS '데이터타입') SAFE_CAST ('값' AS '데이터타입') = error을 발생시키는 상황에서 null 반환 = 오류를 발생시키지 XCAST (’abc’ AS INT64) - errorSAFE_CAST (’abc’ AS INT64) - nullSAFE_ADD (X, Y) = X+ Y SAFE_DIVIDE (X, Y) = X / YWHERE '컬럼' IN (A, B, C) → A, B, C WHERE '컬럼' NOT IN (A, B, C) → D,EROW_NUMBER() OVER ('컬럼' PARTITION BY '기준' ORDER BY '컬럼' ASC|DESC) - 중복없는 순위 RANK() OVER ('컬럼' PARTITION BY '기준' ORDER BY '컬럼' ASC|DESC) - 동점일 때 중복 순위, 이후 그 만큼 건너 뛴 등수 DENSE_RANK() OVER ('컬럼' PARTITION BY '기준' ORDER BY '컬럼' ASC|DESC) - 동점일 때 중복 순위, 이후 순위 연속적으로<분석에 쓸 수 있는 기능>
RUNNING_SUM()ZN(SUM([])) - LOOKUP(ZN(SUM([])), -1) -ZN = null인 경우 0 반환 -LOOKUP = 지정된 offset만큼 떨어진 행 값 반환ZN(SUM([])) - LOOKUP(ZN(SUM([])), -1) / ABS(LOOKUP(ZN(SUM([])), -1))WINDOW_AVG(SUM([]), -2, 0) - 이전2개+현재 = 총 3개 구간의 평균RUNNING_SUM(SUM([]))IIF(조건, 부합할 경우 값, 나머지 경우 값) - 경우 1가지 일 때FIRST()=0 : 처음으로부터 0번째 (=가장 처음) LAST()=0{ FIXED DATETRUNC('year', [Ord Date] ) : SUM([Ord Amt]) }