diff --git a/inflammation-analysis.py b/inflammation-analysis.py index 83093bbb..01d8f449 100644 --- a/inflammation-analysis.py +++ b/inflammation-analysis.py @@ -20,10 +20,8 @@ def main(args): for filename in in_files: inflammation_data = models.load_csv(filename) - view_data = { - 'average': models.daily_mean(inflammation_data), - 'max': models.daily_max(inflammation_data), - 'min': models.daily_min(inflammation_data)} + + view_data = {'mean': models.daily_mean(inflammation_data), 'max': models.daily_max(inflammation_data), 'min': models.daily_min(inflammation_data), **(models.s_dev(inflammation_data))} views.visualize(view_data) diff --git a/inflammation/models.py b/inflammation/models.py index ebdc352d..e347a005 100644 --- a/inflammation/models.py +++ b/inflammation/models.py @@ -44,6 +44,18 @@ def daily_min(data): """ return np.min(data, axis=0) + + +def s_dev(data): + """Computes and returns standard deviation for data.""" + mmm = np.mean(data, axis=0) + devs = [] + for entry in data: + devs.append((entry - mmm) * (entry - mmm)) + + s_dev2 = sum(devs) / len(data) + return {'standard deviation': s_dev2} + def patient_normalise(data): """Normalise patient data from a 2D inflammation data array.""" if not isinstance(data, np.ndarray): @@ -57,3 +69,4 @@ def patient_normalise(data): normalised = data / max_data[:, np.newaxis] normalised[np.isnan(normalised)] = 0 return normalised + diff --git a/tests/test_models.py b/tests/test_models.py index 9da71497..ff508fa8 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -1,5 +1,6 @@ """Tests for statistics functions within the Model layer.""" +import os import numpy as np import numpy.testing as npt import pytest @@ -97,10 +98,14 @@ def test_patient_normalise(test, expected, expect_raises): if isinstance(test, list): test = np.array(test) - if expect_raises is not None: - with pytest.raises(expect_raises): - result = patient_normalise(test) - npt.assert_allclose(result, np.array(expected), rtol=1e-2, atol=1e-2) - else: - result = patient_normalise(test) - npt.assert_allclose(result, np.array(expected), rtol=1e-2, atol=1e-2) + +@pytest.mark.parametrize('data, expected_standard_deviation', [ + ([0, 0, 0], 0.0), + ([1.0, 1.0, 1.0], 0), + ([0.0, 2.0], 1.0) +]) +def test_daily_standard_deviation(data, expected_standard_deviation): + from inflammation.models import s_dev + result_data = s_dev(data)['standard deviation'] + npt.assert_approx_equal(result_data, expected_standard_deviation) +