(1) 데이터 정리하고 구조 파악하기
1) 데이터의 기본 정보 및 크기 파악한다.
. head( ) 나 .shape 로 구조, 크기를 파악한다.
olist_customers_dataset.head() olist_customers_dataset.shape |
< head( ) 의 결과물 >
(행, 열)구조로 나옴
2) 데이터의 열 정보 파악한다. ( 칼럼을 파악하기)
데이터 프레임이 어떤 칼럼들로 구성되어 있고 어떤 타입의 값들을 보유하고 있는지를 파악하는 과정이다.
이것들을 알아야 어떻게 병합을 할 것인지를 정할 수 있다.
cf( .info( )로 칼럼들의 이름과 타입을 파악한다.)
olist_customers_dataset.info |
3) 데이터의 결측치 및 이상치 파악하기
# 열 단위 탐색 null값인 것들이 몇개인지 파악하기
olist_products_dataset['product_category_name'].isnull().sum() |
610
olist_products_dataset.isnull().sum() |
결측치를 파악 하였으면 결측치가 있는 것들을 데이터 셋에서 제거할 것인지 아님 강제로 특정 값을 넣어 포함 시킬 것인지를 결정하면 된다. ( fillna(), dropna() 사용)
이상치란? 데이터의 일반적인 분포에서 동떨어진 예외인 값들을 의미한다. 주로 boxplot을 통해 쉽게 파악할 수 있다. |
olist_products_dataset.boxplot(column=['product_name_lenght'])
맨 아래에 찍힌 점들이 '이상치' 이다.
olist_products_dataset.boxplot(column=[numerical_columns(2)] |
맨 위에 찍힌 점들이 '이상치'이다.
(2) 데이터 관계 정립 및 전처리 하기
데이터를 pandas로 읽어 온 뒤 구조를 파악해야 한다. 어떤 칼럼들로 구성이 되어있고 어떤 타입으로 칼럼들에 값이 입력 되어 있는지를 파악해 두자. 내가 원하는 결과를 얻기 위해서는 어떤 데이터 프레임과 어떤 칼럼들을 이용해야 하는지를 파악하고 기준이 될 데이터 프레임을 선정한 다음 전처리를 시작해야 한다.
- 주문 데이터셋을 기준으로 선정 : olist_order_items_dataset
- 기준 데이터셋에 새로운 부가 정보 병합하는 것으로 데이터를 전처리 하겠다.
1) 기준 데이터 셋을 기준으로 merge(병합)하기
대부분의 병합은 sql 파일을 padas로 불러올때 쿼리 문으로 가공을 한 상태에서 불러오므로
실질 적으로 쓰이는 merge는 how="left" 정도라고 보면 된다.
merge는 on ="공통되는 칼럼"으로 하는게 일반적이며 공통되는 칼럼이 없을 경우 index를 기준으로
병합을 할 수도 있다.
병합을 할 때는 병합하기 전에 .astype( )로 타입을 통일해 준 다음 해주는 것이 좋다 이유는 병합을 한
다음 결측치를 파악하고 처리할 때 수월하게 진행하기 위해서 이다. (보통 str으로 한다.)
order_df['order_id'] = order_df['order_id'].astype(str) shipping_df['order_id'] = shipping_df['order_id'].astype(str) order_df = order_df.merge(shipping_df, how='left', on='order_id') order_df['product_id'] = order_df['product_id'].astype(str) category_df['product_id'] = category_df['product_id'].astype(str) order_df = order_df.merge(category_df, how='left', on='product_id') order_df['customer_id'] = order_df['customer_id'].astype(str) user_df['customer_id'] = user_df['customer_id'].astype(str) order_df = order_df.merge(user_df, how='left', on='customer_id') |
2) 원하는 결과를 얻기 위해 이용 해야할 정보들을 파악한다.
1. 시간대별 주문 데이터 분석을 위해서 필요한 정보들 선정
- 시간대별 주문 분석 ⇨ 주문시간 정보 병합 필요
- 시간대별 주문 지역 분석 ⇨ 주문자 정보, 주문자의 거주 정보 병합 필요
2. 주문 상품의 카테고리 분석을 위해 필요한 정보를 선정
- 주문 데이터에서 상품의 카테고리 비율 분석하기⇨상품의 카테고리 정보 병합 필요
- 시간대별 주문 상품 카테고리 분석 (ex. 밤에 많이 사는 상품군)
⇨ 주문시간 정보 + 상품의 카테고리 정보 병합 필요
- 일자/요일별 주문 상품 카테고리 분석 (ex. 일요일에 많이 사는 상품군)
⇨ 주문시간 정보 + 상품의 카테고리 정보 병합 필요
3. 배송 데이터 분석을 위해 필요한 정보를 선정
- 평균 배송 시간 분석 ⇨ 배송 정보 병합 필요
- 지역에 따른 배송 시간 분석 ⇨ 주문자 정보, 주문자의 거주 정보, 배송 정보 병합 필요
- 예상 배송일과 실제 배송일간의 차이 분석 ⇨ 배송 정보 병합 필요
- 상품 카테고리별 평균 배송 시간 분석 ⇨ 상품의 카테고리 정보, 배송 정보 병합 필요
3) 필요한 정보들을 갖추고 있는 칼럼들이 있는지 파악하기.
1. 시간대별 주문 데이터 분석
- 시간대별 주문 분석
⇨`order_purchase_timestamp`
- 시간대별 주문 지역 분석
⇨ `order_purchase_timestamp', customer_city`
2. 주문 상품의 카테고리 분석
- 주문 데이터에서 상품의 카테고리 비율 분석하기
⇨ `product_category_name`
- 시간대별 주문 상품 카테고리 분석 (ex. 밤에 많이 사는 상품군)
⇨ `order_purchase_timestamp',' product_category_name`
- 일자/요일별 주문 상품 카테고리 분석 (ex. 일요일에 많이 사는 상품군)
⇨ `order_purchase_timestamp',' product_category_name`
3. 배송 데이터 분석
- 평균 배송 시간 분석
⇨ `order_purchase_timestamp', 'order_delivered_customer_date`
- 지역에 따른 배송 시간 분석
⇨ `customer_city, order_purchase_timestamp', 'order_delivered_customer_date`
- 예상 배송일과 실제 배송일간의 차이 분석
⇨ `order_estimated_delivery_date', 'order_delivered_customer_date`
- 상품 카테고리별 평균 배송 시간 분석
⇨ `order_purchase_timestamp', 'order_delivered_customer_date', 'product_category_name`
anal_columns = [['order_id', 'product_id', 'customer_id', 'order_purchase_timestamp', 'customer_city', 'product_category_name' 'order_delivered_customer_date', 'order_estimated_delivery_date' ] ] order_df = order_df[anal_columns] |
여기서 'order_id', 'product_id', 'customer_id'는 데이터 프레임들을 병합하기 위해 사용된 공통된 칼럼들 (on="column")들이므로 포함되어야 하는 기본 값들이다.
이렇게 전처리가 완료 되었고 여기에 추가적으로 시각화에 도움이 될 수 있는 칼럼들을 더 추가 해줘도 된다.
anal_columns = [['order_id', 'product_id', 'customer_id', 'order_purchase_timestamp', 'customer_city', 'product_category_name', 'order_delivered_customer_date', 'order_estimated_delivery_date', 'order_status', # 필터링에 사용되는 정보 'price'] # 시각화용 정보] order_df = order_df[anal_columns] |