From bc1406e39f50b6bd96ffd9c192ec945a8ea6b74c Mon Sep 17 00:00:00 2001 From: frankknoll Date: Fri, 13 Oct 2023 18:55:36 +0200 Subject: [PATCH] refactoring --- src/HowBadIsMyBatch.ipynb | 44 ++++++++++++-- .../PrrByVaccineBySymptomFactory.py | 5 -- .../PrrByVaccineBySymptomFactoryTest.py | 32 ---------- .../PrrByVaccineBySymptomTransformer.py | 6 -- .../PrrByVaccineBySymptomTransformerTest.py | 26 --------- .../PrrSeriesFactory.py | 11 ++++ .../PrrSeriesFactoryTest.py | 58 +++++++++++++++++++ .../PrrSeriesTransformer.py | 18 ++++++ .../PrrSeriesTransformerTest.py | 46 +++++++++++++++ 9 files changed, 172 insertions(+), 74 deletions(-) delete mode 100644 src/SymptomsCausedByVaccines/PrrByVaccineBySymptomFactory.py delete mode 100644 src/SymptomsCausedByVaccines/PrrByVaccineBySymptomFactoryTest.py delete mode 100644 src/SymptomsCausedByVaccines/PrrByVaccineBySymptomTransformer.py delete mode 100644 src/SymptomsCausedByVaccines/PrrByVaccineBySymptomTransformerTest.py create mode 100644 src/SymptomsCausedByVaccines/PrrSeriesFactory.py create mode 100644 src/SymptomsCausedByVaccines/PrrSeriesFactoryTest.py create mode 100644 src/SymptomsCausedByVaccines/PrrSeriesTransformer.py create mode 100644 src/SymptomsCausedByVaccines/PrrSeriesTransformerTest.py diff --git a/src/HowBadIsMyBatch.ipynb b/src/HowBadIsMyBatch.ipynb index 2625f6f70e0..af5428d8deb 100644 --- a/src/HowBadIsMyBatch.ipynb +++ b/src/HowBadIsMyBatch.ipynb @@ -439,8 +439,8 @@ "outputs": [], "source": [ "from SymptomsCausedByVaccines.HtmlUpdater import updateHtmlFile\n", - "from SymptomsCausedByVaccines.PrrByVaccineBySymptomFactory import PrrByVaccineBySymptomFactory\n", - "from SymptomsCausedByVaccines.PrrByVaccineBySymptomTransformer import PrrByVaccineBySymptomTransformer\n", + "from src.SymptomsCausedByVaccines.PrrSeriesFactory import PrrSeriesFactory\n", + "from src.SymptomsCausedByVaccines.PrrSeriesTransformer import PrrSeriesTransformer\n", "from SymptomsCausedByVaccines.ProportionalReportingRatiosPersister import saveProportionalReportingRatios\n", "import os\n", "import pandas as pd" @@ -467,10 +467,21 @@ "metadata": {}, "outputs": [], "source": [ - "prrByVaccineBySymptom = PrrByVaccineBySymptomFactory.getPrrByVaccineBySymptom(prrByVaccineAndSymptom)\n", + "prrByVaccineBySymptom = PrrSeriesFactory.getPrrByVaccineBySymptom(prrByVaccineAndSymptom)\n", "prrByVaccineBySymptom" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "0f247c64", + "metadata": {}, + "outputs": [], + "source": [ + "prrBySymptomByVaccine = PrrSeriesFactory.getPrrBySymptomByVaccine(prrByVaccineAndSymptom)\n", + "prrBySymptomByVaccine" + ] + }, { "cell_type": "code", "execution_count": null, @@ -478,10 +489,21 @@ "metadata": {}, "outputs": [], "source": [ - "prrByVaccineBySymptomWithoutZeroPrrs = PrrByVaccineBySymptomTransformer.removeNonZeroPrrs(prrByVaccineBySymptom)\n", + "prrByVaccineBySymptomWithoutZeroPrrs = PrrSeriesTransformer.filterByNonZeroPrrs(prrByVaccineBySymptom)\n", "prrByVaccineBySymptomWithoutZeroPrrs" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "f07203e4", + "metadata": {}, + "outputs": [], + "source": [ + "prrBySymptomByVaccineWithHighPrrs = PrrSeriesTransformer.filterByHighPrrs(prrBySymptomByVaccine)\n", + "prrBySymptomByVaccineWithHighPrrs" + ] + }, { "cell_type": "code", "execution_count": null, @@ -491,7 +513,19 @@ "source": [ "saveProportionalReportingRatios(\n", " prrByVaccineBySymptomWithoutZeroPrrs,\n", - " directory = os.path.normpath(os.getcwd() + '/../docs/data/ProportionalReportingRatios/'))" + " directory = os.path.normpath(os.getcwd() + '/../docs/data/ProportionalReportingRatios/symptoms'))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fac4b34f", + "metadata": {}, + "outputs": [], + "source": [ + "saveProportionalReportingRatios(\n", + " prrBySymptomByVaccineWithHighPrrs,\n", + " directory = os.path.normpath(os.getcwd() + '/../docs/data/ProportionalReportingRatios/vaccines'))" ] }, { diff --git a/src/SymptomsCausedByVaccines/PrrByVaccineBySymptomFactory.py b/src/SymptomsCausedByVaccines/PrrByVaccineBySymptomFactory.py deleted file mode 100644 index 04f1484f088..00000000000 --- a/src/SymptomsCausedByVaccines/PrrByVaccineBySymptomFactory.py +++ /dev/null @@ -1,5 +0,0 @@ -class PrrByVaccineBySymptomFactory: - - @staticmethod - def getPrrByVaccineBySymptom(prrByVaccineAndSymptom): - return prrByVaccineAndSymptom.apply(lambda prrByVaccine: prrByVaccine.to_dict()) diff --git a/src/SymptomsCausedByVaccines/PrrByVaccineBySymptomFactoryTest.py b/src/SymptomsCausedByVaccines/PrrByVaccineBySymptomFactoryTest.py deleted file mode 100644 index bd81d1f6db5..00000000000 --- a/src/SymptomsCausedByVaccines/PrrByVaccineBySymptomFactoryTest.py +++ /dev/null @@ -1,32 +0,0 @@ -import unittest -from pandas.testing import assert_series_equal -from TestHelper import TestHelper -import pandas as pd -from SymptomsCausedByVaccines.PrrByVaccineBySymptomFactory import PrrByVaccineBySymptomFactory - -class PrrByVaccineBySymptomFactoryTest(unittest.TestCase): - - def test_getPrrByVaccineBySymptom(self): - # Given - prrByVaccineAndSymptom = TestHelper.createDataFrame( - columns = ['11-beta-hydroxylase deficiency', '17-hydroxyprogesterone'], - data = [ [0.6, 1.5], - [0.3, 3.0]], - index = pd.Index( - name = 'VAX_TYPE', - data = [ - '6VAX-F', - 'ADEN' - ])) - - # When - prrByVaccineBySymptom = PrrByVaccineBySymptomFactory.getPrrByVaccineBySymptom(prrByVaccineAndSymptom) - - # Then - assert_series_equal( - prrByVaccineBySymptom, - pd.Series( - { - '11-beta-hydroxylase deficiency': {'6VAX-F': 0.6, 'ADEN': 0.3}, - '17-hydroxyprogesterone': {'6VAX-F': 1.5, 'ADEN': 3.0} - })) diff --git a/src/SymptomsCausedByVaccines/PrrByVaccineBySymptomTransformer.py b/src/SymptomsCausedByVaccines/PrrByVaccineBySymptomTransformer.py deleted file mode 100644 index 72ab0654c43..00000000000 --- a/src/SymptomsCausedByVaccines/PrrByVaccineBySymptomTransformer.py +++ /dev/null @@ -1,6 +0,0 @@ -class PrrByVaccineBySymptomTransformer: - - @staticmethod - def removeNonZeroPrrs(prrByVaccineBySymptom): - return prrByVaccineBySymptom.map( - lambda prrByVaccine: {vaccine: prr for vaccine, prr in prrByVaccine.items() if prr != 0}) diff --git a/src/SymptomsCausedByVaccines/PrrByVaccineBySymptomTransformerTest.py b/src/SymptomsCausedByVaccines/PrrByVaccineBySymptomTransformerTest.py deleted file mode 100644 index d500904acd8..00000000000 --- a/src/SymptomsCausedByVaccines/PrrByVaccineBySymptomTransformerTest.py +++ /dev/null @@ -1,26 +0,0 @@ -import unittest -from pandas.testing import assert_series_equal -import pandas as pd -from SymptomsCausedByVaccines.PrrByVaccineBySymptomTransformer import PrrByVaccineBySymptomTransformer - -class PrrByVaccineBySymptomTransformerTest(unittest.TestCase): - - def test_filterByNonZeroPrrs(self): - # Given - prrByVaccineBySymptom = pd.Series( - { - '11-beta-hydroxylase deficiency': {'6VAX-F': 0.0, 'ADEN': 0.3}, - '17-hydroxyprogesterone': {'6VAX-F': 1.5, 'ADEN': 0.0} - }) - - # When - prrByVaccineBySymptomWithoutZeroPrrs = PrrByVaccineBySymptomTransformer.removeNonZeroPrrs(prrByVaccineBySymptom) - - # Then - assert_series_equal( - prrByVaccineBySymptomWithoutZeroPrrs, - pd.Series( - { - '11-beta-hydroxylase deficiency': {'ADEN': 0.3}, - '17-hydroxyprogesterone': {'6VAX-F': 1.5} - })) diff --git a/src/SymptomsCausedByVaccines/PrrSeriesFactory.py b/src/SymptomsCausedByVaccines/PrrSeriesFactory.py new file mode 100644 index 00000000000..bc782ec8ec5 --- /dev/null +++ b/src/SymptomsCausedByVaccines/PrrSeriesFactory.py @@ -0,0 +1,11 @@ +class PrrSeriesFactory: + + @staticmethod + def getPrrByVaccineBySymptom(prrByVaccineAndSymptom): + return prrByVaccineAndSymptom.apply(lambda prrByVaccine: prrByVaccine.to_dict()) + + @staticmethod + def getPrrBySymptomByVaccine(prrByVaccineAndSymptom): + return prrByVaccineAndSymptom.apply( + lambda prrBySymptom: prrBySymptom.to_dict(), + axis = 'columns') diff --git a/src/SymptomsCausedByVaccines/PrrSeriesFactoryTest.py b/src/SymptomsCausedByVaccines/PrrSeriesFactoryTest.py new file mode 100644 index 00000000000..bf857cd8179 --- /dev/null +++ b/src/SymptomsCausedByVaccines/PrrSeriesFactoryTest.py @@ -0,0 +1,58 @@ +import unittest +from pandas.testing import assert_series_equal +from TestHelper import TestHelper +import pandas as pd +from SymptomsCausedByVaccines.PrrSeriesFactory import PrrSeriesFactory + +class PrrSeriesFactoryTest(unittest.TestCase): + + def test_getPrrByVaccineBySymptom(self): + # Given + prrByVaccineAndSymptom = TestHelper.createDataFrame( + columns = ['11-beta-hydroxylase deficiency', '17-hydroxyprogesterone'], + data = [ [0.6, 1.5], + [0.3, 3.0]], + index = pd.Index( + name = 'VAX_TYPE', + data = [ + '6VAX-F', + 'ADEN' + ])) + + # When + prrByVaccineBySymptom = PrrSeriesFactory.getPrrByVaccineBySymptom(prrByVaccineAndSymptom) + + # Then + assert_series_equal( + prrByVaccineBySymptom, + pd.Series( + { + '11-beta-hydroxylase deficiency': {'6VAX-F': 0.6, 'ADEN': 0.3}, + '17-hydroxyprogesterone': {'6VAX-F': 1.5, 'ADEN': 3.0} + })) + + def test_getPrrBySymptomByVaccine(self): + # Given + prrByVaccineAndSymptom = TestHelper.createDataFrame( + columns = ['11-beta-hydroxylase deficiency', '17-hydroxyprogesterone'], + data = [ [0.6, 1.5], + [1.3, 2.5]], + index = pd.Index( + name = 'VAX_TYPE', + data = [ + '6VAX-F', + 'ADEN' + ])) + + # When + prrBySymptomByVaccine = PrrSeriesFactory.getPrrBySymptomByVaccine(prrByVaccineAndSymptom) + + # Then + assert_series_equal( + prrBySymptomByVaccine, + TestHelper.createSeries( + indexName = 'VAX_TYPE', + data = { + '6VAX-F': {'11-beta-hydroxylase deficiency': 0.6, '17-hydroxyprogesterone': 1.5}, + 'ADEN': {'11-beta-hydroxylase deficiency': 1.3, '17-hydroxyprogesterone': 2.5} + })) diff --git a/src/SymptomsCausedByVaccines/PrrSeriesTransformer.py b/src/SymptomsCausedByVaccines/PrrSeriesTransformer.py new file mode 100644 index 00000000000..84b4a8f3731 --- /dev/null +++ b/src/SymptomsCausedByVaccines/PrrSeriesTransformer.py @@ -0,0 +1,18 @@ +class PrrSeriesTransformer: + + @staticmethod + def filterByNonZeroPrrs(prrByVaccineBySymptom): + return PrrSeriesTransformer._filterPrrsBy( + prrByVaccineBySymptom, + lambda prr: prr != 0) + + @staticmethod + def filterByHighPrrs(prrBySymptomByVaccine): + return PrrSeriesTransformer._filterPrrsBy( + prrBySymptomByVaccine, + lambda prr: prr > 1) + + @staticmethod + def _filterPrrsBy(prrByKeyByOtherKey, prrFilter): + return prrByKeyByOtherKey.map( + lambda prrByKey: {key: prr for key, prr in prrByKey.items() if prrFilter(prr)}) diff --git a/src/SymptomsCausedByVaccines/PrrSeriesTransformerTest.py b/src/SymptomsCausedByVaccines/PrrSeriesTransformerTest.py new file mode 100644 index 00000000000..7bc5ece1b22 --- /dev/null +++ b/src/SymptomsCausedByVaccines/PrrSeriesTransformerTest.py @@ -0,0 +1,46 @@ +import unittest +from pandas.testing import assert_series_equal +import pandas as pd +from SymptomsCausedByVaccines.PrrSeriesTransformer import PrrSeriesTransformer + +class PrrSeriesTransformerTest(unittest.TestCase): + + def test_filterByNonZeroPrrs(self): + # Given + prrByVaccineBySymptom = pd.Series( + { + '11-beta-hydroxylase deficiency': {'6VAX-F': 0.0, 'ADEN': 0.3}, + '17-hydroxyprogesterone': {'6VAX-F': 1.5, 'ADEN': 0.0} + }) + + # When + prrByVaccineBySymptomWithoutZeroPrrs = PrrSeriesTransformer.filterByNonZeroPrrs(prrByVaccineBySymptom) + + # Then + assert_series_equal( + prrByVaccineBySymptomWithoutZeroPrrs, + pd.Series( + { + '11-beta-hydroxylase deficiency': {'ADEN': 0.3}, + '17-hydroxyprogesterone': {'6VAX-F': 1.5} + })) + + def test_filterByHighPrrs(self): + # Given + prrBySymptomByVaccine = pd.Series( + { + '6VAX-F': {'11-beta-hydroxylase deficiency': 0.6, '17-hydroxyprogesterone': 1.5}, + 'ADEN': {'11-beta-hydroxylase deficiency': 1.3, '17-hydroxyprogesterone': 0.9} + }) + + # When + prrBySymptomByVaccineWithHighPrrs = PrrSeriesTransformer.filterByHighPrrs(prrBySymptomByVaccine) + + # Then + assert_series_equal( + prrBySymptomByVaccineWithHighPrrs, + pd.Series( + { + '6VAX-F': {'17-hydroxyprogesterone': 1.5}, + 'ADEN': {'11-beta-hydroxylase deficiency': 1.3} + }))