회고/기타 프로젝트

[기초 프로젝트] 1. 데이터 수집→정리→살펴보기

0sean 2024. 1. 11. 20:24

 

먼저 읽어보면 좋은 자료

데이터 리터러시 : Funnul, AARRR (tistory.com)

 

데이터 리터러시 : Funnul, AARRR

01 데이터 리터러시, 데이터 문해력_오준엽 강사님 [목차] 1-1 데이터 리터러시 1-2 문제정의 1-3 데이터의 유형 1-4 지표 설정 1-5 결론 도출 1-1 데이터 리터러시 [목차] 1. 데이터 리터러시 정의 2. 데

specialda.tistory.com

 

인 사이트

  • 두괄식 좋아하니까 이번엔 인사이트를 먼저 적어보겠다.
  • 파이썬으로 딕셔너리 자료형 분리하는 방법 알아두기.
  • 문제 정의 및 가설 설정의 어려움은 튜텨님을 만나 해결함.
  • (기본적으로 기초 통계량 분석을 통해 문제를 파악하고 전략을 수립했다.)
  • 데이터의 속성을 정확히 파악하는 것도 중요한 과정임.
  • 데이터 불러올 때 형식을 설정하는 것도 중요하다.
  • 새로운 테이블을 생성해서 결과를 도출하는 것 유용하다.
  • 팀장으로서, 프로젝트 일정을 잡고 진행하는 것이 진행률에 도움된다.
  • 팀장으로서, 아침/점심/오후 세 타임마다 만나서 회의하는 것을 습관화한다. (= 팀규칙)
  • 팀 규칙은 별 것 아닌 것 같아도 진행률에 도움이 된다.
  • 팀장으로서, 서포트 해 줄 부팀장을 선출해두는 것도 좋다.
  • 근데 좋은 팀원분들을 만나는 게 제일 좋다b
  • 마지막 발표가 끝나고 회고하는 시간에 회고하는 방법! 꿀팁

 

좋았던 점

  • 학습 내용을 바탕으로 같이 데이터를 정리하고 기초 통계량을 분석한 뒤,
  • 문제를 정의하고 분석 목록을 만들어 기초 분석을 시작하기로 했다.
  • 모든 과정 중에서 데이터 전처리 과정이 무척 흥미롭게 느껴졌다.

 

도전한 점

 

01 서론

 

1. 프로젝트 개요 : 왜 이 프로젝트를 수행하는지 간단히 설명

데이터를 바탕으로 고객 세분화를 통한 고객 별 프로모션 전략 수립

2. 목적과 목표 설정 : 예상되는 결과에 대한 간략한 언급

기존 고객층의 이탈을 막고 신규 고객의 유입으로 인한 매출 상승 효과 기대

3. 프로젝트 일정

11일(목) : 발제 및 프로젝트 기획안 제출 [완료]
12일(금) : 2시까지 데이터 전처리 → 이후 분석 진행 [완료]
13일(토) : 할당된 데이터 분석 [완료]

14일(일) : 할당된 데이터 분석 [완료]
15일(월) : 시각화 → 결론 도출 [피피티도 부분완료]
16일(화) : 피피티, 제출용 영상 제작 [피피티까지 완료]
17일(수) : 마지막 튜터 상담, 제출 마감일

4. 프로젝트 팀 규칙

매일 오전 10시, 2시, 5시 : 프로젝트 진행, 문제점 공유
매일 오후 8시 30분 : 프로젝트 진척도 확인

 

02 데이터 수집

 

1. 데이터 수집 방법 : 어디서 데이터를 얻었는지

 

Starbucks Customer Data

Starbucks customer dataset

www.kaggle.com

 

2. 수집한 데이터의 형식과 속성 : 데이터가 어떤 형태인지

  • portfolio : 각 프로모션에 대한 기본 정보
    1. ID : (인덱스를 의미한다면 처리)
    2. Reward : 제안을 완료한 경우에 주어지는 보상 (제공 타입에 따라서 달라지는 할인 금액)
    3. Channels : web, email, mobile, social 리스트 형태
    4. Difficulty : 제안을 완료하는데 필요한 최소 지출 (최소 구매액)
    5. Duration : 지속? (유효기간 3일~10일)
    6. offer_type : 제안 종류 (BOGO1+1쿠폰, 할인, 정보성알림제공)
    7. id : 프로모션 자체 ID (promotion_id → 컬럼명 변경 필요)
  • profile : 고객별 나이, 연봉, 성별 데이터. 1개의 레코드에 한명의 고유 고객 정보
    1. ID : (인덱스를 의미한다면 처리)
    2. Gender : 성별 (’O’, null 데이터(*전체 14%*) 삭제할지 말지?)
    3. Age : 연령 (90세 이상 처리할지?)
    4. ID : 고객 ID (customer_id → 컬럼명 변경 필요)
    5. Became_member (날짜 데이터)
    6. Income (소득수준 30k~120k)
  • transcript : 고객이 받은 할인 정보의 다양한 단계
    1. ID : (인덱스를 의미한다면 처리)
    2. Person : 고객 ID (customer_id)
    3. Event : 기록 조회 (transaction,offer received, offer viewed, offer completed > 거래금액, 할인쿠폰 받았는지, 보기만했는지, 쿠폰을 썼는지)
    4. Value : {오퍼아이디 : 프로모션 ID}
    5. Time (t=0에서 시간이 얼마나 경과했는지 보여줌.)

 

3. 데이터 수집 과정에서의 어려움 및 해결책

Q. 'time = 0' 해석 : 프로모션을 제공하고 1시간 이내로 액션이 발생했다고 이해했다. 맞는가?

A. 한 고객의 프로모션 관련 구매 사이클이라고 생각하면 쉽다.

 

 

Q. SQL 을 사용한 분석 프로젝트인데 분석 이후 시각화의 방법도 정해져 있는지 궁금하다.

A. 편하신대로(아마 엑셀?) 시각화 방법은 목적을 달성하기 위해서 본인이 편한 걸로 하면 된다.

 

Q. 날짜 데이터지만 숫자 형식인데 날짜 타입 데이터로 영구 변환 가능한지? 현재 str_to_date 사용.

A. 현재 쓴 영구 변환 쿼리 코드도 맞고(왜 안되는지?) 더 정확하게 형식을 부여할 수도 있다. 하지만 현재 배우지 않은 부분이고 제일 편한 방법은 디비버로 파일을 가져올 때 타입을 변경하면 된다.

 

(1) 일단 사용한 영구 변환 쿼리문

ALTER TABLE profile
MODIFY COLUMN became_member_on DATE;

UPDATE profile
SET became_member_on = STR_TO_DATE(became_member_on, '%Y-%m-%d');

 

(2) 디비버를 활용한 파일 불러오기

 

1. (기존의 csv파일은 삭제하는 것이 좋다. 아니면 아래에 붙여짐)

 

 

2. 해당 데이터베이스의 테이블을 우클릭하고 데이터를 가져온다.

 

 

3. 다음을 누르고 파일을 선택하면 아래와 같은 창이 뜬다.

 

 

4. 다음을 누르고 (다음을 연타하지 말고) 잠시 멈춘다.

 

 

5. Configure 을 누르고 데이터 타입을 'DATETIME'로 변경하면 된다.

 

 

6. 프리뷰 버튼으로 확인해보면 안된 것 같은데 실행하면 적용되어 있다.

 

 

03-1 데이터 정리 : 분류

 

1. 결측치 처리 : 누락된 정보 확인하고 채우기

  • Null 값 처리 (gender에 있는 null)

2. 이상치 탐지 및 처리 : 이상한 값 찾아서 수정

  • age 값이 101이 넘는 소수 데이터 처리 (where)

3. 데이터 정규화 및 표준화 : 데이터 이해하기 쉽게 변환

  • 딕셔너리로 묶여있는 데이터 분해 (transcript > value)
  • 인덱스(1,2,3…) 무의미한 컬럼 삭제
  • 세 테이블 모두 중복되는 ID 변경 (customers_id, promotion_id)
  • 고객의 연령 처리 기준 정하기 (case when)
  • ID 식별이 용이하도록 변경하기 (컬럼명 : offer_detail / 값 : bogo_3, info_3 등)

 

03-2 데이터 정리 : 모음

 

1. 딕셔너리로 묶여있는 데이터 분해 (transcript > value)
2. portfolio의 Channels 리스트 형태의 데이터 타입 -> 일단 그대로 쓰기로
3. transcript의 Time 컬럼 정의 (→ 튜터님)
4. 인덱스(1,2,3…) 무의미한 컬럼 삭제
5. 세 테이블 모두 중복되는 ID 변경
6. Null 값 처리 (gender에 있는 null)
7. 고객의 연령 처리 기준 정하기 (case when)

ex) 18~39 / 40~59 / 60~79 / 80~ / 118이상은 null

8. ID 식별이 용이하도록 변경하기

ex) 컬럼명 : offer_detail |  값 : bogo_3, info_3

9. 프로필의 날짜 데이터를 영구 변환

10. age 값이 101이 넘는 소수 데이터 처리

 

03-3 데이터 정리 : 한계점 및 극복

 

1. 딕셔너리 자료형 분해하기 (pandas, json)

 

CSV 파일 딕셔너리형 분해하기

코드 import pandas as pd import json #하단에 파일 저장경로 저장 df = pd.read_csv('C:/Users/snowg/OneDrive/Documents/transcript.csv') #함수 생성 def get_offer_value(x): x = x.replace('\'','"') return json.loads(x)['offer id'] def get_offer_

specialda.tistory.com

 

후기 : 튜터님의 파이썬 도움을 받았다. 스스로도 해봐야겠다. 꼭!

 

2. 불필요한 컬럼 삭제 및 컬럼 명 변경

# 인덱스 컬럼 삭제
ALTER TABLE profile DROP COLUMN Column1;
ALTER TABLE portfolio DROP COLUMN Column1;
ALTER TABLE transcript_prep DROP COLUMN `Unnamed: 0`;

# 컬럼명 변경
ALTER TABLE profile CHANGE `id` customer_id VARCHAR(35);
ALTER TABLE portfolio CHANGE `id` promotion_id VARCHAR(35);
ALTER TABLE transcript_prep CHANGE `person` customer_id VARCHAR(35);
ALTER TABLE transcript_prep CHANGE `value` promotion_id VARCHAR(65);

 

또는

ALTER TABLE profile RENAME COLUMN id TO customer_id ;
ALTER TABLE portfolio RENAME COLUMN id TO promotion_id ;
ALTER TABLE transcript_prep RENAME COLUMN person TO customer_id ;
ALTER TABLE transcript_prep RENAME COLUMN offer_id TO promotion_id ;

 

후기 : 문자열 값을 넉넉하게 주니 에러가 해결되었다. 두 번째 쿼리문을 사용하면 더 간단하다.

 

04 데이터 살펴보기 (노션 참고)

 

1. 기초 통계량 분석

2. 시각화를 통한 데이터 탐색 : 간단한 그래프나 표를 통해 데이터를 시각화

3. 변수 간 상관 관계 분석 : 데이터 간의 연관성 찾기

 

- 시현 : 성별, 연령별, 소득별 고객 데이터 분석
- 희정 : 고객별(성별, 연령별, 소득별) 주문 분석 (주문건수) + 고객별(성별, 연령별, 소득별) 쿠폰 사용 분석 (사용완료)
- 은정 : 채널(웹, 이메일, 모바일, 소셜)별 쿠폰 사용 분석
- 민주 : 쿠폰 타입(정보성, 할인, 보고)별 쿠폰 사용 분석
- 수경 : 가입일자별 고객 주문 분석
    - 가입월별(일자가 넘 많음) event(offer completed, offer received, offer viewed, transaction) 횟수
- 가입일자별 쿠폰이용 분석
- 쿠폰 타입별 매출 영향 분석
- 추가로 고객별 쿠폰 사용 완료 + 주문 건수 분석할 수 있겠음.

 

[기초 프로젝트] 데이터 기초 통계량 분석 (tistory.com)

 

[기초 프로젝트] 데이터 기초 통계량 분석

01 이전에 업로드한 프로젝트 진행상황 [기초 프로젝트] 데이터 수집→정리→살펴보기(기초 통계량 분석) (tistory.com) [기초 프로젝트] 데이터 수집→정리→살펴보기(기초 통계량 분석) 먼저 읽어

specialda.tistory.com

 

05 참고 자료

 

1. 새로운 데이터 테이블 만드는 방법(tip)

 

2. 예상치 못하게 컬럼명 새생성으로 인 데이터 가져오기 에러를 만난다면? 체크박스 해제.