'Time series association analysis using pandas

I have the below example dataframe of products purchased between 8AM and 6PM and I want to perform association analysis per hourly time interval.

date,08:00:00,09:00:00,10:00:00,11:00:00,12:00:00,13:00:00,14:00:00,15:00:00,16:00:00,17:00:00,18:00:00
2021-02-01,item2,item2,item2,item3,item1,item1,item1,item1,item1,item1,item1
2021-02-02,item3,item1,item1,item2,item2,item3,item1,item1,item1,item1,item1
2021-02-03,item2,item3,item1,item1,item1,item1,item3,item1,item1,item1,item3
2021-02-04,item2,item2,item2,item3,item1,item1,item1,item1,item1,item1,item1
2021-02-05,item2,item2,item2,item3,item1,item1,item1,item1,item1,item1,item1
2021-02-06,item2,item3,item1,item1,item1,item1,item1,item1,item1,item1,item1
2021-02-07,item2,item2,item1,item1,item1,item1,item1,item1,item1,item1,item1
2021-02-08,item2,item2,item3,item1,item1,item1,item1,item1,item1,item1,item1
2021-02-09,item2,item2,item3,item1,item1,item1,item1,item1,item1,item1,item1
2021-02-10,item2,item2,item2,item1,item1,item1,item1,item1,item1,item1,item1

I have tried the example given here https://medium.com/analytics-vidhya/association-analysis-in-python-2b955d0180c. However, the solution does not consider association of items per each time interval.

import pandas as pd
from datetime import datetime
from mlxtend.frequent_patterns import apriori, association_rules

df = pd.read_csv('df.csv')

items = set()
for col in df:
    items.update(df[col].unique())
items

itemset = set(items)
encoded_vals = []
for index, row in df.iterrows():
    rowset = set(row) 
    labels = {}
    uncommons = list(itemset - rowset)
    commons = list(itemset.intersection(rowset))
    for uc in uncommons:
        labels[uc] = 0
    for com in commons:
        labels[com] = 1
    encoded_vals.append(labels)
encoded_vals[0]
ohe_df = pd.DataFrame(encoded_vals)

freq_items = apriori(ohe_df, min_support=0.2, use_colnames=True)
freq_items = freq_items.sort_values('support', ascending=False)

rules = association_rules(freq_items, metric="confidence", min_threshold=0.2)
rules = rules.sort_values('support', ascending=False)
rules = rules[['antecedents','consequents','antecedent support','consequent support','support','confidence']]
print(rules)

I want to extend the above solution to include association of items per each time interval (T) to extract information such as at T1(item3 => item2 i.e., item3 is followed by item 2). I want to repeat this for each time interval T1, T2, T3, ....T10 (where each T can be an hourly interval e.g., T1=8AM-9AM, T2=9AM-10AM,...,T10=5PM-6PM). How can I enhance the solution to extract association rules per each time interval to achieve an output similar to my example output here.

Example output

enter image description here



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source