06.11 전집중 호흡 복습|전처리&시각화 3회차|날짜 데이터 다루기|진짜 허버진다 허버져

아뇨 민균데요·2025년 6월 11일
0

데이터분석!

목록 보기
7/12

to_datetime()

오늘도 산뜻하게 임포트하고 시작하자

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']

to_datetime()예시

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.days)

.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']])

⏱️주문 연도, 월 등을 알아보자(.dt.year)

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()/dayofweek)

주문 날짜를 요일 영문 명칭으로 출력 해보자 day_name()

* day_name()은 유일하게 괄호를 쓴다!!!!!!!
orders_df['order_days'] = orders_df['order_date_clean'].dt.day_name()
print(orders_df[['order_id', 'order_days']])

분기별 분석(.dt.quarter)

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일 이내 주문을 신규 고객으로 구분해보자

가입 후 30일 이내 주문한 고객을 '신규 고객'으로 정의

orders_df['is_new_customer'] = orders_df['days_since_signup'] <= 30
print("신규 고객 여부:")
print(orders_df[['order_id', 'days_since_signup', 'is_new_customer']])

월초/월말 패턴 분석: 월급날이나 월말 정산의 영향을 분석해보자

월초(1-7일) 주문 여부
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']])
월말(25일 이후) 주문 여부
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']])
profile
this man을 꿈 속에서 보신 적이 있으신가요?

0개의 댓글