일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리스트
- 이중for문
- 데이터시각화
- DATE_SUB
- 가설검정
- 태블로
- Set
- SQL
- 선형회귀
- Max
- Leetcode
- f-string
- SQLD
- 내일배움일지
- 내일배움캠프
- 다중공선성
- AB테스트
- ★
- Join
- Til
- 시각화
- 아티클스터디
- 통계학
- map
- python
- 내배캠_학습기록
- 한줄for문
- 데이터전처리
- 반복문
- 프로그래머스
- Today
- Total
노력에는 지름길이 없으니까요
② 데이터 파악 (미완) 본문
데이터 구성
customers= pd.read_csv('dataset/customers.csv')
orders= pd.read_csv('dataset/orders.csv')
order_items= pd.read_csv('dataset/order_items.csv')
payments= pd.read_csv('dataset/payments.csv')
products= pd.read_csv('dataset/products.csv')
사용할 수 있는 데이터셋은 크게 다섯가지이다.
각 데이터셋의 컬럼 설명은 이하와 같다.
- orders
order_id: 주문 ID
customer_id: 고객 ID
order_status: 주문 상태
order_purchase_timestamp: 주문 구매 시간
order_approved_at: 주문 승인 시간
order_delivered_timestamp: 주문 배송 완료 시간
order_estimated_delivery_date: 예상 배송 날짜
→ 시간 전처리 필요
- order_items_df
order_id 주문id
order_item_id 주문상품id → 한 order_id 당 제품 단위
product_id 제품id
seller_id 판매자id
price (주문상품)가격
shipping_charges (주문상품)배송비
- customers (고객)
제품이 배송되는 곳의 정보
customer_id: 고객 ID - cusomers(고객) 테이블의 기본키
customer_zip_code_prefix: 고객 우편 번호
customer_city: 고객 거주 도시
customer_state: 고객 거주 주
- payments_df
order_id 주문id
payment_sequential 결제횟수(임시) → 모호함.
payment_type 결제방식
payment_installments 결제할부기간
payment_value 결제액
- products (상품)
product_id: 상품 ID - products(상품) 테이블의 기본키
product_category_name: 상품이 속한 카테고리명
product_weight_g: 상품 무게 (g)
product_length_cm: 상품 길이 (cm)
product_height_cm: 상품 높이(cm)
product_width_cm: 상품 너비 (cm)
결측치 파악
결측치가 존재하는 데이터셋만을 게시한다.
전처리 리스트
파생변수 생성
product_length_cm: 상품 길이 (cm)
product_height_cm: 상품 높이(cm)
product_width_cm: 상품 너비 (cm)
우선 위의 컬럼을 활용하여 상품의 부피라는 파생변수를 생성했다.
- id가 int형으로 되어있는 컬럼에 대해 str로 형 변환
- 예) order_items_df['order_item_id'] = order_items_df['order_item_id'].astype(str)
- order_status = 'canceled'일 때, order_approved_at 등이 null이 아닐 시 오히려 문제가 됨
데이터 EDA
Orders 데이터셋
시간과 관련된 컬럼이 많은 양을 차지했다.
정합성 판단을 위해 구매시간, 구매확정시간, 배달시간 간의 관계를 알아보았다.
이론적으로 구매 → 구매확정 → 배달의 순으로 주문이 진행될 것이기 때문에, 위 생성한 컬럼의 값이 너무 비정상적으로 크거나 음수가 나와서는 안 된다.
눈에 띄는 점은 아래와 같다.
두 컬럼의 개수가 일치하지 않음. 하나의 컬럼에 na값이 있을 확률이 크다.
Customer 데이터셋
- customer_zip_code_prefix
: 고객 우편번호 접두사
- customer_city
: 도시
- customer_state
: 주
customer_city와 customer_state를 확인해본 결과, 본 데이터셋의 출처가 브라질임을 파악했다.
또한, 전체적으로 데이터가 굉장히 skewed되어 있음을 파악했다.
customer_city도 sao paulo (상 파울로) 데이터가 대부분이고, customer_state 역시 SP로 대부분 쏠려 있다.
레코드 수 순위를 살펴보면, 양이 많을수록 관광지이거나 브라질내에서 유명한 장소임을 파악하였고, 두 컬럼이 시사하는 정보가 유사함을 고려해 customer_state만을 분석에 활용하기로 결정했다.
명목형 변수가 대부분이기 때문에 인코딩이 필요할 것이다.
브라질 도메인 지식의 조사 결과는 아래와 같다.
- 브라질은 기본적으로 넓은 영토의 국가로, 지역간의 경제적 차이가 지역별 물류센터수와 배송에 있어서 차이가 납니다.
- 지역별 경제적 차이
- → 남동부 : 브라질의 경제 중심지로, 가장 발전된 물류 인프라를 형성하고 있습니다. 이 지역에서는 빠르고 효율적인 배송을 위해서 이 지역에 물류센터를 집중적으로 배치하고 있습니다.
- → 북동부 : 남동부에 비해서 경제적으로 덜 발달되어 있으며 때문에 물류 인프라도 상대적으로 덜 발달되어 있습니다. 그 결과 배송시간이 길어질 수 있으며, 배송 비용이 증가할 가능성이 있습니다.
- → 북부, 중서부 : 인구의 수가 가장 적은 지역입니다. 많은 국토가 아마존 같이 숲을 이루고 있고 이 지역으로의 배송은 주로 항공이나 해송 운송에 의존을 하고 있습니다. 그 결과 배송의 시간이 기존 7일이 넘어가는 경우가 많으며 비용이 크게 증가할 수 있습니다.
- 배송 시간과 비용 대도시:
- 상파울루, 리우데자네이루와 같은 대도시에서는 다음날 또는 당일 배송이 가능한 서비스가 점점 늘어나고 있습니다.
- 외곽 지역: 대도시에서 멀리 떨어진 지역에서는 배송 시간이 7일 이상 걸릴 수 있으며, 배송비도 크게 증가합니다. 이는 특히 북부와 중서부 지역의 현상으로 볼 수 있고 일부 외진 지역에서는 배송이 불가능한 경우도 있습니다.
- → 배송 시간, 거리에 따라서 상대적으로 배송 비용이 높아질 수 있습니다.
할부기간(단기/장기 나누기)
median 값 기준으로 나누기
# 단기와 장기로 나누기
def classify_installments(installments, median):
if installments <= median:
return 'Short-Term'
else:
return 'Long-Term'
retail_df_merged['payment_installments_category'] = retail_df_merged['payment_installments'].apply(lambda x: classify_installments(x, payment_installments_median))
'내일배움캠프 일지 > 팀 프로젝트2' 카테고리의 다른 글
① 프로젝트 주제 - 고객 패턴확인 (2) | 2024.09.16 |
---|