From 07c0cb82564562f67337af75cc064e0c6a4f9ffe Mon Sep 17 00:00:00 2001
From: Le Roux Erwan <erwan.le-roux@irstea.fr>
Date: Mon, 5 Nov 2018 13:57:21 +0100
Subject: [PATCH] Add AlpsCoordinates

---
 .../estimator/abstract_estimator.py           | 10 ++++-
 .../robustness_plot/abstract_robustness.py    |  3 +-
 .../robustness_plot/spatial_robustness.py     |  7 ++--
 .../dataset/abstract_dataset.py               |  2 +-
 .../dataset/simulation_dataset.py             |  4 +-
 ..._coordinate.py => abstract_coordinates.py} |  1 +
 .../alps_station_coordinates.py               | 37 +++++++++++++++++++
 ...coordinate.py => generated_coordinates.py} |  2 +-
 .../normalized_coordinates.py                 |  0
 utils.py                                      | 11 ++++++
 10 files changed, 67 insertions(+), 10 deletions(-)
 rename spatio_temporal_dataset/spatial_coordinates/{abstract_coordinate.py => abstract_coordinates.py} (98%)
 create mode 100644 spatio_temporal_dataset/spatial_coordinates/alps_station_coordinates.py
 rename spatio_temporal_dataset/spatial_coordinates/{generated_coordinate.py => generated_coordinates.py} (97%)
 create mode 100644 spatio_temporal_dataset/spatial_coordinates/normalized_coordinates.py
 create mode 100644 utils.py

diff --git a/extreme_estimator/estimator/abstract_estimator.py b/extreme_estimator/estimator/abstract_estimator.py
index 84e8f5ff..40ca905b 100644
--- a/extreme_estimator/estimator/abstract_estimator.py
+++ b/extreme_estimator/estimator/abstract_estimator.py
@@ -1,4 +1,12 @@
 
 
 class AbstractEstimator(object):
-    pass
\ No newline at end of file
+
+    def __init__(self):
+        pass
+
+    def fit(self):
+        pass
+
+    def error(self):
+        pass
\ No newline at end of file
diff --git a/extreme_estimator/robustness_plot/abstract_robustness.py b/extreme_estimator/robustness_plot/abstract_robustness.py
index 7ab9deca..b40f9bd2 100644
--- a/extreme_estimator/robustness_plot/abstract_robustness.py
+++ b/extreme_estimator/robustness_plot/abstract_robustness.py
@@ -5,7 +5,7 @@ from extreme_estimator.R_fit.max_stable_fit.max_stable_models import GaussianMSP
 from itertools import product
 
 from spatio_temporal_dataset.dataset.simulation_dataset import SimulatedDataset
-from spatio_temporal_dataset.spatial_coordinates.generated_coordinate import CircleCoordinates
+from spatio_temporal_dataset.spatial_coordinates.generated_coordinates import CircleCoordinates
 import matplotlib.pyplot as plt
 
 plt.style.use('seaborn-white')
@@ -82,7 +82,6 @@ class AbstractRobustnessPlot(object):
     @staticmethod
     def estimation_error_max_stable_unitary_frechet(**kwargs_single_points):
         # Get the argument from kwargs
-        print(kwargs_single_points)
         max_stable_model = MaxStableModelItem.value_from_kwargs(**kwargs_single_points)
         spatial_coordinate_class = SpatialCoordinateClassItem.value_from_kwargs(**kwargs_single_points)
         nb_station = NbStationItem.value_from_kwargs(**kwargs_single_points)
diff --git a/extreme_estimator/robustness_plot/spatial_robustness.py b/extreme_estimator/robustness_plot/spatial_robustness.py
index aa5e35c5..3d872cd2 100644
--- a/extreme_estimator/robustness_plot/spatial_robustness.py
+++ b/extreme_estimator/robustness_plot/spatial_robustness.py
@@ -1,7 +1,7 @@
 from extreme_estimator.R_fit.max_stable_fit.max_stable_models import GaussianMSP, BrownResick
 from extreme_estimator.robustness_plot.abstract_robustness import DisplayItem, AbstractRobustnessPlot, \
     SpatialCoordinateClassItem, NbObservationItem, NbStationItem, MaxStableModelItem, SpatialParamsItem
-from spatio_temporal_dataset.spatial_coordinates.generated_coordinate import CircleCoordinates
+from spatio_temporal_dataset.spatial_coordinates.generated_coordinates import CircleCoordinates
 
 spatial_robustness = AbstractRobustnessPlot(grid_row_item=SpatialCoordinateClassItem,
                                             grid_column_item=NbObservationItem,
@@ -10,6 +10,7 @@ spatial_robustness = AbstractRobustnessPlot(grid_row_item=SpatialCoordinateClass
 
 # Put only the parameter that will vary
 spatial_robustness.robustness_grid_plot(**{
-    NbStationItem.argument_name: [10, 20, 30, 40, 50],
-    MaxStableModelItem.argument_name: [GaussianMSP(), BrownResick()][:]
+    NbStationItem.argument_name: [10, 30, 50, 100],
+    MaxStableModelItem.argument_name: [GaussianMSP(), BrownResick()][:],
+    NbObservationItem.argument_name: [10, 50, 100]
 })
diff --git a/spatio_temporal_dataset/dataset/abstract_dataset.py b/spatio_temporal_dataset/dataset/abstract_dataset.py
index 25d13e0e..b270fc13 100644
--- a/spatio_temporal_dataset/dataset/abstract_dataset.py
+++ b/spatio_temporal_dataset/dataset/abstract_dataset.py
@@ -2,7 +2,7 @@ import os
 import os.path as op
 import pandas as pd
 from spatio_temporal_dataset.temporal_maxima.temporal_maxima import TemporalMaxima
-from spatio_temporal_dataset.spatial_coordinates.abstract_coordinate import AbstractSpatialCoordinates
+from spatio_temporal_dataset.spatial_coordinates.abstract_coordinates import AbstractSpatialCoordinates
 
 
 class AbstractDataset(object):
diff --git a/spatio_temporal_dataset/dataset/simulation_dataset.py b/spatio_temporal_dataset/dataset/simulation_dataset.py
index b7e01752..bc6a2860 100644
--- a/spatio_temporal_dataset/dataset/simulation_dataset.py
+++ b/spatio_temporal_dataset/dataset/simulation_dataset.py
@@ -2,8 +2,8 @@ from extreme_estimator.R_fit.max_stable_fit.max_stable_models import MaxStableMo
 import pandas as pd
 from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset
 from spatio_temporal_dataset.temporal_maxima.temporal_maxima import TemporalMaxima
-from spatio_temporal_dataset.spatial_coordinates.abstract_coordinate import AbstractSpatialCoordinates
-from spatio_temporal_dataset.spatial_coordinates.generated_coordinate import CircleCoordinates
+from spatio_temporal_dataset.spatial_coordinates.abstract_coordinates import AbstractSpatialCoordinates
+from spatio_temporal_dataset.spatial_coordinates.generated_coordinates import CircleCoordinates
 
 
 class SimulatedDataset(AbstractDataset):
diff --git a/spatio_temporal_dataset/spatial_coordinates/abstract_coordinate.py b/spatio_temporal_dataset/spatial_coordinates/abstract_coordinates.py
similarity index 98%
rename from spatio_temporal_dataset/spatial_coordinates/abstract_coordinate.py
rename to spatio_temporal_dataset/spatial_coordinates/abstract_coordinates.py
index 3d25de71..31bf1787 100644
--- a/spatio_temporal_dataset/spatial_coordinates/abstract_coordinate.py
+++ b/spatio_temporal_dataset/spatial_coordinates/abstract_coordinates.py
@@ -9,6 +9,7 @@ class AbstractSpatialCoordinates(object):
     COORD_X = 'coord_x'
     COORD_Y = 'coord_y'
     COORD_SPLIT = 'coord_split'
+    COOR_ID = 'coord_id'
     # Constants
     TRAIN_SPLIT_STR = 'train_split'
     TEST_SPLIT_STR = 'test_split'
diff --git a/spatio_temporal_dataset/spatial_coordinates/alps_station_coordinates.py b/spatio_temporal_dataset/spatial_coordinates/alps_station_coordinates.py
new file mode 100644
index 00000000..4e8c4a59
--- /dev/null
+++ b/spatio_temporal_dataset/spatial_coordinates/alps_station_coordinates.py
@@ -0,0 +1,37 @@
+import pandas as pd
+import os.path as op
+
+from spatio_temporal_dataset.spatial_coordinates.abstract_coordinates import AbstractSpatialCoordinates
+from utils import get_full_path
+
+
+class AlpsStationCoordinate(AbstractSpatialCoordinates):
+    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='coord-lambert2'):
+        csv_path = op.join(cls.FULL_PATH, csv_file + '.csv')
+        return super().from_csv(csv_path)
+
+    @classmethod
+    def transform_txt_into_csv(cls):
+        filepath = op.join(cls.FULL_PATH, 'original data', 'coord-lambert2.txt')
+        station_to_coordinates = {}
+        with open(filepath, 'r') as f:
+            for l in f:
+                _, station_name, coordinates = l.split('"')
+                coordinates = coordinates.split()
+                assert len(coordinates) == 3
+                station_to_coordinates[station_name] = coordinates
+        df = pd.DataFrame.from_dict(data=station_to_coordinates, orient='index',
+                                    columns=[cls.COORD_X, cls.COORD_Y, cls.COOR_ID])
+        df.to_csv(op.join(cls.FULL_PATH, 'coord-lambert2.csv'))
+        print(df.head())
+        print(df.index)
+
+
+if __name__ == '__main__':
+    # AlpsStationCoordinate.transform_txt_into_csv()
+    coord = AlpsStationCoordinate.from_csv()
+    coord.visualization()
diff --git a/spatio_temporal_dataset/spatial_coordinates/generated_coordinate.py b/spatio_temporal_dataset/spatial_coordinates/generated_coordinates.py
similarity index 97%
rename from spatio_temporal_dataset/spatial_coordinates/generated_coordinate.py
rename to spatio_temporal_dataset/spatial_coordinates/generated_coordinates.py
index b937b22e..81cbc1b3 100644
--- a/spatio_temporal_dataset/spatial_coordinates/generated_coordinate.py
+++ b/spatio_temporal_dataset/spatial_coordinates/generated_coordinates.py
@@ -3,7 +3,7 @@ import numpy as np
 import pandas as pd
 
 from extreme_estimator.R_fit.utils import get_loaded_r
-from spatio_temporal_dataset.spatial_coordinates.abstract_coordinate import AbstractSpatialCoordinates
+from spatio_temporal_dataset.spatial_coordinates.abstract_coordinates import AbstractSpatialCoordinates
 import matplotlib.pyplot as plt
 
 
diff --git a/spatio_temporal_dataset/spatial_coordinates/normalized_coordinates.py b/spatio_temporal_dataset/spatial_coordinates/normalized_coordinates.py
new file mode 100644
index 00000000..e69de29b
diff --git a/utils.py b/utils.py
new file mode 100644
index 00000000..8b65aecf
--- /dev/null
+++ b/utils.py
@@ -0,0 +1,11 @@
+import os
+import os.path as op
+
+
+def get_root_path() -> str:
+    return os.path.dirname(os.path.abspath(__file__))
+
+
+def get_full_path(relative_path: str) -> str:
+    return op.join(get_root_path(), relative_path)
+
-- 
GitLab