From b3f3ea49bc0de666e4cc653d9a406fca803a0d12 Mon Sep 17 00:00:00 2001 From: Steve Crouch Date: Fri, 15 Dec 2023 12:25:20 +0000 Subject: [PATCH 1/2] Add implementation of standard deviation on data --- inflammation-analysis.py | 2 +- inflammation/models.py | 10 ++++++++++ tests/test_models.py | 12 ++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/inflammation-analysis.py b/inflammation-analysis.py index 1ca0132f..38152583 100644 --- a/inflammation-analysis.py +++ b/inflammation-analysis.py @@ -21,7 +21,7 @@ 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 a892fead..a1827589 100644 --- a/inflammation/models.py +++ b/inflammation/models.py @@ -32,3 +32,13 @@ 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 295e32cf..6869bdcc 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -1,7 +1,9 @@ """Tests for statistics functions within the Model layer.""" +import os import numpy as np import numpy.testing as npt +import pytest def test_daily_mean_zeros(): @@ -29,3 +31,13 @@ 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 75d0b40c7c31157974ed6ebc1958ae936dc32dad Mon Sep 17 00:00:00 2001 From: Kamilla Kopec-Harding Date: Tue, 29 Apr 2025 13:01:31 +0300 Subject: [PATCH 2/2] Change average key to mean for accuracy --- inflammation-analysis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inflammation-analysis.py b/inflammation-analysis.py index b071b3cd..01d8f449 100644 --- a/inflammation-analysis.py +++ b/inflammation-analysis.py @@ -21,7 +21,7 @@ def main(args): 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), **(models.s_dev(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)