심화 프로젝트 3 [48일차]

차현빈·2025년 12월 24일

들어가기

팀원들 모두 다르게 전처리를 진행하여서 기준이 되는 하나의 데이터가 필요할 것 같아서 조장님 데이터를 쓰기로 했음 일단은 Olist 데이터 중에서 영향력이 커보이는 orders 데이터를 받았음 이후에 주제를 좀 더 구체화하려고 한다.

1. 수정된 데이터 불러오기 및 확인

mod_orders = pd.read_csv('modified_orders.csv')

total_payment, total_price, total_freight, sum_price, diff 추가가 됨

기존 orders 테이블보다 결측치가 줄었다 (정말 필요없는 것들만 제거)

2. 주제 구체화

앞으로 자주 쓰일 것 같은 칼럼들이다. 왜냐하면 주제를 배송지연를 최적화로 잡았다.

# 1. 먼저 날짜 데이터로 변환 (이 작업은 반드시 먼저 해야 합니다)
mod_orders['order_delivered_customer_date'] = pd.to_datetime(mod_orders['order_delivered_customer_date'], errors='coerce')
mod_orders['order_estimated_delivery_date'] = pd.to_datetime(mod_orders['order_estimated_delivery_date'], errors='coerce')

# 2. 결과를 담을 빈 리스트 만들기
status_list = []

# 3. for문을 돌며 한 줄씩 판단하기
for index, row in mod_orders.iterrows():
    delivered = row['order_delivered_customer_date']
    estimated = row['order_estimated_delivery_date']
    
    # 날짜 데이터가 비어있는 경우(NaN) 처리
    if pd.isnull(delivered) or pd.isnull(estimated):
        status_list.append('Unknown')
    else:
        # 시간 떼고 날짜만 비교
        if delivered.date() < estimated.date():
            status_list.append('Early')
        elif delivered.date() == estimated.date():
            status_list.append('On-time')
        else:
            status_list.append('Late')

# 4. 리스트를 데이터프레임의 새 칼럼으로 넣기
mod_orders['delivery_status'] = status_list

# 확인
print(mod_orders['delivery_status'].value_counts())

배송지연을 알아보기 위해서 제일 먼저 배송지연이 얼마나 되고 있는지 확인하려고 했다.

  • 실제 배송 완료일이 배송 예정일보다 빠르면 Early
  • 실제 배송 완료일이 배송 예정일이 같으면 On-time
  • 살제 배송 완료일이 베송 예정일보다 늦으면 Late

대부분 일찍 도착함 (애초에 늦게 잡은 것 같아서 차이를 보려고 함)

actual_duration - 배송 실제 기간 (실제 배송 완료일 - 구매 일시)

# 1. 날짜 타입으로 확실하게 변환 (필요한 것만 콕 집어서)
mod_orders['order_purchase_timestamp'] = pd.to_datetime(mod_orders['order_purchase_timestamp'], errors='coerce')
mod_orders['order_delivered_customer_date'] = pd.to_datetime(mod_orders['order_delivered_customer_date'], errors='coerce')

# 2. (실제 배송 완료일 - 구매 일시) 계산하여 '일(Day)' 단위로 넣기
# .dt.days를 사용하여 숫자(정수)만 남깁니다.
mod_orders['actual_duration'] = (mod_orders['order_delivered_customer_date'] - mod_orders['order_purchase_timestamp']).dt.days

estimated_duration - 배송 예정 기간 (배송 예정일 - 구매 일시)

# 1. 날짜 타입으로 확실하게 변환
mod_orders['order_purchase_timestamp'] = pd.to_datetime(mod_orders['order_purchase_timestamp'], errors='coerce')
mod_orders['order_estimated_delivery_date'] = pd.to_datetime(mod_orders['order_estimated_delivery_date'], errors='coerce')

# 2. (배송 예정일 - 구매 일시) 계산하여 '일(Day)' 단위로 넣기
# .dt.days를 쓰면 숫자만 남습니다.
mod_orders['estimated_duration'] = (mod_orders['order_estimated_delivery_date'] - mod_orders['order_purchase_timestamp']).dt.days

mod_orders.describe() 이걸로 평균을 비교해보니 ..

즉, 평균적으로 23일 정도 걸린다고 나오지만 실제 배송은 12일 뒤에 된다는 뜻

회고

튜터님의 도움을 받아서 배송이 지연되는 요인을 분석하기로 했다. 배송지연으로 지역별, 상품별, 둘 다 이렇게 3가지로 나눠서 살펴보기로 해서 나는 상품별로 분석하려고 한다.

0개의 댓글