본문 바로가기

EDA/수업 내용 정리

2회차 데이터 전처리하기

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

 

'EDA > 수업 내용 정리' 카테고리의 다른 글

1회차 수업 정리  (0) 2021.07.19