import pandas as pd
import numpy as np
import os
from google.colab import drive
drive.mount('/content/drive')
basicPath = '/content/drive/My Drive/Colab Notebooks/'
path = basicPath + '[csv 파일 위치]' # 파일 위치
file = 'BreadBasket_DMS.csv' # 파일명
data = pd.read_csv(os.path.join(path,file), index_col=None)
data.head() # 파일 불러오는지 확인
실행결과
data['Item'] = data['Item'].str.lower(
data.head()
실행결과
data.isnull().sum() # 각 column별로 결측값의 수를 출력
(예제 1) 결측값을 포함한 row 추가하고 확인하기
data = data.append({'Date':None, 'Time':None, 'Transaction':9685, 'Item':None}, ignore_index=True)
data.isnull().sum() # 각 column별로 결측값의 수를 출력
(예제 2) 결측값을 포함한 row 삭제하고 확인하기
data.dropna(inplace=True)
data.isnull().sum() # 각 column별로 결측값의 수를 출력
실행결과
data.iloc[10:20]
data.iloc[19]
실행결과
data['Item'].unique() # Item을 이루는 집합의 모든 요소 출력
data['Item'].nunique() # Item을 이루는 집합의 요소 수 출력
(data['Item']=='none').value_counts() # 조건에 해당하는 요소 내림차순 출력
실행결과
top10_items = data['Item'].value_counts().head(10)
top10_items
# 모든 Transaction에 대해 각각이 가지는 Item을 셀 수 있도록 vertical format으로 변환
hot_encoded_data = data.groupby(['Transaction','Item'])['Item'].count().unstack().fillna()
실행결과
# 하나의 transaction에 2개 이상의 동일한 item이 들어가는 경우 1개로 취급
# 왜? item간의 관계가 중요하기 떄문!!
def encode_units(x):
if x <= 0:
return 0
if x >= 1:
return 1
hot_encoded_data = hot_encoded_data.applymap(encode_units)
hot_encoded_data
실행결과
from mlxtend.frequent_patterns import apriori
frequent_itemsets = apriori(hot_encoded_data, min_support=0.01, use_colnames=True)
list(hot_encoded_data.columns).index('baguette')
np.where(hot_encoded_data, columns=='baguette')
실행결과
from mlxtend.frequent_patterns import association_rules
rules = association_rules(frequent__itemsets, metric='lift', min_threshold=1.4)
rules[rules['confidence'] > 0.17]
실행결과
from mlxtend.frequent_patterns import fpgrowth
frequent_itemsets_fp = fpgrowth(hot_encoded_data, min_support=0.01, use_colnames=True)
rules_fp = association_rules(frequent_itemsets_fp, metric='lift', min_threshold=1.4)
rules_fp[rules_fp['confidence'] > 0.17]
실행결과
from mlxtend.frequent_patterns import apriori
%timeit -n 100 frequent_itemsets = apriori(hot_encoded_data, min_support=0.005, use_colnames=True)
%timeit -n 100 frequent_itemsets_fp = fpgrowth(hot_encoded_data, min_support=0.005, use_colnames=True)
display(rules[rules['confidence'] > 0.17], rules_fp[rules_fp['confidence'] > 0.17])
실행결과