refactoring

This commit is contained in:
frankknoll
2022-12-14 12:17:31 +01:00
parent b0e3ad0bd5
commit 0a588d51ff
3 changed files with 57 additions and 68 deletions

View File

@@ -32,6 +32,7 @@
"from TestHelper import TestHelper\n", "from TestHelper import TestHelper\n",
"from IOUtils import IOUtils\n", "from IOUtils import IOUtils\n",
"from Datawrapper import Datawrapper\n", "from Datawrapper import Datawrapper\n",
"from MedianOfFreeBedsByKreisTableFactory import MedianOfFreeBedsByKreisTableFactory\n",
"\n", "\n",
"pd.set_option('display.max_rows', 100)\n", "pd.set_option('display.max_rows', 100)\n",
"pd.set_option('display.max_columns', None)\n", "pd.set_option('display.max_columns', None)\n",
@@ -331,74 +332,6 @@
" getAndPersistIntensiveCareBeds(timeSeries, kreis)" " getAndPersistIntensiveCareBeds(timeSeries, kreis)"
] ]
}, },
{
"cell_type": "code",
"execution_count": null,
"id": "d9d4acab",
"metadata": {},
"outputs": [],
"source": [
"class MedianOfFreeBedsByKreisTableFactory:\n",
" \n",
" def __init__(self, dataFrame):\n",
" self.dataFrame = dataFrame\n",
"\n",
" def createMedianOfFreeBedsByKreisTable(self, kreisKey):\n",
" self.dataFrame['free_beds_divided_by_all_beds_in_percent'] = self.dataFrame['betten_frei'] / (self.dataFrame['betten_frei'] + self.dataFrame['betten_belegt']) * 100\n",
" aggregated = self.dataFrame.groupby(kreisKey).agg(\n",
" median_free_beds_in_percent =\n",
" pd.NamedAgg(\n",
" column = 'free_beds_divided_by_all_beds_in_percent',\n",
" aggfunc = 'median'))\n",
" return aggregated.sort_values(by = 'median_free_beds_in_percent', ascending = False)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "a739d4d1",
"metadata": {},
"outputs": [],
"source": [
"from pandas.testing import assert_frame_equal\n",
"import statistics\n",
"\n",
"class MedianOfFreeBedsByKreisTableFactoryTest(unittest.TestCase):\n",
"\n",
" def test_createMedianOfFreeBedsByKreisTable(self):\n",
" # Given\n",
" dataFrame = TestHelper.createDataFrame(\n",
" columns = ['date', 'betten_frei', 'betten_belegt', 'Kreis'],\n",
" data = [ ['2020-04-24', 40, 38, 'Flensburg, Stadt'],\n",
" ['2020-04-24', 42, 36, 'Flensburg, Stadt'],\n",
" ['2020-04-24', 44, 34, 'Flensburg, Stadt'],\n",
" ['2020-04-24', 9, 10, 'Bamberg']],\n",
" index = [\n",
" 0,\n",
" 1,\n",
" 2,\n",
" 3])\n",
" medianOfFreeBedsByKreisTableFactory = MedianOfFreeBedsByKreisTableFactory(dataFrame)\n",
" \n",
" # When\n",
" medianOfFreeBedsByKreisTable = medianOfFreeBedsByKreisTableFactory.createMedianOfFreeBedsByKreisTable('Kreis')\n",
"\n",
" # Then\n",
" assert_frame_equal(\n",
" medianOfFreeBedsByKreisTable,\n",
" TestHelper.createDataFrame(\n",
" columns = ['median_free_beds_in_percent'],\n",
" data = [ [statistics.median([40/(40 + 38) * 100, 42/(42 + 36) * 100, 44/(44 + 34) * 100])],\n",
" [9/(9 + 10) * 100]],\n",
" index = pd.Index(\n",
" name = 'Kreis',\n",
" data = [\n",
" 'Flensburg, Stadt',\n",
" 'Bamberg'\n",
" ])),\n",
" check_dtype = False)"
]
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,

View File

@@ -0,0 +1,15 @@
import pandas as pd
class MedianOfFreeBedsByKreisTableFactory:
def __init__(self, dataFrame):
self.dataFrame = dataFrame
def createMedianOfFreeBedsByKreisTable(self, kreisKey):
self.dataFrame['free_beds_divided_by_all_beds_in_percent'] = self.dataFrame['betten_frei'] / (self.dataFrame['betten_frei'] + self.dataFrame['betten_belegt']) * 100
aggregated = self.dataFrame.groupby(kreisKey).agg(
median_free_beds_in_percent =
pd.NamedAgg(
column = 'free_beds_divided_by_all_beds_in_percent',
aggfunc = 'median'))
return aggregated.sort_values(by = 'median_free_beds_in_percent', ascending = False)

View File

@@ -0,0 +1,41 @@
import unittest
from TestHelper import TestHelper
from pandas.testing import assert_frame_equal
import statistics
import pandas as pd
from intensivstationen.MedianOfFreeBedsByKreisTableFactory import MedianOfFreeBedsByKreisTableFactory
class MedianOfFreeBedsByKreisTableFactoryTest(unittest.TestCase):
def test_createMedianOfFreeBedsByKreisTable(self):
# Given
dataFrame = TestHelper.createDataFrame(
columns = ['date', 'betten_frei', 'betten_belegt', 'Kreis'],
data = [ ['2020-04-24', 40, 38, 'Flensburg, Stadt'],
['2020-04-24', 42, 36, 'Flensburg, Stadt'],
['2020-04-24', 44, 34, 'Flensburg, Stadt'],
['2020-04-24', 9, 10, 'Bamberg']],
index = [
0,
1,
2,
3])
medianOfFreeBedsByKreisTableFactory = MedianOfFreeBedsByKreisTableFactory(dataFrame)
# When
medianOfFreeBedsByKreisTable = medianOfFreeBedsByKreisTableFactory.createMedianOfFreeBedsByKreisTable('Kreis')
# Then
assert_frame_equal(
medianOfFreeBedsByKreisTable,
TestHelper.createDataFrame(
columns = ['median_free_beds_in_percent'],
data = [ [statistics.median([40/(40 + 38) * 100, 42/(42 + 36) * 100, 44/(44 + 34) * 100])],
[9/(9 + 10) * 100]],
index = pd.Index(
name = 'Kreis',
data = [
'Flensburg, Stadt',
'Bamberg'
])),
check_dtype = False)