EDA Project - 데이터 전처리
Data Analyst

빅데이터 관련 자료/[Project ]Brazil E-commerce

EDA Project - 데이터 전처리

carpe08 2021. 7. 24. 22:57
320x100
320x100

EDA Project 프로젝트 기간: 7월 14일 ~ 8월 2일

팀명: 플로우

멘토: 윤00(머신러닝 엔지니어)

팀원: 최00, 박상욱, 홍00, 김00

담당매니저: 김00

개최: NanoDegree


3. 데이터 전처리

 

- 상품 카테고리명 한국어 번역

 

from googletrans import Translator

# english to korea
trans = Translator()
result = trans.translate("english.", src='en', dest='ko')
result.text

category_list = order_df['product_category_name_english'].value_counts().index.tolist()
print(category_list)

category_list2 = []
for i in range(len(category_list)):  
    re = category_list[i].replace('_', ' ')
    category_list2.append(re)
    
print(category_list2)

category_list_kor=[] 
for w in category_list2:
    trans = Translator()
    result = trans.translate(w , src='en', dest='ko')
    category_list_kor.append(result.text)

print(category_list_kor)

category = pd.DataFrame({'product_category_name_english':category_list,'category_name_kor':category_list_kor})

# category 와 order_df와 병합해준다.
order_df = order_df.merge(category, how='left', on='product_category_name_english')

 

- 문자형 날짜 컬럼을 날짜데이터 타입으로 변경

object 타입으로 되어 있는 날짜 컬럼인 'order_purchase_timestamp' 와 'order_delivered_customer_date'를 date 타입으로 바꾼다.

order_df['order_purchase_timestamp']= pd.to_datetime(order_df['order_purchase_timestamp'])
order_df['order_delivered_customer_date'] = pd.to_datetime(order_df['order_delivered_customer_date'])

 

-분석에 필요한 데이터만 필터링

필요한 컬럼 선정한다.

cols =['order_id' ,'order_item_id','product_id', 'price', 'freight_value', 'payment_value','payment_installments','order_status',
       'order_purchase_timestamp', 'order_delivered_customer_date', 'product_category_name_english',
       'customer_id','customer_unique_id', 'customer_zip_code_prefix', 'lat', 'lng', 'city', 'state','category_name_kor']

order_df = order_df[cols]

 

- 컬럼명 수정

'order_item_id'(한 주문에 몇개를 주문했는지에 관한 정보) -> 주문수량을 의미하는 'QTY'(Quantity) 로 변경한다.
'price' (상품가격) -> 'product_price' 로 변경한다.

order_df = order_df.rename(columns = {'order_item_id': 'QTY', 'price': 'product_price','freight_value':'delivery_price',
                                      'payment_value':'total_price','order_purchase_timestamp':'order_purchase_time' ,
                                      'customer_zip_code_prefix':'zip_code'})

 

- 데이터 필터링

배송이 완료 된 데이터만 추출한다.

order_df['order_status'].value_counts()

order_df = order_df[order_df['order_status']=='delivered']

 

 

총 71개 중 상위 20개 상품 카테고리만 추출한다.

전체 주문 건수 중 87.1%차지한다. (80:20법칙, 파레토 법칙)

order_df.shape
(115038, 19)

sum(order_df['product_category_name_english'].value_counts()[:20])

(100252/order_df.shape[0])*100   #87.14685582155461

top_20=order_df['product_category_name_english'].value_counts()[:20].index.tolist()

# 상위 20개 상품 카테고리 데이터를 df에 담아서 분석 진행(100,252개)
df = order_df.loc[order_df['product_category_name_english'].isin(top_20)]

 

- 결측치 처리

결측값이 전체 데이터에 영향을 끼치지 않을 정도의 데이터이므로 삭제를 하기로 결정했다.

df.isnull().sum()
df = df.dropna()

 

- 중복값제거

drop_duplicates로 전체 행의 모든값이 같은것을 제거한다.

print(df.shape)
df = df.drop_duplicates()
df.shape
320x100
320x100