본문 바로가기

ML & AI/Algorithm

[알고리즘] Merge를 통한 데이터 Filtering & Mapping #3

"데이터프레임 병합", pd.merge() 활용!

 

A와 B 두 개의 데이터 소스가 있다.

예를 들어 A는 1일 동안 우리 회사의 "과자"를 구매한 고객들의 정보이고, B는 1일 동안 "음료"를 구매한 고객들의 정보라고 하자.

이때 과자와 음료를 구매한 고객이 추가로 구매할 상품이 무엇인지 알고 싶다면?

 

이 경우 Classifcation 알고리즘을 사용해서 추가 상품을 예측하는 모델을 만들 수 있다.

또한 모델 학습을 위한 학습 데이터,

"과자와 음료를 구매한 고객 정보와 그 고객이 추가 구매한 상품 정보"가 필요하다.

따라서, 1일 동안 과자를 구입한 고객과 음료를 구입한 고객 정보를 합쳐서 하나의 데이터셋을 만들어야한다.

 

생성할 수 있는 데이터는 3가지로 구분할 수 있다.

  • 과자와 음료를 모두 구매한 고객의 데이터
  • 음료를 구매했든 안했든 과자를 구매한 모든 고객 데이터
  • 과자를 구매했든 안했든 음료를 구매한 모든 고객 데이터

이 3가지 데이터를 "데이터프레임 병합"을 통해 쉽게 생성할 수 있다.


Pandas DataFrame을 merge하여 데이터를 병합해보자.

실제로 병합할 데이터는 두개의 서로 다른 카테고리 정보다.

데이터프레임 : a_category
데이터프레임 : b_category

두개의 서로 다른 카테고리를 합쳐서 새로운 카테고리 데이터셋을 만든다

여기서는 A 카테고리를 기준으로 B 카테고리를 결합하여 새로운 카테고리 데이터를 만들어 보자.

 

a_category
b_category

merge_result = pd.merge(a_category, b_category, how='left', on=['category'])
merge_result['label'].fillna('겨울나기바캉스', inplace=True)

헐... 머지(merge)...

이 간단한 함수의 활용법 하나를 정리하려고, 그 많은 타이핑을 했단 말인가....

 

어쨌든 결과는 다음과 같다.

제품군을 기준으로 merge한 결과

결과적으로 a_category에 b_category 정보를 병합하는데, 두 개의 카테고리가 다르기 때문에

a_category를 기준으로 병합하면 b_category의 정보가 없는 경우가 있다.

즉, 병합 결과 label에 빈 값이 존재할 수 있다.

 

반대로 b_category를 기준으로 병합한다면, category_list, id, name 항목의 값이 없을 수 있다.

당연하지만 a_category와 b_category의 "제품군"이 동일한 데이터만 병합할 수 도 있다.

 

방법은?

merge() 함수의 "how" 옵션!

  • pd.merge(a, b, how='left') : 'a'를 기준으로 병합
  • pd.merge(a, b, how='right') : 'b'를 기준으로 병합
  • pd.merge(a, b, how='inner') : 'a'와 'b'의 교집합으로 병합 

그러다면 "on" 옵션은?

병합할때 기준 항목을 지정하는 옵션!

 

그렇다면 병합 기준을 여러개 항목으로 지정할 수 있을까?

  • pd.merge(a, b, how, on=['이것', '저것']

당연히 가능함.


"How to become Super Human Software Developer" 

최근 몇 년새 개발자들이 추구하는 가치다.

 

"I want be a Full-Stack Professional"

내가 IT 를 시작하면서 지금까지 추구하고 있는 가치다.

 

개발도 잘하고 싶고, 아키텍처도 잘 짜고 싶고, 인프라 구성도 잘하고 싶고, 자동화도 하고 싶고...

그러다 보니 개발을 한동안 하지 못하는 경우도 있기에...

자꾸 이것저것 잊어먹는다.

 

이따금 내가 추구하고 있는 가치가 잘못되지 않았나? 흔들릴 때가 있다.

특히나 지금처럼,

한개의 언어, 한개의 분야와 같이 특정 분야의 "고수"들이 각광 받는 모습을 볼때는 더더욱...

 

그래도 "무림맹"은 존재하고, 

소림이든 화산이든 무당이든 개방이든 여러 문파를 잘 이해하고 지휘할 수 있는 역할이 가장 중요할 것이기에...