From 1ffbcec84dd224cc193e70dc26ed5237a34daf1e Mon Sep 17 00:00:00 2001 From: Thomas Kiley Date: Thu, 27 Jul 2023 14:24:36 +0100 Subject: [PATCH 1/3] Add in implemenation of standard deviation on data --- inflammation-analysis.py | 3 ++- inflammation/models.py | 11 +++++++++++ tests/test_models.py | 11 ++++++++++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/inflammation-analysis.py b/inflammation-analysis.py index 1ca0132..69e4400 100644 --- a/inflammation-analysis.py +++ b/inflammation-analysis.py @@ -21,7 +21,8 @@ def main(args): for filename in InFiles: 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 4f3c337..c4a8732 100644 --- a/inflammation/models.py +++ b/inflammation/models.py @@ -31,3 +31,14 @@ def daily_max(data): def daily_min(data): """Calculate the daily min of a 2d inflammation data array.""" 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} diff --git a/tests/test_models.py b/tests/test_models.py index 295e32c..4e445df 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -2,7 +2,7 @@ import numpy as np import numpy.testing as npt - +import pytest def test_daily_mean_zeros(): """Test that mean function works for an array of zeros.""" @@ -29,3 +29,12 @@ def test_daily_mean_integers(): # Need to use Numpy testing functions to compare arrays npt.assert_array_equal(daily_mean(test_input), test_result) +@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) From a5fe4adc402643fcd2235b9f7d0ad782c4831128 Mon Sep 17 00:00:00 2001 From: Thomas Kiley Date: Thu, 27 Jul 2023 14:47:08 +0100 Subject: [PATCH 2/3] Add test for numpy array --- tests/test_models.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/test_models.py b/tests/test_models.py index 4e445df..dcf62c3 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -38,3 +38,11 @@ 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) + + +def test_daily_standard_deviation_on_np_array(): + from inflammation.models import s_dev + data = np.array([[0.0]]) + expected_std_devs = [[0.0]] + out = s_dev(data)['standard deviation'] + npt.assert_array_almost_equal(data, expected_std_devs) From 741d6230b5961d3d05c4ff6c9e2c61af79f13af7 Mon Sep 17 00:00:00 2001 From: Thomas Kiley Date: Thu, 27 Jul 2023 16:26:48 +0100 Subject: [PATCH 3/3] Better name for the mean --- inflammation/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inflammation/models.py b/inflammation/models.py index c4a8732..ee468ed 100644 --- a/inflammation/models.py +++ b/inflammation/models.py @@ -35,10 +35,10 @@ def daily_min(data): def s_dev(data): """Computes and returns standard deviation for data.""" - mmm = np.mean(data, axis=0) + number = np.mean(data, axis=0) devs = [] for entry in data: - devs.append((entry - mmm) * (entry - mmm)) + devs.append((entry - number) * (entry - number)) s_dev2 = sum(devs) / len(data) return {'standard deviation': s_dev2}