Source code for wsknn.preprocessing.structure.session_to_item_map

from typing import Dict
from more_itertools import sort_together


[docs]def map_sessions_to_items(sessions_map: Dict, sort_items_map: bool = True) -> Dict: """ Function transforms sessions map into items map. Parameters ---------- sessions_map : Dict >>> sessions = { ... session_id: ( ... [ sequence_of_items ], ... [ sequence_of_timestamps ], ... [ [OPTIONAL] sequence_of_event_types ], ... [ [OPTIONAL] sequence_of_event_weights] ... ) ...} sort_items_map : bool, default = True Sorts item-sessions map by the first timestamp of a session (then sessions are sorted in ascending order, from the oldest to the newest). Returns ------- items_map : Dict Mapped item-sessions dictionary. >>> items = { ... item_id: ( ... [ sequence_of_sessions ], ... [ sequence_of_the_first_session_timestamps ] ... ) ...} """ items_map = {} for session_k, values in sessions_map.items(): items = values[0] timestamps = values[1] for idx, item in enumerate(items): ts = timestamps[idx] if item not in items_map: items_map[item] = [ [session_k], [ts] ] else: if session_k not in items_map[item][0]: items_map[item][0].append(session_k) items_map[item][1].append(ts) else: session_index = items_map[item][0].index(session_k) the_last_timestamp = items_map[item][1][session_index] if ts < the_last_timestamp: items_map[item][1][session_index] = ts if sort_items_map: for ikey, ivalues in items_map.items(): # sort values new_ivalues = list(sort_together(ivalues, key_list=(1,))) # update mapping items_map[ikey] = new_ivalues return items_map