in distill/segmentation/segment.py [0:0]
def create_segment(target_dict, segment_names, start_end_vals):
"""
Creates a dictionary of Segment objects representing the metadata
associated with each defined segment.
:param target_dict: A dictionary of User Ale logs assumed to be ordered by clientTime (Date/Time Objects or integers)
:param segment_names: A list of segment_names ordered in the same way as the start_end_vals
:param start_end_vals: A list of tuples (i.e [(start_time, end_time)], where start_time and end_time are Date/Time Objects or integers
:return: A Segments object containing newly created Segment objects.
"""
segments = []
for i in range(len(segment_names)):
num_logs = 0
segment_name = segment_names[i]
start_time = start_end_vals[i][0]
end_time = start_end_vals[i][1]
uids = []
for uid in target_dict:
log = target_dict[uid]
if (isinstance(log['clientTime'], int) and isinstance(start_time, int) and isinstance(end_time, int)) or (isinstance(log['clientTime'], datetime.datetime) and isinstance(start_time, datetime.datetime) and isinstance(end_time, datetime.datetime)):
if log['clientTime'] >= start_time and log['clientTime'] <= end_time:
# Perform data collection on log
num_logs += 1
uids.append(uid)
else:
raise TypeError("clientTime and start/end times must be represented as the same type and must either be a datetime object or integer.")
segment = Segment(segment_name, start_end_vals[i], num_logs, uids)
segment.segment_type = Segment_Type.CREATE
segment.generate_field_name = None
segment.generate_matched_values = None
segments.append(segment)
return Segments(segments)