diff --git a/inflammation-analysis.py b/inflammation-analysis.py index 76a237ba..b8afab97 100644 --- a/inflammation-analysis.py +++ b/inflammation-analysis.py @@ -26,11 +26,13 @@ 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 = {'average': 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 4ff280c5..6b1318e4 100644 --- a/inflammation/models.py +++ b/inflammation/models.py @@ -70,6 +70,16 @@ def daily_min(data): return np.min(data, axis=0) +def s_dev(data): + """Computes and returns standard deviation for data.""" + mean_data = daily_mean(data) + devs = [] + for entry in data: + devs.append((entry - mean_data) * (entry - mean_data)) + + s_dev2 = sum(devs) / len(data) + return {'standard deviation': s_dev2} + def patient_normalise(data): """ Normalise patient data from a 2D inflammation data array. diff --git a/tests/test_models.py b/tests/test_models.py index 6b884ad2..51b6e65c 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -3,6 +3,7 @@ import os import numpy as np import numpy.testing as npt + import pytest from inflammation.models import daily_mean from inflammation.models import daily_max @@ -67,6 +68,16 @@ def test_load_from_json(tmpdir): npt.assert_array_equal(result, [[1, 2, 3], [4, 5, 6]]) +@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) + @pytest.mark.parametrize( "test, expected, expect_raises", [