데이터 랭글링은 분석을 하거나 모델을 만들기 전에 데이터를 사용하기 쉽게 변형하거나 맵핑하는 과정이다. 보통 모델링 과정 중 가장 많은 시간이 소요되는 단계라고 할 수 있다.
groupby
, merge
등의 함수를 사용해 데이터를 통합하거나 의미 있는 특성을 가지는 학습 데이터를 만들어낸다.EDA
: 머신러닝 전에 이루어지는 과정으로 머신러닝의 모델이 데이터를 학습할 수 있도록 만들어주는 과정이다.
ex) 스케일링, 로그변환, 인코딩, 중복값, 이상치, 결측치 처리 등...
Data Wrangling
: 데이터 자체의 의미를 도출하는 시각화를 포함하며, 데이터를 분할하지 않고 전체를 사용한다.
ex) 마케팅 팀에서 데이터의 패턴, 인사이트, 정보 등을 추출해서 보여줄 때
바나나(product_id = 24852)가 포함되어 있는지 True, False로 나타내는 새로운 이진 특성(banana) 만들어보기
# 바나나가 있으면 True, 바나나가 없으면 False인 특성 만들기
id_Banana = 24852
train['banana'] = train['product_id'] == id_Banana
train['banana'].value_counts(normalize=True)
주문(order_id)별 바나나 구입 비율 구하기
# 방법 1: apply 함수 사용하기
# apply 함수는 데이터프레임에 축(axis)을 기준으로 특정한 함수를 적용하는 method
#최근 주문 별로 몇 개의 제품을 구입했는지 확인
train.groupby('order_id')['product_id'].count()
#주문 별 구입한 제품들의 product_id를 리스트로 얻기
train.groupby('order_id')['product_id'].apply(list)
#람다함수는 주문에 바나나가 있는 경우 True를 리턴한다.
train.groupby('order_id)['product_id'].apply(lamda x: id_Banana in list(x)).value_counts(normalized = True)
# 방법 2: groupby 함수 사용하기
# any()를 사용하면 banana==Ture인 제품이 하나라도 있으면 True를 리턴한다.
train.groupby('order_id')['banana'].any().value_counts(normalize=True)
groupby
는 여러 유용한 method들이 많으니 잘 확인해보자.
import matplotlib.pyplot as plt
plt.figure(figsize=(12,6))
(pd.get_dummies(df).corr()['Churn']).sort_values(ascending=False).plot(kind='bar');
import seaborn as sns
ax = sns.heatmap(df[num_features].corr(), cmap='twilight_shifted', vmin=-1, vmax=1, annot=True)