다시 이음

실전 예측 분석 모델링 - 2 Data Wrangling 본문

AI 일별 공부 정리

실전 예측 분석 모델링 - 2 Data Wrangling

Taeho(Damon) 2021. 8. 25. 22:53

Data Wrangling

 

안녕하세요.

 

오늘은~ 데이터 랭글링에 대해서 살펴보려 합니다.

 

사실 데이터 랭글링의 예시, 활용방법은 이전 포스팅에서 정리한 EDA 과정과 크게 차이는 없습니다.

 

그렇기 때문에 기존 'EDA의 여러가지 방법' 포스트도 같이 참고 하시면 좋을 거 같습니다. 궁금하신 분은 아래 링크를 참고하세요!

 

https://thogood212.tistory.com/29

 

EDA의 여러가지 방법

EDA( Exploratory Data Analysis ) 탐색적 데이터 분석 안녕하세요. 오늘은 지금까지 활용해왔던 EDA 전처리 방법에 대해서 알아보려고 합니다. 간단히 EDA의 정의부터 알아볼게요. EDA란? 수집한 데이터가

thogood212.tistory.com

 

 

 

 

Data Wrangling

 

데이터 랭글링이란?


데이터가 곧바로 사용 가능한 형태로 나오는 경우는 드뭅니다. 오류와 누락으로 오염되는 경우가 많으며 원하는 구조를 가진 경우가 거의 없습니다.

 

데이터 랭글링은 데이터를 발견하고 정제하며 검증하고 사용 가능하도록 구조화한 후 콘텐츠의 질을 높이며(날씨와 경제 상황 등 공개 데이터로부터 얻은 정보 추가 등의 방식으로) 경우에 따라 데이터를 통합 및 변환하는 과정입니다.

정확하게 말하면 데이터 랭글링 작업은 경우에 따라 달라질 수 있습니다. 데이터를 머신러닝에 사용하는 경우 변환에 정규화와 표준화뿐 아니라 차원수 감소도 포함될 수 있습니다. 

탐구 데이터 분석이 메모리와 저장 공간이 제한된 개인용 컴퓨터에서 수행되는 경우, 랭글링 프로세스에 데이터 하위 세트 추출이 포함될 수 있습니다.

 

데이터를 여러 개의 소스로부터 얻는 경우 측정값의 필드 이름과 단위를 매핑과 변환을 통해 통합해야 합니다.

 


탐구 데이터 분석(EDA)과의 차이점?

 

탐구적 데이터 탐색은 데이터 테이블의 기초 통곗값, 결측값, 피처들 간의 관계를 확인하고 데이터의 범위, 분포 등을 히스토그램과 같은 다양한 그래프를 통해 시각화(visualization)해서 데이터를 이해하고 분석할 방향을 설정해보는 과정이라고 할 수 있습니다.

 

랭글링과 EDA의 차이를 두기에는 어렵다고 볼 수 있습니다.

 

랭글링을 통해서 데이터를 손질하고 통합 및 변환하는 과정과 같게 EDA에서도 특성간의 관계, 데이터 범위,분포 확인을 하면서 동일한 과정을 진행하기도 합니다.

 

굳이 차이점을 찾으라면 데이터 랭글링이 EDA보다 조금더 앞서 사용될 수 있다는 점이겠네요.

 

아래의 그림을 참고하시면 이해가 편하실 거 같습니다.

 

 

Data Wrangling의 과정

 

1. 데이터를 확인하세요. ( 사용할 모든 데이터를 확인하고 효과적인 분석을 위해 어떻게 통합 혹은 변환을 할지 고민해요. )

 

2. 데이터의 feature를 모두 읽어보세요.

 

3. 데이터프레임간의 관계를 파악하세요.

 

 - 데이터 간의 중복데이터 확인

# set1.isdisjoint(set2) 해석 : set1과 set2가 중복되지 않으면 True 반환

# 열이름1이 value1의 값을 가진 열이름2와 열이름1이 value2 값을 가진 열이름2가 중복되는지 확인
set(df[df['열이름1']=='value1']['열이름2'])\
    .isdisjoint(set(df[df['열이름1']=='value2']['열이름2']))
    
#열['user_id']가 중복되는 값이 있는지 확인하기
len(df[df['eval_set'].isin(['train','test'])]) \
,len(df[df['eval_set'].isin(['train','test'])]['user_id'].unique())

 

4. 데이터 분석하기

 

- 빈도 확인하기

#product_id 열에 최빈값 구하기
df['product_id'].mode()

# 최빈값 top5 구하기
top5_products = df['product_id'].value_counts()[:5]
# 최빈값 top5 목록 만들기
top5_index = list(top5_products.index)
# 최빈값 top5 목록과 일치하는 열 추출하기
df.set_index('product_id').loc[top5_index]

 - 데이터 통합하기

df = df.merge(df_2, on='product_id')

- columns에 고유값 비율 확인하기

# normalize로 비율로 확인가능합니다.
df['banana'].value_counts(normalize=True)

- groupby 활용

#order_id을 기준으로 product_id의 값만 그룹화하여 count 합니다.
train.groupby('order_id')['product_id'].count()

#위의 값이 count로 개수를 세었다면 apply(list)를 통해 product_id의 값들을 모두 불러내어 리스트로 만듭니다.
train.groupby('order_id')['product_id'].apply(list)

#list 적용에 다른 방법입니다.
train.groupby('order_id')['product_id'].apply(lambda x : id_Banana in list(x)).value_counts(normalize=True)

# any(): 주문(order_id) 중에서 한 번이라도 Banana 주문이 있는 경우 True
train.groupby('order_id')['banana'].any().value_counts(normalize=True)