-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgenerardataset.py
More file actions
97 lines (76 loc) · 3.35 KB
/
generardataset.py
File metadata and controls
97 lines (76 loc) · 3.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
"""
@ IOC - CE IABD
"""
import os
import logging
import numpy as np
def generar_dataset(num, ind, dicc):
"""
Genera els temps dels ciclistes, de forma aleatòria, però en base a la informació del diccionari
"""
# Variable per guardar les dades de cada ciclista en una llista
list_ciclistes = []
# Variable per obtenir en una llista tots els dorsals de cada un dels ciclistes.
dorsal = list(range((num*ind), (num*(ind+1))))
# Bucle for per obtenir de forma aleatòria tots els temps de cada un dels ciclistes
for i in range(num):
# Per obtenir el temps de pujada
tp = int(np.random.normal(dicc['mu_p'], dicc['sigma']))
# Per obtenir el temps de baixada
tb = int(np.random.normal(dicc['mu_b'], dicc['sigma']))
# Per obtenir el temps total
tt = tp + tb
# Per guardar les dades de cada ciclista en la llista que havia definit abans.
list_ciclistes.append({"id": dorsal[i]+1, "tp": tp, "tb": tb, "tt": tt, "tipus": dicc['name']})
# Per retornar la llista amb totes les dades de tots els ciclistes
return list_ciclistes
if __name__ == "__main__":
# Per veure la informació dels resultats des de la consola.
logging.basicConfig(format='%(message)s', level=logging.DEBUG)
# Per no mostrar els missatges de la llibreria Matplotlib.
logging.getLogger('matplotlib.font_manager').setLevel(logging.ERROR)
STR_CICLISTES = 'data/ciclistes.csv'
try:
os.makedirs(os.path.dirname(STR_CICLISTES))
except FileExistsError:
pass
# BEBB: bons escaladors, bons baixadors
# BEMB: bons escaladors, mal baixadors
# MEBB: mal escaladors, bons baixadors
# MEMB: mal escaladors, mal baixadors
# Port del Cantó (18 Km de pujada, 18 Km de baixada)
# pujar a 20 Km/h són 54 min = 3240 seg
# pujar a 14 Km/h són 77 min = 4268 seg
# baixar a 45 Km/h són 24 min = 1440 seg
# baixar a 30 Km/h són 36 min = 2160 seg
MU_P_BE = 3240 # mitjana temps pujada bons escaladors
MU_P_ME = 4268 # mitjana temps pujada mals escaladors
MU_B_BB = 1440 # mitjana temps baixada bons baixadors
MU_B_MB = 2160 # mitjana temps baixada mals baixadors
SIGMA = 240 # 240 s = 4 min
dicc_ciclistes = [
{"name":"BEBB", "mu_p": MU_P_BE, "mu_b": MU_B_BB, "sigma": SIGMA},
{"name":"BEMB", "mu_p": MU_P_BE, "mu_b": MU_B_MB, "sigma": SIGMA},
{"name":"MEBB", "mu_p": MU_P_ME, "mu_b": MU_B_BB, "sigma": SIGMA},
{"name":"MEMB", "mu_p": MU_P_ME, "mu_b": MU_B_MB, "sigma": SIGMA}
]
# Variable per guardar el número de files a generar de cada tipus de ciclista.
NUM_FILES_GENERAR = 600
# Per crear i obrir el fitxer data/ciclistes.csv
with open(STR_CICLISTES, "w", encoding="UTF-8") as foutput:
# Per escriure en la primera linía els noms de les columnes
# id: Dorsal del ciclista
# tp: Temps de pujada
# tb: Temps de baixada
# tt: Temps total (tp + tb)
# tipus: El tipus de ciclista ('BEBB' | 'BEMB' | 'MEBB' | 'MEMB')
foutput.write("id;tp;tb;tt;tipus\n")
# Bucle for per generar una llista per a cada un dels tipus de ciclistes
for x in list(range(len(dicc_ciclistes))):
dataset_ciclistes = generar_dataset(NUM_FILES_GENERAR, x, dicc_ciclistes[x])
# Bucle for per guardar cada element de la llista en l'arxiu ciclistes.csv
for y in list(range(len(dataset_ciclistes))):
ciclista = dataset_ciclistes[y]
foutput.write(
f"{ciclista['id']};{ciclista['tp']};{ciclista['tb']};{ciclista['tt']};{ciclista['tipus']}\n")
logging.info("s'ha generat data/ciclistes.csv")