Exemplo n.º 1
0
    def test_derivative_nonlinear_index(self):
        """Should take into account dt in index when computing derivative"""
        test_df = pd.DataFrame({"x": [1, 2, 3]}, index=[1, 2, 4])

        transform_result = streams.derivative(test_df)

        self.assertEqual(list(transform_result.columns.values), ["x", "dx_dt"])
        self.assertTrue(np.isnan(transform_result.dx_dt[1]))
        self.assertEqual(transform_result.dx_dt[2], 1.0)
        self.assertEqual(transform_result.dx_dt[4], 0.5)
Exemplo n.º 2
0
    def test_derivative(self):
        """Should compute derivative for default column"""
        test_df = pd.DataFrame({"x": [1, 2, 3], "y": [4, 5, 6]})

        transform_result = streams.derivative(test_df)

        self.assertEqual(list(transform_result.columns.values), ["x", "y", "dx_dt"])
        self.assertTrue(np.isnan(transform_result.dx_dt[0]))
        self.assertEqual(transform_result.dx_dt[1], 1.0)
        self.assertEqual(transform_result.dx_dt[2], 1.0)
Exemplo n.º 3
0
    def test_derivative_alternative_column_name(self):
        """Should compute derivative of given column name"""
        test_df = pd.DataFrame({"x": [1, 2, 3], "y": [4, 6, 8]})

        transform_result = streams.derivative(test_df, derivative_colname="y")

        self.assertEqual(list(transform_result.columns.values), ["x", "y", "dy_dt"])
        self.assertTrue(np.isnan(transform_result.dy_dt[0]))
        self.assertEqual(transform_result.dy_dt[1], 2.0)
        self.assertEqual(transform_result.dy_dt[2], 2.0)
Exemplo n.º 4
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