Commit 3f80990e authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[refactor] improve test coverage for observations

parent e5bdf83b
No related merge requests found
Showing with 6 additions and 62 deletions
+6 -62
......@@ -19,6 +19,12 @@ class AbstractSpatioTemporalObservations(object):
Main attribute of the class is the DataFrame df_maxima
Index are coordinates index
Columns are independent observations from the same coordinates index
For example, if we have spatial coordinates,
then all the columns might correspond to annual maxima observations for different years
If we have a spatio-temporal coordinates,
then all the columns might correspond to observations that were made at some spatial coodinate, and for some given year
"""
assert df_maxima_gev is not None or df_maxima_frech is not None
assert isinstance(df_maxima_gev, pd.DataFrame) or isinstance(df_maxima_frech, pd.DataFrame)
......@@ -27,13 +33,6 @@ class AbstractSpatioTemporalObservations(object):
self.df_maxima_gev = df_maxima_gev # type: pd.DataFrame
self.df_maxima_frech = df_maxima_frech # type: pd.DataFrame
@classmethod
def from_csv(cls, csv_path: str = None):
assert csv_path is not None
assert op.exists(csv_path)
df = pd.read_csv(csv_path, index_col=0)
return cls.from_df(df)
@property
def _df_maxima(self) -> pd.DataFrame:
if self.df_maxima_frech is not None:
......@@ -70,22 +69,6 @@ class AbstractSpatioTemporalObservations(object):
def nb_obs(self) -> int:
return len(self.columns)
@classmethod
def from_df(cls, df):
df_maxima_list = []
for suffix in [cls.OBSERVATIONS_GEV, cls.OBSERVATIONS_FRECH]:
columns_with_suffix = [c for c in df.columns if str(c).endswith(suffix)]
if columns_with_suffix:
df_maxima = df[columns_with_suffix] if columns_with_suffix else None
df_maxima.columns = [c.replace(' ' + suffix, '') for c in df_maxima.columns]
else:
df_maxima = None
df_maxima_list.append(df_maxima)
df_maxima_gev, df_maxima_frech = df_maxima_list
if df_maxima_gev is not None and df_maxima_frech is not None:
assert pd.Index.equals(df_maxima_gev.columns, df_maxima_frech.columns)
return cls(df_maxima_gev=df_maxima_gev, df_maxima_frech=df_maxima_frech)
def convert_to_spatio_temporal_index(self, coordinates: AbstractCoordinates):
assert coordinates.has_spatio_temporal_coordinates
assert len(coordinates.index) == len(self.index) * self.nb_obs
......@@ -130,9 +113,6 @@ class AbstractSpatioTemporalObservations(object):
def __str__(self) -> str:
return self._df_maxima.__str__()
def __len__(self):
return self._df_maxima.__len__()
def print_summary(self):
# Write a summary of observations
df = self.df_maxima_gev
......
import os.path as op
from spatio_temporal_dataset.spatio_temporal_observations.abstract_spatio_temporal_observations import \
AbstractSpatioTemporalObservations
from root_utils import get_full_path
class AlpsPrecipitationObservations(AbstractSpatioTemporalObservations):
RELATIVE_PATH = r'local/spatio_temporal_datasets/Gilles - precipitations'
FULL_PATH = get_full_path(relative_path=RELATIVE_PATH)
@classmethod
def from_csv(cls, csv_file='max_precip_3j'):
csv_path = op.join(cls.FULL_PATH, csv_file + '.csv')
return super().from_csv(csv_path)
@classmethod
def transform_gilles_txt_into_csv(cls):
filepath = op.join(cls.FULL_PATH, 'original data', 'max_precip_3j.txt')
station_to_coordinates = {}
# todo: be absolutely sure of the mapping, in the txt file of Gilles we do not have the coordinate
# this seems rather dangerous, especially if he loaded
# todo: re-do the whole analysis, and extraction myself about the snow
with open(filepath, 'r') as f:
for l in f:
_, station_name, coordinates = l.split('"')
coordinates = coordinates.split()
print(len(coordinates))
assert len(coordinates) == 55
station_to_coordinates[station_name] = coordinates
# df = pd.DataFrame.from_dict(data=station_to_coordinates, orient='index',
# columns=[cls.COORDINATE_X, cls.COORDINATE_Y, cls.COORDINATE_Z])
# print(df.head())
# filepath = op.join(cls.FULL_PATH, 'max_precip_3j.csv')
# assert not op.exists(filepath)
# df.to_csv(filepath)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment