diff --git a/requirements.txt b/requirements.txt index e6eac089238c5908bb07e3e45a306d9ec024d03d..bac8f3919f75435dd16b8769f761ebf7b5d0c6ea 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ pandas~=1.1.5 setuptools~=57.0.0 numpy~=1.19.5 -numba~=0.53.1 +numba>0.53.1 scipy~=1.5.4 hmmlearn~=0.2.6 scikit-learn~=1.0.1 diff --git a/skais/ais/ais_trajectory.py b/skais/ais/ais_trajectory.py index 709440b93d837c1bf820a46c5d694744fa6fec55..f8364722878ef74364cb05f363da1ed002425b83 100644 --- a/skais/ais/ais_trajectory.py +++ b/skais/ais/ais_trajectory.py @@ -214,3 +214,12 @@ class AISTrajectory(AISPoints): return self else: return AISTrajectory(new_df, mmsi=self.mmsi) + + def get_time_per_label_shift(self, label_column='label'): + current_label = -1 + result = [] + for index, row in self.df.iterrows(): + if current_label != row[label_column]: + current_label = row[label_column] + result.append((row['ts_sec'], current_label)) + return result \ No newline at end of file diff --git a/skais/tests/ais/test_ais_trajectory.py b/skais/tests/ais/test_ais_trajectory.py index d4bb0d629c31fccbae8833eef65d4b19ab0db58d..bea4d8843011eaabc1ae0b81bf1dc023b3e62706 100644 --- a/skais/tests/ais/test_ais_trajectory.py +++ b/skais/tests/ais/test_ais_trajectory.py @@ -333,4 +333,49 @@ class TestAISTrajectory(unittest.TestCase): expected = np.array([2, 2, 2, 2, 2]) - np.testing.assert_equal(result, expected) \ No newline at end of file + np.testing.assert_equal(result, expected) + + def test_get_time_per_label_shift_single_label(self): + trajectory = AISTrajectory( + pd.DataFrame( + { + "label": [1 for _ in range(0, 101, 10)], + "ts_sec": [i for i in range(0, 6001, 600)] + } + ) + ) + + result = trajectory.get_time_per_label_shift() + expected = [(0, 1)] + + self.assertListEqual(result, expected) + + def test_get_time_per_label_shift_label_switch_1(self): + trajectory = AISTrajectory( + pd.DataFrame( + { + "label": [1 for _ in range(11)] + [2 for _ in range(10)], + "ts_sec": [i for i in range(0, 12001, 600)] + } + ) + ) + + result = trajectory.get_time_per_label_shift() + expected = [(0, 1), (6600, 2)] + + self.assertListEqual(result, expected) + + def test_get_time_per_label_shift_label_switch_2(self): + trajectory = AISTrajectory( + pd.DataFrame( + { + "label": [1 for _ in range(11)] + [2 for _ in range(10)]+ [1 for _ in range(10)], + "ts_sec": [i for i in range(0, 18001, 600)] + } + ) + ) + + result = trajectory.get_time_per_label_shift() + expected = [(0, 1), (6600, 2), (12600, 1)] + + self.assertListEqual(result, expected) \ No newline at end of file diff --git a/skais/utils/geography.py b/skais/utils/geography.py index a45ec845259a0d05409fae5174b2396ad8145182..79b110194c7da6bd332b310c1e46a70beb93a2dd 100644 --- a/skais/utils/geography.py +++ b/skais/utils/geography.py @@ -1,4 +1,3 @@ -from sklearn.metrics.pairwise import haversine_distances import numpy as np from numba import jit