in distill/segmentation/segment.py [0:0]
def generate_collapsing_window_segments(target_dict, field_name, field_values_of_interest, label=""):
"""
Generates segments based on a window to time in which the given field name has a value matching one of the values
indicated by the field_values_of_interest list.
:param target_dict: A dictionary of User Ale logs assumed to be ordered by clientTime (Date/Time Objects or integers).
:param field_name: A string indicating the field name meant to be matched by the field values.
:param field_values_of_interest: A list of field values to be matched in order to start/end a segment.
:param label: An optional string argument that provides a prefix for the returned dictionary keys.
"""
key_list = list(target_dict.keys())
start_end_val_lists = []
start_end_vals = []
segment_names = []
index = 0
segment_started = False
for i in range(len(key_list)):
if field_name in target_dict[key_list[i]] and any(item in target_dict[key_list[i]][field_name] for item in field_values_of_interest):
if not segment_started:
# Start a new Segment
start_end = [target_dict[key_list[i]]['clientTime'], None]
start_end_val_lists.append(start_end)
segment_names.append(label + str(index))
segment_started = True
# End Segment if end of dictionary
elif segment_started and i == (len(key_list) - 1):
# End the Segment
start_end_tuple = (start_end_val_lists[index][0], target_dict[key_list[i]]['clientTime'])
start_end_vals.append(start_end_tuple)
index += 1
segment_started = False
else:
if segment_started:
# End the Segment
start_end_tuple = (start_end_val_lists[index][0], target_dict[key_list[i - 1]]['clientTime'])
start_end_vals.append(start_end_tuple)
index += 1
segment_started = False
if 0 < len(start_end_vals) < len(segment_names):
start_end_vals.append((start_end_val_lists[index][0], target_dict[key_list[len(key_list) - 1]]['clientTime']))
# Create Segments object with create_segment
segments = create_segment(target_dict, segment_names, start_end_vals)
for segment in segments:
segment.segment_type = Segment_Type.GENERATE_COLLAPSING_WINDOWS
segment.generate_field_name = field_name
segment.generate_matched_values = field_values_of_interest
return segments