import csv import random from datetime import datetime, timedelta, date N = 10_000_000 OUTPUT_FILE = "kazna.csv" # Најран датум на инсталација на камера CAMERAS_START_DATE = datetime.strptime("2022-03-15", "%Y-%m-%d").date() TODAY = date.today() amounts = [ 2500, 3000, 3500, 4500, 5000, 7000, 9000, 12000, 15000, 20000, 25000, 30000, 45000, 60000 ] def random_date_after_camera_installation(): days_between = (TODAY - CAMERAS_START_DATE).days return CAMERAS_START_DATE + timedelta(days=random.randint(0, days_between)) def random_deadline(datum): return datum + timedelta(days=random.choice([8, 15, 30, 45, 60])) def generate_status(datum, rok): r = random.random() # Ако рокот е поминат if rok < TODAY: if r < 0.70: return 1 # платена elif r < 0.90: return 2 # задоцнета / проблематична else: return 0 # сè уште неплатена # Ако рокот НЕ е поминат else: if r < 0.55: return 0 # pending elif r < 0.95: return 1 # paid else: return 2 # problematic def random_amount(): r = random.random() # Најчести помали казни if r < 0.45: return random.choice([ 2500, 3000, 3500, 4500, 5000 ]) # Средни казни elif r < 0.80: return random.choice([ 7000, 9000, 12000, 15000 ]) # Поголеми казни elif r < 0.95: return random.choice([ 20000, 25000, 30000 ]) # Ретки многу големи казни else: return random.choice([ 45000, 60000 ]) with open(OUTPUT_FILE, "w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerow([ "datum", "status", "rok_na_plakanje", "iznos_za_plakanje" ]) for i in range(1, N + 1): datum = random_date_after_camera_installation() rok = random_deadline(datum) status = generate_status(datum, rok) iznos = random_amount() writer.writerow([ datum.strftime("%Y-%m-%d"), status, rok.strftime("%Y-%m-%d"), iznos ]) if i % 100_000 == 0: print(f"{i} kazni generated...") print("CSV file generated:", OUTPUT_FILE)