import json import random from datetime import datetime, timedelta def generate_random_point(): # Coordinate approssimative dell'Europa lon = random.uniform(-10.0, 30.0) lat = random.uniform(35.0, 60.0) return [lon, lat] def generate_data(num_points=500): features = [] operators = ["Operator A", "Operator B", "Operator C", "Operator D", "Operator E"] # Status principali (senza timing) statuses = ["OPEN", "CLOSED", "IN_PROGRESS", "ON_HOLD"] # Timing status solo per CLOSED timing_statuses = ["CLOSED_ON_TIME", "CLOSED_LATE"] # Task types task_types = ["Create Activity", "Close Activity", "Create WF", "Close WF", "Select DTO", "Report Generation", "Report QC"] base_time = datetime.now() for i in range(num_points): status = random.choice(statuses) operator = random.choice(operators) duration = random.randint(10, 300) task_type = random.choice(task_types) # Durations per task (in secondi) - min, max, avg variano per task min_duration = random.randint(10, 25) max_duration = random.randint(40, 60) avg_duration = random.randint(min_duration + 5, max_duration - 5) task_duration = random.randint(min_duration, max_duration + 20) # Lead time in minuti (per Avg Lead Time) - solo per CLOSED lead_time = None timing_status = None if status == "CLOSED": lead_time = random.randint(5, 120) # minuti # 70% on time, 30% late (come in figura ~24 vs 11) timing_status = random.choices(timing_statuses, weights=[70, 30])[0] # Random timestamp negli ultimi 7 giorni time_offset = random.randint(0, 7 * 24 * 60 * 60) timestamp = (base_time - timedelta(seconds=time_offset)).isoformat() properties = { "status": status, "operator": operator, "duration": duration, "timestamp": timestamp, "id": i, "task_type": task_type, "min_duration": min_duration, "max_duration": max_duration, "avg_duration": avg_duration, "task_duration": task_duration } # Aggiungi lead_time e timing_status solo se CLOSED if lead_time is not None: properties["lead_time"] = lead_time if timing_status is not None: properties["timing_status"] = timing_status feature = { "type": "Feature", "properties": properties, "geometry": { "type": "Point", "coordinates": generate_random_point() } } features.append(feature) geojson = { "type": "FeatureCollection", "features": features } with open('data/sample.geojson', 'w') as f: json.dump(geojson, f, indent=2) print(f"Generated {num_points} data points in data/sample.geojson") if __name__ == "__main__": generate_data(1000)