def test_latlong_to_x_y(self):
        """Should convert latlng column to separate x and y columns, using Equirectangular projection"""
        latlong_df = pd.DataFrame({'latlng': [[52.1, 5.3], [52.2, 5.4], [52.3, 5.5]]}, index=[1, 2, 3])

        transform_result = gps.lat_long_to_x_y(latlong_df)

        self.assertEqual(list(transform_result.columns.values), ['latlng', 'x', 'y'])
        np.testing.assert_almost_equal(list(transform_result.x.values), [0.057, 0.058, 0.059], 3)
        np.testing.assert_almost_equal(list(transform_result.y.values), [0.909, 0.911, 0.913], 3)
    def test_latlong_to_x_y_alternative_latlong_col_name(self):
        """Should use alternative column name for lat-long"""
        latlong_df = pd.DataFrame({'alt_latlng': [[52.1, 5.3], [52.2, 5.4], [52.3, 5.5]]}, index=[1, 2, 3])

        transform_result = gps.lat_long_to_x_y(latlong_df, lat_long_colname='alt_latlng')

        self.assertEqual(list(transform_result.columns.values), ['alt_latlng', 'x', 'y'])
        np.testing.assert_almost_equal(list(transform_result.x.values), [0.057, 0.058, 0.059], 3)
        np.testing.assert_almost_equal(list(transform_result.y.values), [0.909, 0.911, 0.913], 3)
Beispiel #3
0
    def __total_deviation(self, activity_id):
        stream_df = load_stream(self.database_driver, activity_id, 'latlng')

        if stream_df is not None:
            stream_df = lat_long_to_x_y(stream_df)
            stream_df = smooth(stream_df, smooth_colname='x')
            stream_df = smooth(stream_df, smooth_colname='y')
            stream_df = derivative(stream_df, derivative_colname='x_smooth')
            stream_df = derivative(stream_df, derivative_colname='y_smooth')
            stream_df = rolling_similarity(stream_df, cosine_similarity, 'dx_smooth_dt', 'dy_smooth_dt')

            try:
                return np.nansum([cosine_to_deviation(cos)
                                  for cos in stream_df.cosine_similarity_dx_smooth_dt_dy_smooth_dt])
            except ValueError:
                logging.warning('Failed to compute route deviation for activity %d, returning NaN' % activity_id)
                return np.nan
        else:
            logging.warning('No gps stream available for activity %d, returning NaN' % activity_id)
            return np.nan