개발로그필름
TransactionEncoder를 사용한 변환 본문
728x90
반응형
SMALL
from mlxtend.preprocessing import TransactionEncoder
te = TransactionEncoder()
basket_encoded = te.fit(basket_data).transform(basket_data)
basket_df = pd.DataFrame(basket_encoded, columns=te.columns_)
- 장바구니 데이터를 One-Hot Encoding 형태의 이진 행렬로 변환하는 과정
- 이를 통해 Apriori 알고리즘 등 연관 규칙 분석을 수행할 수 있도록 데이터 변환
1. TransactionEncoder() 객체 생성
te = TransactionEncoder()
- TransactionEncoder() : 장바구니 데이터를 이진 행렬로 변환하는 도구
- mlxtend.preprocessing 라이브러리에 포함되어 있고 Apriori 및 FP-Growth 알고리즘과 함께 사용
2. .fit(basket_data).transform(basket_data)
basket_encoded = te.fit(basket_data).transform(basket_data)
- .fit(basket_data) : basket_data에서 고유한 제품명 목록 학습
- .transform(basket_data) : 각 거래(transaction)를 One-Hot Encoding된 이진행렬로 변환
예제 데이터
basket_data = [
['음료', '과자'],
['과자', '라면', '음료'],
['과자'],
['라면', '과자']
]
변환된 결과 (basket_encoded)
[
[True, True, False], # '음료', '과자' 구매
[True, True, True], # '과자', '라면', '음료' 구매
[False, True, False], # '과자'만 구매
[False, True, True] # '라면', '과자' 구매
]
- True(1) / False(0)로 표현된 One-Hot Encoding 결과
3. 변환된 데이터를 DataFrame으로 저장
basket_df = pd.DataFrame(basket_encoded, columns=te.columns_)
- basket_encoded는 넘파이 배열 형태 이므로 판다스 데이터 프레임으로 변환
- columns=te.columns_를 사용해 각 열에 상품 이름 할당
최종 반환 결과 (basket_df)
음료 | 과자 | 라면 |
True | True | False |
True | True | True |
False | True | False |
False | True | True |
TransactionEncoder를 사용하는 이유
✅ (1) Apriori 및 연관 규칙 분석을 위한 필수 변환
• Apriori 또는 FP-Growth 알고리즘을 사용할 때, 데이터는 이진 행렬(Binary Matrix) 형태여야 함.
• TransactionEncoder를 사용하면 장바구니 데이터를 자동으로 변환해줌.
✅ (2) 간단한 One-Hot Encoding
• pd.get_dummies() 같은 방법을 사용할 수도 있지만, TransactionEncoder가 장바구니 데이터에 최적화되어 있음.
반응형
LIST
'데이터분석가 > 데이터 TIL' 카테고리의 다른 글
[데이터 TIL] pandas에서 CSV 파일을 읽을 때 한글 인코딩 문제 해결 (0) | 2025.02.06 |
---|---|
[데이터 TIL] to_datetime() vs to_timedelta() 차이점 (1) | 2025.02.06 |
df.groupby("id")["product"].apply(list).tolist() (0) | 2025.02.04 |
[데이터 TIL] t-검정을 수행할 때 Variable 1 Range, Variable 2 Range에 컬럼명을 포함하지 않는 이유 (0) | 2025.02.02 |
[데이터 TIL] 왜 평균(Mean) ≈ 중앙값(Median) ≈ 최빈값(Mode)일 때 정규분포라고 할 수 있어? (0) | 2025.02.01 |
Comments