
오늘도 산뜻하게 임포트하고 시작하자
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
전자상거래 주문 데이터 시뮬레이션 (다양한 포맷이지만 파싱 가능한 형태로 구성)
ecommerce_data = {
'order_id': ['ORD001', 'ORD002', 'ORD003', 'ORD004', 'ORD005', 'ORD006'],
'order_date': ['2024-01-15', '2024-02-20', '2024-03-10', '2024-04-01', '2024-05-05', '2024-06-01'],
'delivery_date': ['2024-01-18', '2024-02-25', '2024-03-15', '2024-04-05', '2024-05-10', '2024-06-06'],
'customer_signup_date': ['2023-12-01', '2023-08-15', '2024-01-05', '2023-11-20', '2024-03-10', '2024-02-28'],
'amount': [120.50, 89.99, 156.75, 245.00, 78.25, 299.99]
}
orders_df = pd.DataFrame(ecommerce_data)
데이터 타입을 봐보자. 보시다시피 전부 다 Object다. 오라이.
print("현재 데이터 타입:")
print(orders_df.dtypes)
그래도 계산 해보고 싶다면 말리지 않겠다
diff = orders_df['delivery_date'] - orders_df['order_date']


orders_df['order_date_clean']=pd.to_datetime(orders_df['order_date'])
주문 날짜에 pd.to_datetime 할당
print("주문 날짜 변환:")
print(orders_df[['order_date', 'order_date_clean']].head(3))
변환된 데이터 타입 확인
print(orders_df[['order_date_clean', 'delivery_date_clean', 'signup_date_clean']].dtypes)
.dt는 단독으로 못 쓴다
이제 날짜 계싼이 가능해졌다. 주문일과 배송일의 차이를 계산해보자.
orders_df['delivery_days']=(orders_df['delivery_date_clean'] - orders_df['orders_date_clean'].dt.days
orders_df['delivery_days'].dtype
orders_df['delivery_days'].info()
고객 충성도 지표 계산: 고객이 가입한 후 얼마나 빨리 첫 주문을 했는지 알아보자
고객 가입 후 첫 주문까지의 기간
orders_df['days_since_signup'] = (orders_df['order_date_clean'] - orders_df['signup_date_clean']).dt.days
print("가입 후 주문까지 기간:")
print(orders_df[['order_id', 'days_since_signup']])
orders_df['order_year']=orders_df['order_date_clean'].dt.year
print(orders_df[['order_id','order_year']])
orders_df['order_month'] = orders_df['order_date_clean'].dt.month
print(orders_df[['order_id', 'order_month']])
* day_name()은 유일하게 괄호를 쓴다!!!!!!!
orders_df['order_days'] = orders_df['order_date_clean'].dt.day_name()
print(orders_df[['order_id', 'order_days']])
orders_df['quarter'] = orders_df['order_date_clean'].dt.quarter
orders_df[['order_id', 'order_date_clean', 'quarter']]
# 연도-분기 조합으로 더 유용한 정보 만들기
orders_df['year_quarter'] = (orders_df['order_date_clean'].dt.year.astype(str) +
'Q' + orders_df['quarter'].astype(str))
print("연도-분기:")
print(orders_df[['order_id', 'year_quarter']])
orders_df['is_weekend']=orders_df['order_date_clean'].dt.dayofweek>=5
#true인 값만 받게 된다.
orders_df[['order_id','order_weekday', 'is_weekend']]
3일 이내는 빠른 배송으로 평가
orders_df['is_quick_delivery'] = orders_df['delivery_days'] <= 3
orders_df[['order_id', 'delivery_days', 'is_quick_delivery']]
가입 후 30일 이내 주문한 고객을 '신규 고객'으로 정의
orders_df['is_new_customer'] = orders_df['days_since_signup'] <= 30
print("신규 고객 여부:")
print(orders_df[['order_id', 'days_since_signup', 'is_new_customer']])
orders_df['is_month_start'] = orders_df['order_date_clean'].dt.day <= 7
print("월초 주문 여부:")
print(orders_df[['order_id', 'order_date_clean', 'is_month_start']])
orders_df['is_month_end'] = orders_df['order_date_clean'].dt.day >= 25
print("월말 주문 여부:")
print(orders_df[['order_id', 'order_date_clean', 'is_month_end']])