From 26f03ee5d3a13cfbbcb3171596c573e14f5547a6 Mon Sep 17 00:00:00 2001 From: frankknoll Date: Sat, 26 Aug 2023 20:34:10 +0200 Subject: [PATCH] =?UTF-8?q?im=20Barchart=20gibt=20es=20mindestens=20N=20Gu?= =?UTF-8?q?essed-Eintr=C3=A4ge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BarChartDescriptionTables.py | 16 ++++++- src/BarChartDescriptionTablesTest.py | 63 ++++++++++++++++++++++++++++ src/help.txt | 1 - 3 files changed, 78 insertions(+), 2 deletions(-) diff --git a/src/BarChartDescriptionTables.py b/src/BarChartDescriptionTables.py index f9b2d3a1682..25c08c1cdb3 100644 --- a/src/BarChartDescriptionTables.py +++ b/src/BarChartDescriptionTables.py @@ -1,12 +1,26 @@ import math + class BarChartDescriptionTables: @staticmethod def filterValidJensenShannonDistances(barChartDescriptionTable): - return barChartDescriptionTable[barChartDescriptionTable.apply(BarChartDescriptionTables._isValidJensenShannonDistance, axis = 'columns')] + return barChartDescriptionTable[barChartDescriptionTable.apply(BarChartDescriptionTables._isValidJensenShannonDistance, axis='columns')] @staticmethod def _isValidJensenShannonDistance(barChartDescription): jensenShannonDistance = barChartDescription['BAR_CHART_DESCRIPTION']['Jensen-Shannon distance'] return not math.isnan(jensenShannonDistance) + + @staticmethod + def filterHasMinSizeOfGuessedHistogram(barChartDescriptionTable, minSizeOfGuessedHistogram): + return barChartDescriptionTable[ + barChartDescriptionTable.apply( + lambda barChartDescription: BarChartDescriptionTables._hasMinSizeOfGuessedHistogram( + barChartDescription, minSizeOfGuessedHistogram), + axis='columns')] + + @staticmethod + def _hasMinSizeOfGuessedHistogram(barChartDescription, minSizeOfGuessedHistogram): + sizeOfGuessedHistogram = sum(barChartDescription['BAR_CHART_DESCRIPTION']['Adverse Reaction Reports guessed']) + return sizeOfGuessedHistogram >= minSizeOfGuessedHistogram diff --git a/src/BarChartDescriptionTablesTest.py b/src/BarChartDescriptionTablesTest.py index 526c6b4080f..e5be95a52ee 100644 --- a/src/BarChartDescriptionTablesTest.py +++ b/src/BarChartDescriptionTablesTest.py @@ -60,3 +60,66 @@ class BarChartDescriptionTablesTest(unittest.TestCase): ], name = 'VAX_LOT')), check_dtype = True) + + def test_filterHasMinSizeOfGuessedHistogram(self): + # Given + barChartDescriptionTable = TestHelper.createDataFrame( + columns = ['BAR_CHART_DESCRIPTION'], + data = [ + [ + { + 'countries': ['Germany', 'Hungary'], + 'Adverse Reaction Reports guessed': [10, 20], + 'Adverse Reaction Reports known': [20, 30], + 'Jensen-Shannon distance': 0.4711 + } + ] + ], + index = pd.Index( + [ + '!D0181' + ], + name = 'VAX_LOT')) + + # When + barChartDescriptionTableResult = BarChartDescriptionTables.filterHasMinSizeOfGuessedHistogram(barChartDescriptionTable, 20) + + # Then + assert_frame_equal( + barChartDescriptionTableResult, + barChartDescriptionTable, + check_dtype = True) + + def test_filterHasMinSizeOfGuessedHistogram2(self): + # Given + barChartDescriptionTable = TestHelper.createDataFrame( + columns = ['BAR_CHART_DESCRIPTION'], + data = [ + [ + { + 'countries': ['Germany', 'Hungary'], + 'Adverse Reaction Reports guessed': [10, 20], + 'Adverse Reaction Reports known': [20, 30], + 'Jensen-Shannon distance': 0.4711 + } + ] + ], + index = pd.Index( + [ + '!D0181' + ], + name = 'VAX_LOT')) + + # When + barChartDescriptionTableResult = BarChartDescriptionTables.filterHasMinSizeOfGuessedHistogram(barChartDescriptionTable, 31) + + # Then + assert_frame_equal( + barChartDescriptionTableResult, + TestHelper.createDataFrame( + columns = ['BAR_CHART_DESCRIPTION'], + data = [], + index = pd.Index( + [], + name = 'VAX_LOT')), + check_dtype = True) diff --git a/src/help.txt b/src/help.txt index f568f7401c5..3d525a6af63 100644 --- a/src/help.txt +++ b/src/help.txt @@ -6,7 +6,6 @@ FK-TODO: - add google captcha to batchCodeTable.html - Symptomhistogramm - Filter für ein Barchart: - - im Barchart gibt es mindestens N Guessed-Einträge - im Barchart gibt es mindestens ein Country mit Guessed > Known anacron job: