DatabaseCreation: kazna.txt

File kazna.txt, 2.5 KB (added by 231018, 16 hours ago)
Line 
1import csv
2import random
3from datetime import datetime, timedelta, date
4
5N = 10_000_000
6OUTPUT_FILE = "kazna.csv"
7
8# Најран датум на инсталација на камера
9CAMERAS_START_DATE = datetime.strptime("2022-03-15", "%Y-%m-%d").date()
10
11TODAY = date.today()
12
13amounts = [
14 2500, 3000, 3500, 4500, 5000,
15 7000, 9000, 12000, 15000,
16 20000, 25000, 30000,
17 45000, 60000
18]
19
20
21def random_date_after_camera_installation():
22 days_between = (TODAY - CAMERAS_START_DATE).days
23 return CAMERAS_START_DATE + timedelta(days=random.randint(0, days_between))
24
25
26def random_deadline(datum):
27 return datum + timedelta(days=random.choice([8, 15, 30, 45, 60]))
28
29
30def generate_status(datum, rok):
31 r = random.random()
32
33 # Ако рокот е поминат
34 if rok < TODAY:
35
36 if r < 0.70:
37 return 1 # платена
38
39 elif r < 0.90:
40 return 2 # задоцнета / проблематична
41
42 else:
43 return 0 # сè уште неплатена
44
45 # Ако рокот НЕ е поминат
46 else:
47
48 if r < 0.55:
49 return 0 # pending
50
51 elif r < 0.95:
52 return 1 # paid
53
54 else:
55 return 2 # problematic
56
57
58def random_amount():
59 r = random.random()
60
61 # Најчести помали казни
62 if r < 0.45:
63 return random.choice([
64 2500, 3000, 3500, 4500, 5000
65 ])
66
67 # Средни казни
68 elif r < 0.80:
69 return random.choice([
70 7000, 9000, 12000, 15000
71 ])
72
73 # Поголеми казни
74 elif r < 0.95:
75 return random.choice([
76 20000, 25000, 30000
77 ])
78
79 # Ретки многу големи казни
80 else:
81 return random.choice([
82 45000, 60000
83 ])
84
85
86with open(OUTPUT_FILE, "w", newline="", encoding="utf-8") as f:
87
88 writer = csv.writer(f)
89
90 writer.writerow([
91 "datum",
92 "status",
93 "rok_na_plakanje",
94 "iznos_za_plakanje"
95 ])
96
97 for i in range(1, N + 1):
98
99 datum = random_date_after_camera_installation()
100
101 rok = random_deadline(datum)
102
103 status = generate_status(datum, rok)
104
105 iznos = random_amount()
106
107 writer.writerow([
108 datum.strftime("%Y-%m-%d"),
109 status,
110 rok.strftime("%Y-%m-%d"),
111 iznos
112 ])
113
114 if i % 100_000 == 0:
115 print(f"{i} kazni generated...")
116
117print("CSV file generated:", OUTPUT_FILE)