Ejemplo n.º 1
0
def calculate_enhanced_meta(serie: pd.Series, periodicity: str) -> dict:
    """Crea o actualiza los metadatos enriquecidos de la serie pasada. El título de
    la misma DEBE ser el ID de la serie en la base de datos"""

    days_since_update = (datetime.now() - _get_last_day_of_period(serie, periodicity)).days
    last_index = serie.index.get_loc(serie.last_valid_index())
    last = serie[last_index]
    second_to_last = serie[last_index - 1] if serie.index.size > 1 else None
    last_pct_change = last / second_to_last - 1

    # Cálculos
    meta = {
        meta_keys.INDEX_START: serie.first_valid_index().date(),
        meta_keys.INDEX_END: serie.last_valid_index().date(),
        meta_keys.PERIODICITY: periodicity,
        meta_keys.INDEX_SIZE: _get_index_size(serie),
        meta_keys.DAYS_SINCE_LAST_UPDATE: days_since_update,
        meta_keys.LAST_VALUE: last,
        meta_keys.SECOND_TO_LAST_VALUE: second_to_last,
        meta_keys.LAST_PCT_CHANGE: last_pct_change,
        meta_keys.IS_UPDATED: _is_series_updated(days_since_update, periodicity),
        meta_keys.MAX: serie.max(),
        meta_keys.MIN: serie.min(),
        meta_keys.AVERAGE: serie.mean(),
        meta_keys.SIGNIFICANT_FIGURES: significant_figures(serie.values)
    }

    return meta
 def test_figures_nan_ignored(self):
     self.assertEqual(significant_figures([1, np.nan, 1.24, 20, 5.3123]), 4)
 def test_figures_empty_list(self):
     self.assertEqual(significant_figures([]), 0)
 def test_figures_many_decimal_places(self):
     self.assertEqual(significant_figures([1.1, 1.24, 1.4, 5.3123]), 4)
 def test_figures_integer_and_decimals(self):
     self.assertEqual(significant_figures([1, 1.24, 20, 5.3123]), 4)
 def test_figures_all_single_point_decimal(self):
     self.assertEqual(significant_figures([1.1, 1.2, 1.4]), 1)
 def test_figures_all_integers(self):
     self.assertEqual(significant_figures([1, 2, 302, 20, 15]), 0)
 def test_figures_single_element_without_figures(self):
     self.assertEqual(significant_figures([1]), 0)
 def test_float_error(self):
     zero_point_three = 0.1 + 0.2  # https://0.30000000000000004.com/
     self.assertEqual(significant_figures([zero_point_three]), 1)
 def test_point_zero_floats(self):
     self.assertEqual(significant_figures([1.0, np.nan, 10.00, 20, 2.0]), 0)