판다스 - 가상 쇼핑몰 고객 주문 데이터 : 고객별 주문을 가장 많이 하는 시간은?
https://steadiness-193.tistory.com/160
판다스 - 가상 쇼핑몰 고객 주문 데이터 : 몇시에 Push 마케팅하는게 제일 좋을까?
https://steadiness-193.tistory.com/155 판다스 - 가상 쇼핑몰 고객 주문 데이터 : 연월별 매출, 요일별 매출 https://steadiness-193.tistory.com/154 판다스 - 가상 쇼핑몰 고객 주문 데이터 : 전체 매출, 국가..
steadiness-193.tistory.com
위 포스팅의 Push Notification 내용과 연결됩니다.
데이터 불러오기

위 포스팅에서 추가한 Hour 컬럼도 있음을 확인했다.

개인 맞춤형 시간대별 주문량을 파악해야한다.
방법1
CustomerID와 Hour 컬럼으로 그룹핑, count 이용

count를 이용했기에 어떤 컬럼을 선택하는 크게 상관 없다.

Quantity 컬럼으로 시리즈화
위 데이터에서 12347 고객을 살펴보면

14시에 가장 주문을 많이 하는 것을 알 수 있다.
제일 큰 값의 인덱스를 얻으려면
idxmax를 이용한다.

이처럼 14시를 얻을 수 있다.
데이터프레임화 (reset_index, rename)

인덱스를 리셋해주고
Quantity 컬럼을 Orders로 이름을 바꿔주었다.
함수 정의

이제 다시 위 데이터프레임을 고객ID로 그룹핑한 다음
get_max 함수를 이용하면
고객별 주문량이 제일 많은 시간을 구할 수 있다.
판다스 - groupby : 멀티인덱스, idxmax 활용
데이터 만들기 위와 같은 데이터프레임이 있다. [목표 : Alpha, Key 멀티인덱스로 그룹화하여 Val 컬럼 기준 제일 높은 값의 인덱스를 이용해, 그 인덱스의 행만 추출] 우선 idxmax의 개념은 값이 제일
steadiness-193.tistory.com
get_max에 대한 보충 설명은 위 포스팅 참조

위에서 봤던대로 12347 고객은
14시에 제일 주문을 많이 하는 것을 체크할 수 있다.
result

한번 더 정리해주면 최종 result 데이터프레임이 완성된다.
이를 다시 한번 Hour로 그룹핑한 뒤
시간대별 주문량이 많은 고객을 찾을 수도 있다.
Hour로 그룹핑, groups

사전 형식이기 때문에 시간을 키로 이용해 값을 빼온 뒤
그 값을 인덱서로 이용하면 시간대별 주문량이 많은 고객을 찾을 수 있다.
예를 들어 7시에 주문을 많이 하는 고객은

위와 같이 8명으로 확인된다.
방법2
Hour 컬럼 추가 없이 진행

set_index와 groupby에 하나의 컬럼, 그리고 lambda를 동시에 이용한다.
보충 설명은 아래 포스팅 참조
판다스 - groupby : set_index와 사용자 정의 함수로 그룹핑
판다스 - groupby : 함수로 그룹핑하기 사전이나 시리즈로 그룹핑하는 것보다 함수로 그룹핑하는 것이 보다 더 일반적이다. 그룹 색인으로 넘긴 함수는 색인값 하나마다 한 번씩 호출되며 반환값��
steadiness-193.tistory.com

기존 방법처럼 굳이 get_max 함수를 정의하지 않아도

그룹핑한 객체에 idxmax를 이용하면
해당 인덱스를 구할 수 있다.
이를 loc에 이용하면 된다.

result2

위 result와는 달리 고객ID를 인덱스로 남겨놨다.
시간대별로 그룹핑, groups

고객ID를 인덱스로 남겨놔서
시간을 사전의 키로 이용한 뒤 values를 뽑아내면
시간대별 고객ID를 바로 볼 수 있다.

인덱싱

두가지 방법 모두 결과는 동일하니 편한 것을 이용하면 된다.
위 결과를 이용해서 단순히 시간으로만 Push 알람을 보내는 것이 아니라
고객별로 구매를 많이 하는 시간을 파악해서
개별화된 마케팅을 진행해야 할 것이다.