학습목표
분석을 하거나 모델을 만들기 전에 데이터를 사용하기 쉽게 변형하거나 맵핑하는 과정으로 보통 모델링 과정 중 가장 많은 시간이 소요되는 단계이다.
#데이터 shape, head 동시 확인
def preview():
for filename in glob('*.csv'):
df = pd.read_csv(filename)
print(filename, df.shape)
display(df.head())
print('\n')
From jeremystan
orders (3.4m rows, 206k users):
products (50k rows):
aisles (134 rows):
deptartments (21 rows):
order_products__SET (30m+ rows):
where SET is one of the four following evaluation sets (eval_set in orders):
ex) 모든 고객의 연속적인 구매 정보(order_id, user_id 등)가 orders에 모두 존재하고 prior, train에는 order_id와 연결된 product 정보(product_id, 카트에 넣은 순서, 재구매여부)가 존재합니다.
test(submission)의 경우 order_id만 있고 product_id 가 없습니다.
# set1.isdisjoint(set2)
# set.isdisjoint() - 두 집합이 공통 원소를 갖지 않는가?
set(orders[orders['eval_set']=='test']['user_id'])\
.isdisjoint(set(orders[orders['eval_set']=='train']['user_id']))
>>> True
# 한 고객은 한 샘플만 있음
len(orders[orders['eval_set'].isin(['train','test'])]) \
,len(orders[orders['eval_set'].isin(['train','test'])]['user_id'].unique())
>>> (206209, 206209)
고객들마다 어떤 상품들이 재구매 될 것인지?
-> 구매자가 특정 상품을 구매 할 것인지 말 것인지(Binary classification)?
mode : 최빈값
prior['product_id'].mode()
value_counts : 고유값+개수
top5_products = prior['product_id'].value_counts()[:5] top5_products
merge : 공통 기준으로 df 합치기
#prior와 product를 product_id를 기준으로 합침 prior = prior.merge(products, on='product_id')
prior = prior.merge(orders, how='left', on='order_id')
prior.groupby(['user_id','order_id']).count() prior.groupby(['user_id','order_id']).count().reset_index().groupby('user_id').mean()
groupby : 카테고리별 그룹화
#order_id별 제품 리스트 train.groupby('order_id')['product_id'].apply(list)
# any(): 주문(order_id) 중에서 한 번이라도 Banana 주문이 있는 경우 True train.groupby('order_id')['banana'].any().value_counts(normalize=True)
#filtering beer_servings.mean() by continent drinks.groupby('continent').beer_servings.mean()
#only 'Africa' drinks[drinks.continent=='Africa'].beer_servings.mean()
#agg : allows us to specify the multiple aggregation function at one drinks[drinks.continent=='Africa'].beer_servings.agg(['count', 'min', 'max', 'mean'])
#case of few columns drinks.groupby('continent').mean()
#시각화 %matplotlib inline drinks.groupby('continent').mean().plot(kind='bar')
참고자료