심화 프로젝트 1 [45일차]

차현빈·2025년 12월 19일

1. 데이터 불러오기

모든 테이블을 불러왔습니다.

2. 테이블 한번에 보기

# 테이블 한번에 보기 (테이블이 많으니까 2개씩만)
display(customers.head(2), geolocation.head(2), items.head(2), payments.head(2), reviews.head(2), orders.head(2), products.head(2), sellers.head(2))

한번에 보는 거 너무 욕심이었나 ... 그렇지만 비교하기는 좋네요

3. 데이터 행과 열 한번에 보기

display(f'customers: {customers.shape}, geolocation: {geolocation.shape}, items: {items.shape}, payments: {payments.shape}, reviews: {reviews.shape}, orders: {orders.shape}, products: {products.shape}, sellers: {sellers.shape}')

4. 데이터 타입 확인

  • customers

  • geolocation

  • items

  • payments

  • reviews

  • orders

  • products

  • sellers

5. 결측치가 있는 테이블 확인

첫 번째 테이블 : reviews

review_comment_title, review_comment_message가 결측치를 가지고 있음

그렇다면 review_comment_title가 결측치인 행은 review_comment_message도 결측치로 가지고 있을까?

`review_comment_title, review_comment_message 둘 다 결측치를 가지는 경우는

'56518' 즉, 둘 중에 하나만 가지고 있는 경우도 있다

교집합(56518)을 각각 빼주면

내용(message)만 쓴 경우 87656 - 56518 = 31138 / 제목(title)만 쓴 경우 58247 - 56518 = 1729

내용만 쓰는 경우가 제목만 쓰는 경우보다 많은 것을 알 수 있음

두 번째 테이블 : orders

order_approved_at (주문 승인 시간), order_delivered_carrier_date(택배회사로 넘겨진 날짜), order_delivered_customer_date (고객이 배송 받은 날짜) 이렇게 3가지가 결측치

order_approved_at(주문 승인 시간)이 결측치인 값부터 보자

orders[orders['order_approved_at'].isnull()]

head()랑 tail()를 봐도 주문 현재 상태가 canceld이었기 때문에

주문현재 상태가 canceled인 결측치를 가지는 것 같다는 가설을 세움 (160행)


바로 틀림 (141행) 나머지 19행을 찾아보자

canceled를 빼고 7값 중에 나머지 19행이 있다는 뜻

orders[orders['order_approved_at'].isnull()].groupby('order_status').count()

'order_approved_at'가 결측치를 가지는 경우에는 order_status가 canceled(취소됨), created(주문됨), delivered(배송완료) 로 나눌 수 있음

created(주문됨), delivered(배송완료)가 각각 5행 + 14행 = 19행

'order_approved_at'가 결측치를 가지고 order_status가 created(주문됨), delivered(배송완료)인 경우를 더 파악해보자

0개의 댓글