minor fixes
Browse files- src/front_dataset_handler.py +24 -9
src/front_dataset_handler.py
CHANGED
@@ -8,7 +8,7 @@ import json
|
|
8 |
|
9 |
class FrontDatasetHandler:
|
10 |
def __init__(self, maestro: pd.DataFrame=None, precios_cierre: pd.DataFrame=None, app_dataset: pd.DataFrame=None,
|
11 |
-
json_path: str = None, pickle_path: str = None):
|
12 |
self.maestro = maestro
|
13 |
self.app_dataset = app_dataset # Dataframe preprocesado para la app
|
14 |
self.pickle_path = pickle_path
|
@@ -28,6 +28,11 @@ class FrontDatasetHandler:
|
|
28 |
num_maps = json.load(f)
|
29 |
self.sector_num_map = num_maps['sector_num_map']
|
30 |
self.industry_num_map = num_maps['industry_num_map']
|
|
|
|
|
|
|
|
|
|
|
31 |
|
32 |
self.norm_columns = None
|
33 |
if maestro is not None:
|
@@ -46,8 +51,15 @@ class FrontDatasetHandler:
|
|
46 |
self.precios_cierre.columns.name = 'ticker'
|
47 |
end_date = self.precios_cierre.index.max()
|
48 |
start_date = end_date - pd.Timedelta(days=n_dias)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
|
50 |
-
# Filtrar datos dentro del rango de fechas
|
51 |
precios_cierre_fh = self.precios_cierre.loc[start_date:end_date].copy()
|
52 |
|
53 |
# Descartar los últimos n_dias_descartar
|
@@ -63,14 +75,17 @@ class FrontDatasetHandler:
|
|
63 |
|
64 |
def calcula_rendimientos_y_volatilidad(self, n_dias=365, umbral_max=0.3, umbral_min=-0.3):
|
65 |
end_date = self.precios_cierre.index.max()
|
|
|
|
|
66 |
start_date = end_date - pd.Timedelta(days=n_dias)
|
67 |
-
#
|
68 |
if start_date not in self.precios_cierre.index:
|
69 |
-
|
70 |
-
if len(
|
71 |
-
start_date =
|
72 |
else:
|
73 |
-
|
|
|
74 |
_df_rend_y_vol = self.precios_cierre.loc[start_date:end_date].copy()
|
75 |
|
76 |
_df_rend_y_vol.dropna(how='all', inplace=True) #####
|
@@ -366,10 +381,10 @@ class FrontDatasetHandler:
|
|
366 |
if self.app_dataset is not None:
|
367 |
print("app_dataset already exists, skipping processing")
|
368 |
return
|
369 |
-
|
370 |
self.filtra_y_homogeneiza(n_dias=periodo, n_dias_descartar=n_dias_descartar, min_dias=min_dias)
|
371 |
|
372 |
-
for periodo_metricas in periodos_metricas:
|
373 |
self.calcula_rendimientos_y_volatilidad(n_dias=periodo_metricas, umbral_max=umbrales_rend[1], umbral_min=umbrales_rend[0])
|
374 |
self.cruza_maestro()
|
375 |
self.var_categorica_a_numerica(cat_cols)
|
|
|
8 |
|
9 |
class FrontDatasetHandler:
|
10 |
def __init__(self, maestro: pd.DataFrame=None, precios_cierre: pd.DataFrame=None, app_dataset: pd.DataFrame=None,
|
11 |
+
json_path: str = None, pickle_path: str = None, ignore_columns: list = None, numeric_columns: list = None):
|
12 |
self.maestro = maestro
|
13 |
self.app_dataset = app_dataset # Dataframe preprocesado para la app
|
14 |
self.pickle_path = pickle_path
|
|
|
28 |
num_maps = json.load(f)
|
29 |
self.sector_num_map = num_maps['sector_num_map']
|
30 |
self.industry_num_map = num_maps['industry_num_map']
|
31 |
+
else:
|
32 |
+
self.ignore_columns = ignore_columns
|
33 |
+
self.numeric_columns = numeric_columns
|
34 |
+
print(f"ignore_columns: {self.ignore_columns}")
|
35 |
+
print(f"numeric_columns: {self.numeric_columns}")
|
36 |
|
37 |
self.norm_columns = None
|
38 |
if maestro is not None:
|
|
|
51 |
self.precios_cierre.columns.name = 'ticker'
|
52 |
end_date = self.precios_cierre.index.max()
|
53 |
start_date = end_date - pd.Timedelta(days=n_dias)
|
54 |
+
# If start_date is not in the index, find the nearest earlier date
|
55 |
+
if start_date not in self.precios_cierre.index:
|
56 |
+
earlier_dates = self.precios_cierre.index[self.precios_cierre.index < start_date]
|
57 |
+
if len(earlier_dates) > 0:
|
58 |
+
start_date = earlier_dates.max()
|
59 |
+
else:
|
60 |
+
start_date = self.precios_cierre.index.min()
|
61 |
|
62 |
+
# Filtrar datos dentro del rango de fechas
|
63 |
precios_cierre_fh = self.precios_cierre.loc[start_date:end_date].copy()
|
64 |
|
65 |
# Descartar los últimos n_dias_descartar
|
|
|
75 |
|
76 |
def calcula_rendimientos_y_volatilidad(self, n_dias=365, umbral_max=0.3, umbral_min=-0.3):
|
77 |
end_date = self.precios_cierre.index.max()
|
78 |
+
print(f"Última fecha: {end_date}")
|
79 |
+
print("Primera fecha: ",self.precios_cierre.index.min())
|
80 |
start_date = end_date - pd.Timedelta(days=n_dias)
|
81 |
+
# Si no hay cotizaciones para la fecha de inicio calculada (ej. fin de semana), se cambia por la fecha más cercana
|
82 |
if start_date not in self.precios_cierre.index:
|
83 |
+
earlier_dates = self.precios_cierre.index[self.precios_cierre.index < start_date]
|
84 |
+
if len(earlier_dates) > 0:
|
85 |
+
start_date = earlier_dates.max()
|
86 |
else:
|
87 |
+
start_date = self.precios_cierre.index.min()
|
88 |
+
|
89 |
_df_rend_y_vol = self.precios_cierre.loc[start_date:end_date].copy()
|
90 |
|
91 |
_df_rend_y_vol.dropna(how='all', inplace=True) #####
|
|
|
381 |
if self.app_dataset is not None:
|
382 |
print("app_dataset already exists, skipping processing")
|
383 |
return
|
384 |
+
|
385 |
self.filtra_y_homogeneiza(n_dias=periodo, n_dias_descartar=n_dias_descartar, min_dias=min_dias)
|
386 |
|
387 |
+
for periodo_metricas in periodos_metricas:
|
388 |
self.calcula_rendimientos_y_volatilidad(n_dias=periodo_metricas, umbral_max=umbrales_rend[1], umbral_min=umbrales_rend[0])
|
389 |
self.cruza_maestro()
|
390 |
self.var_categorica_a_numerica(cat_cols)
|