1. 프로젝트 기간 : 2024/12/2~2024/12/6 ( 5일간)
2. 선정 데이터 : eCommerce Events History in Cosmetics Shop (kaggle)
3. 팀원 : 총 5명
4. 담당 업무 : 데이터 전처리, SQL 조회(RFM 고객 세분화 위주), 시각화, 인사이트 도출 및 액션 플랜 제안등
프로젝트1 | DBeaver에서 대용량 데이터 셋(csv) IMPORT 하기 / 오류 상황 해결법
이번 EDA 프로젝트에서 우리팀이 선정한 데이터 셋은 kaggle의 'eCommerce Events History in Cosmetics Shop' 데이터이다. 테이블 및 컬럼은 간단하게 구성되어있지만, 유저의 이벤트 데이터셋이므로 용량이
cookievlog.tistory.com
디비버에 데이터셋을 삽입하고 본격적으로 프로젝트를 진행했다.(대용량 데이터 셋 IMPORT 관련 : 위 링크 참고)
프로젝트 시작에 앞서, 테이블 EDA를 진행했다.
📂 EDA 1. 테이블 user_id 와 user_session의 관계 파악
- 용량 문제로 feb_2월 기준으로 EDA를 진행했다.
- PK(고유키) 컬럼 관계성 파악 `왜?` 해당 데이터는 유저의 행동 로그 데이터이기 때문에 유저id와 세션 id의 관계성 파악이 필요
- 결론 : user_id 와 user_session 은 n:m 관계이다. 즉, 유저당 여러개의 세션이 있고, 세션당 여러개의 유저가 있을 수 있다. ( = 세션이 중복 됨.)
- 적용점 : 유저 event 관련 지표 활용시, 두 컬럼을 합쳐 복합키 생성 후 진행해야 누락 & 중복이 없음.
-- 1. user_id 와 user_session 의 관계 1:n
SELECT user_id
,COUNT(DISTINCT user_session)
FROM feb_2020 f
GROUP BY user_id
ORDER BY 2 DESC;
-- 2. user_id 와 user_session 의 관계 m:1
SELECT user_session
,COUNT(DISTINCT user_id)
FROM feb_2020 f
GROUP BY user_session
ORDER BY 2 DESC;
📂컬럼 별 NULL 값 OR 공백 값 확인
- `왜?` 컬럼별 NULL 값 혹은 공백 값 확인 하여 집계 및 연산시 어떻게 처리할 것인지 결정 필요
- 결론 : 전체 NULL 값은 없음. CATEGORY_CODE, CATEGORY_ID,BRAND 컬럼엔 공백(' ') 존재.
- 적용점 : 빈 값 처리시 NULL 말고, 공백 행으로 구분하여 처리 해주어야 함
-- 1. NULL 값 확인 : 모든 행 수 동일(=NULL 없음)
SELECT COUNT(*)
,COUNT(user_id)
,COUNT(user_session)
,COUNT(event_time)
,COUNT(event_type)
,COUNT(product_id)
,COUNT(category_id)
,COUNT(category_code)
,COUNT(brand)
FROM feb_2020 f ;
-- 2. null 값 x, 공백값 존재
SELECT *
FROM feb_2020 f
WHERE category_id = ' '
OR category_id IS NULL
OR brand = ' '
OR brand IS NULL;
📂가격 (PRICE) 값 확인 (환불등 마이너스 지표 파악)
- `왜?` 가격 컬럼 집계 및 연산시 마이너스 값을 고려하여 진행 해야함.
- 결론 : 1월에 마이너스 데이터 있음 / 환불 금액: -3,674.64, 환불 건수 :109
- 적용점 : 가격 집계 시 마이너스값 제외 해야함. 마이너스 데이터의 의미 분석 필요
WITH total AS ( -- 월별 전체 데이터 연결
SELECT * FROM feb_2020 f WHERE PRICE<=0 AND event_type ='purchase'
UNION
SELECT * FROM dec_2019 d WHERE PRICE<=0 AND event_type ='purchase'
UNION
SELECT * FROM nov_2019 n WHERE PRICE<=0 AND event_type ='purchase'
UNION
SELECT * FROM oct_2019 o WHERE PRICE<=0 AND event_type ='purchase'
UNION
SELECT * FROM jan_2020 j WHERE PRICE<=0 AND event_type ='purchase'
)
SELECT COUNT(DISTINCT user_id) AS re_cnts -- 환불 건수 토탈(고객수)
,SUM(price) AS re_amount -- 환불 금액 토탈
FROM total;
EDA의 중요성은 실습 및 문제풀이에서 체감 했지만, 이번 실습 과정에서 또 한번 EDA의 중요성을 느꼈다. 디테일한 EDA는 정확한 전처리를 가능하게 하고, 잘못 결론낼 수 있는 오류를 줄여주는 것 같다. 내일은 문제 정의와 목표 분석내용들을 담아보겠다.
'SQL' 카테고리의 다른 글
SQL 실습 | 결제 이상치 (STD 통계 함수) / 월별 증감률 계산 (재귀적 CTE) (0) | 2024.12.06 |
---|---|
코테 준비 | 프로그래머스 취소되지 않은 진료 예약 조회/자동차 대여 기록에서 대여중/ 대여 가능 여부 구분하기 (3) | 2024.12.06 |
SQL 실습 | Kaggle 데이터 샘플로 분석하기 1 (Brazilian E-Commerce Public Dataset by Olist) (0) | 2024.12.03 |
프로젝트1 | DBeaver에서 대용량 데이터 셋(csv) IMPORT 하기 / 오류 상황 해결법 (0) | 2024.12.03 |
코테 준비 | 해커 랭크 BINARY TREE NODES (0) | 2024.11.29 |