def test_extract_vectors_from_dict_returns_expected_numpy_arrays(): given = { (2, "Walking"): ((186, 15.5), (6, 0.5)), (2, "Standing"): ((0, 0), (6, 0.5)) } expected = (np.array([186, 6, 0, 6]), np.array([15.5, 0.5, 0.0, 0.5])) result = features.extract_vectors_from_dict(given) assert_array_equal(result[0], expected[0]) assert_array_equal(result[1], expected[1])
def feature_histograms_for_activities(interval_features, activities, bins): for activity in activities: activity_intervals = parse.collect_dict_values_by_key_content(interval_features, activity) feature_vectors = features.extract_vectors_from_dict(activity_intervals) for i, vector in enumerate(feature_vectors): plt.figure(figsize=(15, 5)) plt.hist( vector, bins=bins, normed=1, facecolor='blue', alpha=0.5) plt.title(activity + " x_" + str(i)) plt.show()
def test_extract_vectors_from_dict_handles_three_entry_case(): given = { (1, 'Downstairs'): ( (85, 12), (81, 12), (70, 12), ), } expected = (np.array([85, 81, 70]), np.array([12, 12, 12])) result = features.extract_vectors_from_dict(given) assert_array_equal(result[0], expected[0]) assert_array_equal(result[1], expected[1])
def test_extract_vectors_from_dict_handles_keys_mapping_to_empty_tuples(): given = { (2, "Walking"): ((186, 15.5), (6, 0.5)), (2, "Jogging"): (), (2, "Standing"): ((0, 0), (6, 0.5)), (3, "Standing"): ((0, 0), (6, 0.5)) } expected = (np.array([186, 6, 0, 6, 0, 6]), np.array([15.5, 0.5, 0.0, 0.5, 0, 0.5])) result = features.extract_vectors_from_dict(given) assert_array_equal(result[0], expected[0]) assert_array_equal(result[1], expected[1])
def feature_means_and_variances( data: Dict[Tuple[int, str], Sequence[Sequence[float]]], activities: Set[str] ) -> Dict[str, Sequence[Tuple[float, float]]]: out = dict() for activity in activities: activity_features = parse.collect_dict_values_by_key_content(data, activity) value_vectors = features.extract_vectors_from_dict(activity_features) means_and_variances = [] for vector in value_vectors: means_and_variances.append((float(np.mean(vector)), float(np.var(vector)))) out[activity] = means_and_variances return out
def feature_scatter_for_activities(interval_features, activities, colours): fig, ax = plt.subplots(figsize=(10, 10)) for i, activity in enumerate(activities): activity_intervals = parse.collect_dict_values_by_key_content(interval_features, activity) x = features.extract_vectors_from_dict(activity_intervals) ax.scatter(x[0], x[1], c=colours[i], alpha=0.4, marker='.', label=activity) ax.set_xlim((0, 200)) ax.set_ylim((0, 40)) x0, x1 = ax.get_xlim() y0, y1 = ax.get_ylim() ax.set_aspect(abs(x1 - x0) / abs(y1 - y0)) ax.set_title("") plt.xlabel("mean absolute magnitude change per second") plt.ylabel("mean angle change per second") ax.legend() plt.show()