From 335f4da4d7cdad1dfe9b30e7298ec6431932c885 Mon Sep 17 00:00:00 2001 From: frankknoll Date: Sat, 19 Mar 2022 10:02:25 +0100 Subject: [PATCH 01/13] argh! --- src/HowBadIsMyBatch.ipynb | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/HowBadIsMyBatch.ipynb b/src/HowBadIsMyBatch.ipynb index 6449d16e875..808fecbf113 100644 --- a/src/HowBadIsMyBatch.ipynb +++ b/src/HowBadIsMyBatch.ipynb @@ -806,14 +806,6 @@ " country = 'Global',\n", " minADRsForLethality = minADRsForLethality)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9c70f2db", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { From c2375b4601297eb48f7f7fda76b44b8e5b67302d Mon Sep 17 00:00:00 2001 From: frankknoll Date: Sat, 19 Mar 2022 15:45:20 +0100 Subject: [PATCH 02/13] adding MedianOfFreeBedsByKreisTableFactoryTest --- src/help.txt | 27 +--- src/intensivstationen/Intensivstationen.ipynb | 123 +++++++++++++++--- 2 files changed, 110 insertions(+), 40 deletions(-) diff --git a/src/help.txt b/src/help.txt index 93513f7ef22..c33492f0cb6 100644 --- a/src/help.txt +++ b/src/help.txt @@ -17,30 +17,9 @@ get VAERS data: FK-FIXME: FK-TODO: -- Format des jeweiligen Herstellers berücksichtigen: -039k20a -MOD039K20A -#039K20A -039K20A-MODERNA -039K20A-2A (vielleicht nicht) -039K20A or 039L -Moderna/039K20A -MODERNA 039K20A -MODERNA039K20A -Modena 039k20A -L039K20A -M039K20A -MOD; 039K20A -m0039k20A -u039k20a -6/21 039K20A -2039K20A -013L20A 039K20A#039K20A -#039K -039K20A 12-31- -039K20A & 031M2 -039K20A and 032 -039K20A, 011L20 +- Intensivstationen ergänzen durch Tabelle oder Barchart: + Kreis => "Median des Anteils freier Betten", absteigend sortiert nach "Median des Anteils freier Betten". +- Darstellung als Dashboard, siehe https://covid-karte.de/ oder https://experience.arcgis.com/experience/3a132983ad3c4ab8a28704e9addefaba man 5 fcrontab diff --git a/src/intensivstationen/Intensivstationen.ipynb b/src/intensivstationen/Intensivstationen.ipynb index 0bc94d1f52d..a4a9d00b609 100644 --- a/src/intensivstationen/Intensivstationen.ipynb +++ b/src/intensivstationen/Intensivstationen.ipynb @@ -336,6 +336,30 @@ " return BeautifulSoup(html, 'lxml')\n" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "29b0930a", + "metadata": {}, + "outputs": [], + "source": [ + "import unittest" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "45072a1d", + "metadata": {}, + "outputs": [], + "source": [ + "class TestHelper:\n", + "\n", + " @staticmethod\n", + " def createDataFrame(index, columns, data, dtypes = {}):\n", + " return pd.DataFrame(index = index, columns = columns, data = data).astype(dtypes)\n" + ] + }, { "cell_type": "code", "execution_count": null, @@ -343,9 +367,6 @@ "metadata": {}, "outputs": [], "source": [ - "import unittest\n", - "\n", - "\n", "class KreisOptionsSetterTest(unittest.TestCase):\n", "\n", " def test_setKreisOptions(self):\n", @@ -354,7 +375,7 @@ "\n", " # When\n", " htmlActual = kreisOptionsSetter.setKreisOptions(\n", - " html = '''\n", + " html='''\n", " \n", " \n", "

Test

\n", @@ -367,7 +388,7 @@ " \n", " \n", " ''',\n", - " options = [\n", + " options=[\n", " '',\n", " '',\n", " ''])\n", @@ -389,6 +410,8 @@ " ''')\n", "\n", "# adapted from https://stackoverflow.com/questions/8006909/pretty-print-assertequal-for-html-strings\n", + "\n", + "\n", "def assertEqualHTML(string1, string2, file1='', file2=''):\n", " u'''\n", " Compare two unicode strings containing HTML.\n", @@ -418,16 +441,6 @@ " raise Exception('Not equal %s %s' % (file1, file2))\n" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "e80117e5", - "metadata": {}, - "outputs": [], - "source": [ - "unittest.main(argv = [''], verbosity = 2, exit = False)" - ] - }, { "cell_type": "code", "execution_count": null, @@ -496,7 +509,7 @@ " return timeSeries.groupby('date').agg(**{\n", " 'betten_belegt': pd.NamedAgg(column = 'betten_belegt', aggfunc = 'sum'),\n", " 'betten_frei': pd.NamedAgg(column = 'betten_frei', aggfunc = 'sum'),\n", - " 'Einwohnerzahl': pd.NamedAgg(column = 'Einwohnerzahl', aggfunc = 'sum') \n", + " 'Einwohnerzahl': pd.NamedAgg(column = 'Einwohnerzahl', aggfunc = 'sum')\n", " }).reset_index()" ] }, @@ -561,6 +574,84 @@ " 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):\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('Kreis').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()\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", + "execution_count": null, + "id": "af22cdc5", + "metadata": {}, + "outputs": [], + "source": [ + "unittest.main(argv = [''], verbosity = 2, exit = False)" + ] + }, { "cell_type": "code", "execution_count": null, From 7c5926590afdf8733bb32aa017295bd4e594eade Mon Sep 17 00:00:00 2001 From: frankknoll Date: Sat, 19 Mar 2022 16:21:00 +0100 Subject: [PATCH 03/13] saving medianOfFreeBedsByKreisTable as json file --- src/intensivstationen/Intensivstationen.ipynb | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/intensivstationen/Intensivstationen.ipynb b/src/intensivstationen/Intensivstationen.ipynb index a4a9d00b609..9ec1ee48d4a 100644 --- a/src/intensivstationen/Intensivstationen.ipynb +++ b/src/intensivstationen/Intensivstationen.ipynb @@ -479,6 +479,7 @@ "outputs": [], "source": [ "import os\n", + "import json\n", "\n", "\n", "class IOUtils:\n", @@ -520,9 +521,6 @@ "metadata": {}, "outputs": [], "source": [ - "import json\n", - "\n", - "\n", "def getAndPersistIntensiveCareBeds(timeSeries, kreis = None):\n", " intensiveCareBeds = getIntensiveCareBeds(timeSeries, kreis)\n", " display(kreis)\n", @@ -652,6 +650,18 @@ "unittest.main(argv = [''], verbosity = 2, exit = False)" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "f10704f3", + "metadata": {}, + "outputs": [], + "source": [ + "medianOfFreeBedsByKreisTableFactory = MedianOfFreeBedsByKreisTableFactory(timeSeries)\n", + "medianOfFreeBedsByKreisTable = medianOfFreeBedsByKreisTableFactory.createMedianOfFreeBedsByKreisTable()\n", + "medianOfFreeBedsByKreisTable.reset_index().to_json('../../docs/data/intensivstationen/medianOfFreeBedsByKreisTable.json', orient = \"records\")" + ] + }, { "cell_type": "code", "execution_count": null, From 4ac6966a8c8aeb2e5aaeff5290acdacc60fc8dbb Mon Sep 17 00:00:00 2001 From: frankknoll Date: Sat, 19 Mar 2022 17:20:28 +0100 Subject: [PATCH 04/13] displayMedianOfFreeBedsByKreisChart() --- docs/MedianOfFreeBedsByKreisChartView.js | 82 + .../medianOfFreeBedsByKreisTable.json | 1538 +++++++++++++++++ docs/intensivstationen.html | 5 + docs/intensivstationen.js | 9 +- 4 files changed, 1633 insertions(+), 1 deletion(-) create mode 100644 docs/MedianOfFreeBedsByKreisChartView.js create mode 100644 docs/data/intensivstationen/medianOfFreeBedsByKreisTable.json diff --git a/docs/MedianOfFreeBedsByKreisChartView.js b/docs/MedianOfFreeBedsByKreisChartView.js new file mode 100644 index 00000000000..d062d0bae46 --- /dev/null +++ b/docs/MedianOfFreeBedsByKreisChartView.js @@ -0,0 +1,82 @@ +class MedianOfFreeBedsByKreisChartView { + + #canvas; + #chart; + + constructor(canvas) { + this.#canvas = canvas; + } + + displayChart(data) { + if (this.#chart != null) { + this.#chart.destroy(); + } + this.#chart = new Chart( + this.#canvas, + { + type: 'bar', + data: this.#getData(data), + options: this.#getOptions() + }); + } + + #getData(data) { + return { + datasets: [ + { + label: 'Kreis', + data: data, + parsing: { + yAxisKey: 'median_free_beds_in_percent' + }, + backgroundColor: 'rgba(0, 255, 0, 1)' + } + ] + }; + } + + #getOptions() { + return { + plugins: { + title: { + display: true, + text: 'some Title' + }, + tooltip: { + // FK-TODO: DRY with FreeBedsChartView.js + callbacks: { + label: function (context) { + let label = context.dataset.label || ''; + + if (label) { + label += ': '; + } + if (context.parsed.y !== null) { + label += context.parsed.y.toFixed(1) + "%"; + } + return label; + } + } + } + }, + responsive: true, + scales: { + y: { + min: 0, + max: 100, + title: { + display: true, + text: "Median des Anteils freier Betten" + }, + // FK-TODO: DRY with FreeBedsChartView.js + ticks: { + callback: value => value + "%" + } + } + }, + parsing: { + xAxisKey: 'Kreis' + } + }; + } +} \ No newline at end of file diff --git a/docs/data/intensivstationen/medianOfFreeBedsByKreisTable.json b/docs/data/intensivstationen/medianOfFreeBedsByKreisTable.json new file mode 100644 index 00000000000..60e995f85cc --- /dev/null +++ b/docs/data/intensivstationen/medianOfFreeBedsByKreisTable.json @@ -0,0 +1,1538 @@ +[ + { + "Kreis": "S\u00fcdwestpfalz", + "median_free_beds_in_percent": 66.6666666667 + }, + { + "Kreis": "Kaiserslautern", + "median_free_beds_in_percent": 57.1428571429 + }, + { + "Kreis": "Wunsiedel i.Fichtelgebirge", + "median_free_beds_in_percent": 50.0 + }, + { + "Kreis": "Suhl, Stadt", + "median_free_beds_in_percent": 46.875 + }, + { + "Kreis": "Cochem-Zell", + "median_free_beds_in_percent": 46.1538461538 + }, + { + "Kreis": "Zweibr\u00fccken, kreisfreie Stadt", + "median_free_beds_in_percent": 44.4444444444 + }, + { + "Kreis": "Olpe", + "median_free_beds_in_percent": 44.4444444444 + }, + { + "Kreis": "Trier-Saarburg", + "median_free_beds_in_percent": 42.8571428571 + }, + { + "Kreis": "Altenkirchen (Westerwald)", + "median_free_beds_in_percent": 42.8571428571 + }, + { + "Kreis": "Pl\u00f6n", + "median_free_beds_in_percent": 41.6666666667 + }, + { + "Kreis": "Landau in der Pfalz, kreisfreie Stadt", + "median_free_beds_in_percent": 41.3793103448 + }, + { + "Kreis": "Amberg-Sulzbach", + "median_free_beds_in_percent": 40.0 + }, + { + "Kreis": "Saale-Orla-Kreis", + "median_free_beds_in_percent": 40.0 + }, + { + "Kreis": "Anhalt-Bitterfeld", + "median_free_beds_in_percent": 39.3939393939 + }, + { + "Kreis": "Merzig-Wadern", + "median_free_beds_in_percent": 38.8888888889 + }, + { + "Kreis": "Cuxhaven", + "median_free_beds_in_percent": 38.8888888889 + }, + { + "Kreis": "Nordwestmecklenburg", + "median_free_beds_in_percent": 38.0 + }, + { + "Kreis": "Leer", + "median_free_beds_in_percent": 37.5 + }, + { + "Kreis": "Elbe-Elster", + "median_free_beds_in_percent": 37.5 + }, + { + "Kreis": "Rhein-Hunsr\u00fcck-Kreis", + "median_free_beds_in_percent": 37.5 + }, + { + "Kreis": "Nordhausen", + "median_free_beds_in_percent": 36.5384615385 + }, + { + "Kreis": "Straubing-Bogen", + "median_free_beds_in_percent": 36.3636363636 + }, + { + "Kreis": "Saalfeld-Rudolstadt", + "median_free_beds_in_percent": 36.3636363636 + }, + { + "Kreis": "Main-Tauber-Kreis", + "median_free_beds_in_percent": 35.4838709677 + }, + { + "Kreis": "Gotha", + "median_free_beds_in_percent": 35.2941176471 + }, + { + "Kreis": "Diepholz", + "median_free_beds_in_percent": 35.2941176471 + }, + { + "Kreis": "Landkreis Rostock", + "median_free_beds_in_percent": 35.2941176471 + }, + { + "Kreis": "Bodenseekreis", + "median_free_beds_in_percent": 35.1851851852 + }, + { + "Kreis": "Spree-Nei\u00dfe", + "median_free_beds_in_percent": 35.0 + }, + { + "Kreis": "Bottrop, Stadt", + "median_free_beds_in_percent": 34.8837209302 + }, + { + "Kreis": "Havelland", + "median_free_beds_in_percent": 34.7826086957 + }, + { + "Kreis": "Nordfriesland", + "median_free_beds_in_percent": 34.4827586207 + }, + { + "Kreis": "Neuburg-Schrobenhausen", + "median_free_beds_in_percent": 34.2857142857 + }, + { + "Kreis": "Mayen-Koblenz", + "median_free_beds_in_percent": 34.2105263158 + }, + { + "Kreis": "Stendal", + "median_free_beds_in_percent": 33.3333333333 + }, + { + "Kreis": "Neckar-Odenwald-Kreis", + "median_free_beds_in_percent": 33.3333333333 + }, + { + "Kreis": "Lindau (Bodensee)", + "median_free_beds_in_percent": 33.3333333333 + }, + { + "Kreis": "Germersheim", + "median_free_beds_in_percent": 33.3333333333 + }, + { + "Kreis": "Ha\u00dfberge", + "median_free_beds_in_percent": 33.3333333333 + }, + { + "Kreis": "Wittenberg", + "median_free_beds_in_percent": 33.3333333333 + }, + { + "Kreis": "Donnersbergkreis", + "median_free_beds_in_percent": 33.3333333333 + }, + { + "Kreis": "Weilheim-Schongau", + "median_free_beds_in_percent": 33.3333333333 + }, + { + "Kreis": "Bamberg", + "median_free_beds_in_percent": 33.3333333333 + }, + { + "Kreis": "Nordsachsen", + "median_free_beds_in_percent": 33.3333333333 + }, + { + "Kreis": "Bernkastel-Wittlich", + "median_free_beds_in_percent": 33.3333333333 + }, + { + "Kreis": "Werra-Mei\u00dfner-Kreis", + "median_free_beds_in_percent": 33.3333333333 + }, + { + "Kreis": "Kelheim", + "median_free_beds_in_percent": 33.3333333333 + }, + { + "Kreis": "Dessau-Ro\u00dflau, Stadt", + "median_free_beds_in_percent": 33.3333333333 + }, + { + "Kreis": "Amberg", + "median_free_beds_in_percent": 32.6923076923 + }, + { + "Kreis": "Emsland", + "median_free_beds_in_percent": 32.6086956522 + }, + { + "Kreis": "Bad Kreuznach", + "median_free_beds_in_percent": 31.914893617 + }, + { + "Kreis": "G\u00f6ppingen", + "median_free_beds_in_percent": 31.914893617 + }, + { + "Kreis": "Ostallg\u00e4u", + "median_free_beds_in_percent": 31.8181818182 + }, + { + "Kreis": "Emden, Stadt", + "median_free_beds_in_percent": 31.5789473684 + }, + { + "Kreis": "Borken", + "median_free_beds_in_percent": 31.5068493151 + }, + { + "Kreis": "Hochsauerlandkreis", + "median_free_beds_in_percent": 31.25 + }, + { + "Kreis": "Vulkaneifel", + "median_free_beds_in_percent": 31.25 + }, + { + "Kreis": "Pirmasens, kreisfreie Stadt", + "median_free_beds_in_percent": 31.25 + }, + { + "Kreis": "Rendsburg-Eckernf\u00f6rde", + "median_free_beds_in_percent": 31.1111111111 + }, + { + "Kreis": "Oberhavel", + "median_free_beds_in_percent": 31.0344827586 + }, + { + "Kreis": "Schwalm-Eder-Kreis", + "median_free_beds_in_percent": 31.0344827586 + }, + { + "Kreis": "Bad D\u00fcrkheim", + "median_free_beds_in_percent": 30.7692307692 + }, + { + "Kreis": "Steinburg", + "median_free_beds_in_percent": 30.612244898 + }, + { + "Kreis": "Vechta", + "median_free_beds_in_percent": 30.5555555556 + }, + { + "Kreis": "Segeberg", + "median_free_beds_in_percent": 30.3370786517 + }, + { + "Kreis": "Waldshut", + "median_free_beds_in_percent": 30.0 + }, + { + "Kreis": "Landsberg am Lech", + "median_free_beds_in_percent": 30.0 + }, + { + "Kreis": "Northeim", + "median_free_beds_in_percent": 30.0 + }, + { + "Kreis": "Kassel", + "median_free_beds_in_percent": 30.0 + }, + { + "Kreis": "Tuttlingen", + "median_free_beds_in_percent": 30.0 + }, + { + "Kreis": "Kiel, Landeshauptstadt", + "median_free_beds_in_percent": 29.8780487805 + }, + { + "Kreis": "Kleve", + "median_free_beds_in_percent": 29.7297297297 + }, + { + "Kreis": "Wesermarsch", + "median_free_beds_in_percent": 29.4117647059 + }, + { + "Kreis": "Ilm-Kreis", + "median_free_beds_in_percent": 29.4117647059 + }, + { + "Kreis": "Eichsfeld", + "median_free_beds_in_percent": 29.4117647059 + }, + { + "Kreis": "Westerwaldkreis", + "median_free_beds_in_percent": 29.2682926829 + }, + { + "Kreis": "Heidenheim", + "median_free_beds_in_percent": 29.1666666667 + }, + { + "Kreis": "Hamm, Stadt", + "median_free_beds_in_percent": 28.8888888889 + }, + { + "Kreis": "Uckermark", + "median_free_beds_in_percent": 28.8888888889 + }, + { + "Kreis": "Eifelkreis Bitburg-Pr\u00fcm", + "median_free_beds_in_percent": 28.5714285714 + }, + { + "Kreis": "Osterholz", + "median_free_beds_in_percent": 28.5714285714 + }, + { + "Kreis": "Forchheim", + "median_free_beds_in_percent": 28.5714285714 + }, + { + "Kreis": "Alzey-Worms", + "median_free_beds_in_percent": 28.5714285714 + }, + { + "Kreis": "Cham", + "median_free_beds_in_percent": 28.5714285714 + }, + { + "Kreis": "Prignitz", + "median_free_beds_in_percent": 28.5714285714 + }, + { + "Kreis": "Dillingen a.d.Donau", + "median_free_beds_in_percent": 28.5714285714 + }, + { + "Kreis": "Vogelsbergkreis", + "median_free_beds_in_percent": 28.5714285714 + }, + { + "Kreis": "Neuwied", + "median_free_beds_in_percent": 28.4090909091 + }, + { + "Kreis": "Hildesheim", + "median_free_beds_in_percent": 28.0 + }, + { + "Kreis": "Herzogtum Lauenburg", + "median_free_beds_in_percent": 27.7777777778 + }, + { + "Kreis": "Bautzen", + "median_free_beds_in_percent": 27.7777777778 + }, + { + "Kreis": "Freyung-Grafenau", + "median_free_beds_in_percent": 27.7777777778 + }, + { + "Kreis": "Steinfurt", + "median_free_beds_in_percent": 27.5862068966 + }, + { + "Kreis": "G\u00f6rlitz", + "median_free_beds_in_percent": 27.5862068966 + }, + { + "Kreis": "Ostholstein", + "median_free_beds_in_percent": 27.4509803922 + }, + { + "Kreis": "Holzminden", + "median_free_beds_in_percent": 27.2727272727 + }, + { + "Kreis": "Saalekreis", + "median_free_beds_in_percent": 27.2727272727 + }, + { + "Kreis": "Heidekreis", + "median_free_beds_in_percent": 27.2727272727 + }, + { + "Kreis": "Reutlingen", + "median_free_beds_in_percent": 27.2727272727 + }, + { + "Kreis": "Neu-Ulm", + "median_free_beds_in_percent": 27.2727272727 + }, + { + "Kreis": "Wesel", + "median_free_beds_in_percent": 27.2727272727 + }, + { + "Kreis": "Birkenfeld", + "median_free_beds_in_percent": 27.2727272727 + }, + { + "Kreis": "Warendorf", + "median_free_beds_in_percent": 27.0833333333 + }, + { + "Kreis": "Koblenz, kreisfreie Stadt", + "median_free_beds_in_percent": 27.027027027 + }, + { + "Kreis": "Wilhelmshaven, Stadt", + "median_free_beds_in_percent": 27.027027027 + }, + { + "Kreis": "Oder-Spree", + "median_free_beds_in_percent": 26.9841269841 + }, + { + "Kreis": "Schwandorf", + "median_free_beds_in_percent": 26.9230769231 + }, + { + "Kreis": "Frankenthal (Pfalz), kreisfreie Stadt", + "median_free_beds_in_percent": 26.6666666667 + }, + { + "Kreis": "Saarlouis", + "median_free_beds_in_percent": 26.6666666667 + }, + { + "Kreis": "L\u00fcneburg", + "median_free_beds_in_percent": 26.3157894737 + }, + { + "Kreis": "B\u00f6rde", + "median_free_beds_in_percent": 26.3157894737 + }, + { + "Kreis": "Vogtlandkreis", + "median_free_beds_in_percent": 26.1538461538 + }, + { + "Kreis": "M\u00e4rkisch-Oderland", + "median_free_beds_in_percent": 26.0869565217 + }, + { + "Kreis": "Cloppenburg", + "median_free_beds_in_percent": 26.0869565217 + }, + { + "Kreis": "Calw", + "median_free_beds_in_percent": 25.9259259259 + }, + { + "Kreis": "Jerichower Land", + "median_free_beds_in_percent": 25.9259259259 + }, + { + "Kreis": "Leipzig", + "median_free_beds_in_percent": 25.8620689655 + }, + { + "Kreis": "Mettmann", + "median_free_beds_in_percent": 25.7575757576 + }, + { + "Kreis": "Osnabr\u00fcck", + "median_free_beds_in_percent": 25.7142857143 + }, + { + "Kreis": "H\u00f6xter", + "median_free_beds_in_percent": 25.7142857143 + }, + { + "Kreis": "Potsdam, Stadt", + "median_free_beds_in_percent": 25.3521126761 + }, + { + "Kreis": "Main-Spessart", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Saale-Holzland-Kreis", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Hildburghausen", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Pfaffenhofen a.d.Ilm", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Rotenburg (W\u00fcmme)", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Ravensburg", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Oberallg\u00e4u", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Rheingau-Taunus-Kreis", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Sigmaringen", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Nienburg (Weser)", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Enzkreis", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Wei\u00dfenburg-Gunzenhausen", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Baden-Baden, Stadtkreis", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Sonneberg", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Stormarn", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Ansbach", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Aurich", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Wolfenb\u00fcttel", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Unterallg\u00e4u", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Bremerhaven, Stadt", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Schwabach", + "median_free_beds_in_percent": 25.0 + }, + { + "Kreis": "Hersfeld-Rotenburg", + "median_free_beds_in_percent": 24.5614035088 + }, + { + "Kreis": "Neunkirchen", + "median_free_beds_in_percent": 24.3243243243 + }, + { + "Kreis": "Rhein-Lahn-Kreis", + "median_free_beds_in_percent": 24.2424242424 + }, + { + "Kreis": "Hof", + "median_free_beds_in_percent": 24.2424242424 + }, + { + "Kreis": "Friesland", + "median_free_beds_in_percent": 24.2424242424 + }, + { + "Kreis": "Erzgebirgskreis", + "median_free_beds_in_percent": 24.2105263158 + }, + { + "Kreis": "Harz", + "median_free_beds_in_percent": 24.1379310345 + }, + { + "Kreis": "Salzgitter, Stadt", + "median_free_beds_in_percent": 24.1379310345 + }, + { + "Kreis": "Vorpommern-R\u00fcgen", + "median_free_beds_in_percent": 24.1379310345 + }, + { + "Kreis": "G\u00fctersloh", + "median_free_beds_in_percent": 24.0740740741 + }, + { + "Kreis": "Konstanz", + "median_free_beds_in_percent": 23.9130434783 + }, + { + "Kreis": "Ennepe-Ruhr-Kreis", + "median_free_beds_in_percent": 23.8805970149 + }, + { + "Kreis": "Oberhausen, Stadt", + "median_free_beds_in_percent": 23.6111111111 + }, + { + "Kreis": "Peine", + "median_free_beds_in_percent": 23.5294117647 + }, + { + "Kreis": "Gelsenkirchen, Stadt", + "median_free_beds_in_percent": 23.4693877551 + }, + { + "Kreis": "Passau", + "median_free_beds_in_percent": 23.4042553191 + }, + { + "Kreis": "Oberbergischer Kreis", + "median_free_beds_in_percent": 23.3333333333 + }, + { + "Kreis": "Ortenaukreis", + "median_free_beds_in_percent": 23.2558139535 + }, + { + "Kreis": "Coburg", + "median_free_beds_in_percent": 23.2558139535 + }, + { + "Kreis": "Regen", + "median_free_beds_in_percent": 23.0769230769 + }, + { + "Kreis": "S\u00fcdliche Weinstra\u00dfe", + "median_free_beds_in_percent": 23.0769230769 + }, + { + "Kreis": "Teltow-Fl\u00e4ming", + "median_free_beds_in_percent": 23.0769230769 + }, + { + "Kreis": "Wartburgkreis", + "median_free_beds_in_percent": 23.0769230769 + }, + { + "Kreis": "Braunschweig, Stadt", + "median_free_beds_in_percent": 23.0769230769 + }, + { + "Kreis": "Mansfeld-S\u00fcdharz", + "median_free_beds_in_percent": 23.0769230769 + }, + { + "Kreis": "Rems-Murr-Kreis", + "median_free_beds_in_percent": 22.9508196721 + }, + { + "Kreis": "Mittelsachsen", + "median_free_beds_in_percent": 22.9166666667 + }, + { + "Kreis": "Coesfeld", + "median_free_beds_in_percent": 22.5806451613 + }, + { + "Kreis": "Stade", + "median_free_beds_in_percent": 22.5806451613 + }, + { + "Kreis": "Bergstra\u00dfe", + "median_free_beds_in_percent": 22.5 + }, + { + "Kreis": "Herford", + "median_free_beds_in_percent": 22.4137931034 + }, + { + "Kreis": "Dingolfing-Landau", + "median_free_beds_in_percent": 22.2222222222 + }, + { + "Kreis": "Tirschenreuth", + "median_free_beds_in_percent": 22.2222222222 + }, + { + "Kreis": "Alb-Donau-Kreis", + "median_free_beds_in_percent": 22.2222222222 + }, + { + "Kreis": "Altmarkkreis Salzwedel", + "median_free_beds_in_percent": 22.2222222222 + }, + { + "Kreis": "Roth", + "median_free_beds_in_percent": 22.2222222222 + }, + { + "Kreis": "Wolfsburg, Stadt", + "median_free_beds_in_percent": 22.2222222222 + }, + { + "Kreis": "Schw\u00e4bisch Hall", + "median_free_beds_in_percent": 22.0 + }, + { + "Kreis": "L\u00f6rrach", + "median_free_beds_in_percent": 21.875 + }, + { + "Kreis": "Rhein-Erft-Kreis", + "median_free_beds_in_percent": 21.7948717949 + }, + { + "Kreis": "Ostalbkreis", + "median_free_beds_in_percent": 21.7391304348 + }, + { + "Kreis": "Ulm, Stadtkreis", + "median_free_beds_in_percent": 21.7054263566 + }, + { + "Kreis": "Dahme-Spreewald", + "median_free_beds_in_percent": 21.6216216216 + }, + { + "Kreis": "Weimar, Stadt", + "median_free_beds_in_percent": 21.4285714286 + }, + { + "Kreis": "St. Wendel", + "median_free_beds_in_percent": 21.4285714286 + }, + { + "Kreis": "Freudenstadt", + "median_free_beds_in_percent": 21.4285714286 + }, + { + "Kreis": "Straubing", + "median_free_beds_in_percent": 21.4285714286 + }, + { + "Kreis": "Augsburg", + "median_free_beds_in_percent": 21.3563218391 + }, + { + "Kreis": "Celle", + "median_free_beds_in_percent": 21.2121212121 + }, + { + "Kreis": "Ahrweiler", + "median_free_beds_in_percent": 21.0526315789 + }, + { + "Kreis": "Solingen, Klingenstadt", + "median_free_beds_in_percent": 21.0526315789 + }, + { + "Kreis": "L\u00fcbeck, Hansestadt", + "median_free_beds_in_percent": 21.0526315789 + }, + { + "Kreis": "M\u00e4rkischer Kreis", + "median_free_beds_in_percent": 20.9523809524 + }, + { + "Kreis": "Leverkusen, Stadt", + "median_free_beds_in_percent": 20.8955223881 + }, + { + "Kreis": "Miesbach", + "median_free_beds_in_percent": 20.8333333333 + }, + { + "Kreis": "Waldeck-Frankenberg", + "median_free_beds_in_percent": 20.7920792079 + }, + { + "Kreis": "Ludwigshafen am Rhein, kreisfreie Stadt", + "median_free_beds_in_percent": 20.6896551724 + }, + { + "Kreis": "Burgenlandkreis", + "median_free_beds_in_percent": 20.6896551724 + }, + { + "Kreis": "Darmstadt, Wissenschaftsstadt", + "median_free_beds_in_percent": 20.5607476636 + }, + { + "Kreis": "Recklinghausen", + "median_free_beds_in_percent": 20.5357142857 + }, + { + "Kreis": "Rostock", + "median_free_beds_in_percent": 20.5128205128 + }, + { + "Kreis": "Soest", + "median_free_beds_in_percent": 20.4819277108 + }, + { + "Kreis": "D\u00fcren", + "median_free_beds_in_percent": 20.3703703704 + }, + { + "Kreis": "Limburg-Weilburg", + "median_free_beds_in_percent": 20.3703703704 + }, + { + "Kreis": "Paderborn", + "median_free_beds_in_percent": 20.1923076923 + }, + { + "Kreis": "Trier, kreisfreie Stadt", + "median_free_beds_in_percent": 20.0 + }, + { + "Kreis": "Viersen", + "median_free_beds_in_percent": 20.0 + }, + { + "Kreis": "Heilbronn, Stadtkreis", + "median_free_beds_in_percent": 20.0 + }, + { + "Kreis": "Hameln-Pyrmont", + "median_free_beds_in_percent": 20.0 + }, + { + "Kreis": "W\u00fcrzburg", + "median_free_beds_in_percent": 20.0 + }, + { + "Kreis": "Ludwigslust-Parchim", + "median_free_beds_in_percent": 20.0 + }, + { + "Kreis": "Brandenburg an der Havel, Stadt", + "median_free_beds_in_percent": 20.0 + }, + { + "Kreis": "M\u00fcnchen", + "median_free_beds_in_percent": 20.0 + }, + { + "Kreis": "Starnberg", + "median_free_beds_in_percent": 20.0 + }, + { + "Kreis": "Verden", + "median_free_beds_in_percent": 20.0 + }, + { + "Kreis": "Frankfurt (Oder), Stadt", + "median_free_beds_in_percent": 20.0 + }, + { + "Kreis": "Kronach", + "median_free_beds_in_percent": 20.0 + }, + { + "Kreis": "Hamburg, Freie und Hansestadt", + "median_free_beds_in_percent": 19.9683042789 + }, + { + "Kreis": "N\u00fcrnberg", + "median_free_beds_in_percent": 19.8952879581 + }, + { + "Kreis": "Leipzig, Stadt", + "median_free_beds_in_percent": 19.8895027624 + }, + { + "Kreis": "Mei\u00dfen", + "median_free_beds_in_percent": 19.696969697 + }, + { + "Kreis": "Garmisch-Partenkirchen", + "median_free_beds_in_percent": 19.5402298851 + }, + { + "Kreis": "Flensburg, Stadt", + "median_free_beds_in_percent": 19.512195122 + }, + { + "Kreis": "Vorpommern-Greifswald", + "median_free_beds_in_percent": 19.4690265487 + }, + { + "Kreis": "G\u00f6ttingen", + "median_free_beds_in_percent": 19.4444444444 + }, + { + "Kreis": "Zwickau", + "median_free_beds_in_percent": 19.4174757282 + }, + { + "Kreis": "Schwarzwald-Baar-Kreis", + "median_free_beds_in_percent": 19.298245614 + }, + { + "Kreis": "Schmalkalden-Meiningen", + "median_free_beds_in_percent": 19.2307692308 + }, + { + "Kreis": "Rheinisch-Bergischer Kreis", + "median_free_beds_in_percent": 19.1489361702 + }, + { + "Kreis": "Euskirchen", + "median_free_beds_in_percent": 19.1489361702 + }, + { + "Kreis": "Lichtenfels", + "median_free_beds_in_percent": 19.1489361702 + }, + { + "Kreis": "Rosenheim", + "median_free_beds_in_percent": 19.0476190476 + }, + { + "Kreis": "Offenbach", + "median_free_beds_in_percent": 19.0476190476 + }, + { + "Kreis": "Pforzheim, Stadtkreis", + "median_free_beds_in_percent": 19.0476190476 + }, + { + "Kreis": "Siegen-Wittgenstein", + "median_free_beds_in_percent": 18.8811188811 + }, + { + "Kreis": "Krefeld, Stadt", + "median_free_beds_in_percent": 18.8235294118 + }, + { + "Kreis": "Rottal-Inn", + "median_free_beds_in_percent": 18.75 + }, + { + "Kreis": "Altenburger Land", + "median_free_beds_in_percent": 18.75 + }, + { + "Kreis": "Kaiserslautern, kreisfreie Stadt", + "median_free_beds_in_percent": 18.5840707965 + }, + { + "Kreis": "Grafschaft Bentheim", + "median_free_beds_in_percent": 18.5185185185 + }, + { + "Kreis": "Neumarkt i.d.OPf.", + "median_free_beds_in_percent": 18.1818181818 + }, + { + "Kreis": "Breisgau-Hochschwarzwald", + "median_free_beds_in_percent": 18.1818181818 + }, + { + "Kreis": "Mecklenburgische Seenplatte", + "median_free_beds_in_percent": 18.1818181818 + }, + { + "Kreis": "Rhein-Kreis Neuss", + "median_free_beds_in_percent": 18.1818181818 + }, + { + "Kreis": "Ammerland", + "median_free_beds_in_percent": 18.1818181818 + }, + { + "Kreis": "Schwerin", + "median_free_beds_in_percent": 18.0555555556 + }, + { + "Kreis": "Cottbus, Stadt", + "median_free_beds_in_percent": 18.0 + }, + { + "Kreis": "Wuppertal, Stadt", + "median_free_beds_in_percent": 17.6870748299 + }, + { + "Kreis": "Unstrut-Hainich-Kreis", + "median_free_beds_in_percent": 17.6470588235 + }, + { + "Kreis": "Regionalverband Saarbr\u00fccken", + "median_free_beds_in_percent": 17.5257731959 + }, + { + "Kreis": "Osnabr\u00fcck, Stadt", + "median_free_beds_in_percent": 17.5 + }, + { + "Kreis": "Esslingen", + "median_free_beds_in_percent": 17.5 + }, + { + "Kreis": "Hagen, Stadt der FernUniversit\u00e4t", + "median_free_beds_in_percent": 17.4418604651 + }, + { + "Kreis": "G\u00fcnzburg", + "median_free_beds_in_percent": 17.3913043478 + }, + { + "Kreis": "Karlsruhe", + "median_free_beds_in_percent": 17.3076923077 + }, + { + "Kreis": "Ostprignitz-Ruppin", + "median_free_beds_in_percent": 17.2413793103 + }, + { + "Kreis": "Hochtaunuskreis", + "median_free_beds_in_percent": 17.2413793103 + }, + { + "Kreis": "Worms, kreisfreie Stadt", + "median_free_beds_in_percent": 17.2413793103 + }, + { + "Kreis": "S\u00e4chsische Schweiz-Osterzgebirge", + "median_free_beds_in_percent": 17.1428571429 + }, + { + "Kreis": "Offenbach am Main, Stadt", + "median_free_beds_in_percent": 16.9811320755 + }, + { + "Kreis": "Ingolstadt", + "median_free_beds_in_percent": 16.9811320755 + }, + { + "Kreis": "Duisburg, Stadt", + "median_free_beds_in_percent": 16.9811320755 + }, + { + "Kreis": "Regensburg", + "median_free_beds_in_percent": 16.8665458095 + }, + { + "Kreis": "Freiburg im Breisgau, Stadtkreis", + "median_free_beds_in_percent": 16.7664670659 + }, + { + "Kreis": "Rottweil", + "median_free_beds_in_percent": 16.6666666667 + }, + { + "Kreis": "N\u00fcrnberger Land", + "median_free_beds_in_percent": 16.6666666667 + }, + { + "Kreis": "Greiz", + "median_free_beds_in_percent": 16.6666666667 + }, + { + "Kreis": "Erfurt, Stadt", + "median_free_beds_in_percent": 16.6666666667 + }, + { + "Kreis": "Kyffh\u00e4userkreis", + "median_free_beds_in_percent": 16.6666666667 + }, + { + "Kreis": "Erlangen-H\u00f6chstadt", + "median_free_beds_in_percent": 16.6666666667 + }, + { + "Kreis": "Helmstedt", + "median_free_beds_in_percent": 16.6666666667 + }, + { + "Kreis": "Remscheid, Stadt", + "median_free_beds_in_percent": 16.6666666667 + }, + { + "Kreis": "M\u00fchldorf a.Inn", + "median_free_beds_in_percent": 16.6666666667 + }, + { + "Kreis": "Bayreuth", + "median_free_beds_in_percent": 16.6666666667 + }, + { + "Kreis": "S\u00f6mmerda", + "median_free_beds_in_percent": 16.6666666667 + }, + { + "Kreis": "Schweinfurt", + "median_free_beds_in_percent": 16.6666666667 + }, + { + "Kreis": "L\u00fcchow-Dannenberg", + "median_free_beds_in_percent": 16.6666666667 + }, + { + "Kreis": "Schleswig-Flensburg", + "median_free_beds_in_percent": 16.6666666667 + }, + { + "Kreis": "Ebersberg", + "median_free_beds_in_percent": 16.6666666667 + }, + { + "Kreis": "Goslar", + "median_free_beds_in_percent": 16.6666666667 + }, + { + "Kreis": "Kulmbach", + "median_free_beds_in_percent": 16.2162162162 + }, + { + "Kreis": "Dresden, Stadt", + "median_free_beds_in_percent": 16.0278745645 + }, + { + "Kreis": "Zollernalbkreis", + "median_free_beds_in_percent": 16.0 + }, + { + "Kreis": "Neum\u00fcnster, Stadt", + "median_free_beds_in_percent": 16.0 + }, + { + "Kreis": "Fulda", + "median_free_beds_in_percent": 15.9574468085 + }, + { + "Kreis": "Kempten (Allg\u00e4u)", + "median_free_beds_in_percent": 15.9090909091 + }, + { + "Kreis": "Main-Kinzig-Kreis", + "median_free_beds_in_percent": 15.8536585366 + }, + { + "Kreis": "Pinneberg", + "median_free_beds_in_percent": 15.625 + }, + { + "Kreis": "F\u00fcrth", + "median_free_beds_in_percent": 15.5555555556 + }, + { + "Kreis": "Saarpfalz-Kreis", + "median_free_beds_in_percent": 15.5440414508 + }, + { + "Kreis": "Halle (Saale), Stadt", + "median_free_beds_in_percent": 15.4676258993 + }, + { + "Kreis": "Herne, Stadt", + "median_free_beds_in_percent": 15.3846153846 + }, + { + "Kreis": "Karlsruhe, Stadtkreis", + "median_free_beds_in_percent": 15.3846153846 + }, + { + "Kreis": "Wiesbaden, Landeshauptstadt", + "median_free_beds_in_percent": 15.2380952381 + }, + { + "Kreis": "Traunstein", + "median_free_beds_in_percent": 15.0943396226 + }, + { + "Kreis": "B\u00f6blingen", + "median_free_beds_in_percent": 15.0943396226 + }, + { + "Kreis": "Stuttgart, Stadtkreis", + "median_free_beds_in_percent": 15.0406504065 + }, + { + "Kreis": "Rhein-Sieg-Kreis", + "median_free_beds_in_percent": 14.8148148148 + }, + { + "Kreis": "Bochum, Stadt", + "median_free_beds_in_percent": 14.8148148148 + }, + { + "Kreis": "Marburg-Biedenkopf", + "median_free_beds_in_percent": 14.8148148148 + }, + { + "Kreis": "Bielefeld, Stadt", + "median_free_beds_in_percent": 14.7435897436 + }, + { + "Kreis": "Harburg", + "median_free_beds_in_percent": 14.7058823529 + }, + { + "Kreis": "Neustadt a.d.Aisch-Bad Windsheim", + "median_free_beds_in_percent": 14.7058823529 + }, + { + "Kreis": "Rh\u00f6n-Grabfeld", + "median_free_beds_in_percent": 14.4927536232 + }, + { + "Kreis": "Chemnitz, Stadt", + "median_free_beds_in_percent": 14.364640884 + }, + { + "Kreis": "Frankfurt am Main, Stadt", + "median_free_beds_in_percent": 14.3356643357 + }, + { + "Kreis": "M\u00f6nchengladbach, Stadt", + "median_free_beds_in_percent": 14.2857142857 + }, + { + "Kreis": "Oldenburg", + "median_free_beds_in_percent": 14.2857142857 + }, + { + "Kreis": "Hohenlohekreis", + "median_free_beds_in_percent": 14.2857142857 + }, + { + "Kreis": "Weiden i.d.OPf.", + "median_free_beds_in_percent": 14.2857142857 + }, + { + "Kreis": "Kaufbeuren", + "median_free_beds_in_percent": 14.2857142857 + }, + { + "Kreis": "Kitzingen", + "median_free_beds_in_percent": 14.2857142857 + }, + { + "Kreis": "Kassel, documenta-Stadt", + "median_free_beds_in_percent": 14.0845070423 + }, + { + "Kreis": "Region Hannover", + "median_free_beds_in_percent": 13.9534883721 + }, + { + "Kreis": "Landshut", + "median_free_beds_in_percent": 13.7931034483 + }, + { + "Kreis": "Mannheim, Stadtkreis", + "median_free_beds_in_percent": 13.6363636364 + }, + { + "Kreis": "Berchtesgadener Land", + "median_free_beds_in_percent": 13.6363636364 + }, + { + "Kreis": "Berlin, Stadt", + "median_free_beds_in_percent": 13.4412955466 + }, + { + "Kreis": "Erlangen", + "median_free_beds_in_percent": 13.4228187919 + }, + { + "Kreis": "Unna", + "median_free_beds_in_percent": 13.3928571429 + }, + { + "Kreis": "Weimarer Land", + "median_free_beds_in_percent": 13.3333333333 + }, + { + "Kreis": "Neustadt an der Weinstra\u00dfe, kreisfreie Stadt", + "median_free_beds_in_percent": 13.3333333333 + }, + { + "Kreis": "Minden-L\u00fcbbecke", + "median_free_beds_in_percent": 13.3333333333 + }, + { + "Kreis": "Deggendorf", + "median_free_beds_in_percent": 13.1578947368 + }, + { + "Kreis": "Rhein-Neckar-Kreis", + "median_free_beds_in_percent": 13.1578947368 + }, + { + "Kreis": "Potsdam-Mittelmark", + "median_free_beds_in_percent": 13.0434782609 + }, + { + "Kreis": "Oldenburg (Oldenburg), Stadt", + "median_free_beds_in_percent": 12.962962963 + }, + { + "Kreis": "Mainz, kreisfreie Stadt", + "median_free_beds_in_percent": 12.962962963 + }, + { + "Kreis": "Heidelberg, Stadtkreis", + "median_free_beds_in_percent": 12.7906976744 + }, + { + "Kreis": "Dortmund, Stadt", + "median_free_beds_in_percent": 12.5448028674 + }, + { + "Kreis": "Essen, Stadt", + "median_free_beds_in_percent": 12.5333333333 + }, + { + "Kreis": "Heinsberg", + "median_free_beds_in_percent": 12.5 + }, + { + "Kreis": "Miltenberg", + "median_free_beds_in_percent": 12.5 + }, + { + "Kreis": "Kusel", + "median_free_beds_in_percent": 12.5 + }, + { + "Kreis": "Donau-Ries", + "median_free_beds_in_percent": 12.5 + }, + { + "Kreis": "Wittmund", + "median_free_beds_in_percent": 12.5 + }, + { + "Kreis": "Delmenhorst, Stadt", + "median_free_beds_in_percent": 12.5 + }, + { + "Kreis": "Aschaffenburg", + "median_free_beds_in_percent": 12.3076923077 + }, + { + "Kreis": "Bad Kissingen", + "median_free_beds_in_percent": 12.1951219512 + }, + { + "Kreis": "Lahn-Dill-Kreis", + "median_free_beds_in_percent": 12.0 + }, + { + "Kreis": "Gro\u00df-Gerau", + "median_free_beds_in_percent": 12.0 + }, + { + "Kreis": "Aichach-Friedberg", + "median_free_beds_in_percent": 11.7647058824 + }, + { + "Kreis": "M\u00fclheim an der Ruhr, Stadt", + "median_free_beds_in_percent": 11.7647058824 + }, + { + "Kreis": "Oberspreewald-Lausitz", + "median_free_beds_in_percent": 11.7647058824 + }, + { + "Kreis": "Speyer, kreisfreie Stadt", + "median_free_beds_in_percent": 11.5384615385 + }, + { + "Kreis": "Heilbronn", + "median_free_beds_in_percent": 11.5384615385 + }, + { + "Kreis": "D\u00fcsseldorf, Stadt", + "median_free_beds_in_percent": 11.4478114478 + }, + { + "Kreis": "Jena, Stadt", + "median_free_beds_in_percent": 11.4035087719 + }, + { + "Kreis": "Gie\u00dfen", + "median_free_beds_in_percent": 11.4035087719 + }, + { + "Kreis": "Eichst\u00e4tt", + "median_free_beds_in_percent": 11.320754717 + }, + { + "Kreis": "Schaumburg", + "median_free_beds_in_percent": 11.1111111111 + }, + { + "Kreis": "Barnim", + "median_free_beds_in_percent": 11.1111111111 + }, + { + "Kreis": "M\u00fcnchen, Landeshauptstadt", + "median_free_beds_in_percent": 10.8808290155 + }, + { + "Kreis": "Bremen, Stadt", + "median_free_beds_in_percent": 10.7142857143 + }, + { + "Kreis": "Bad T\u00f6lz-Wolfratshausen", + "median_free_beds_in_percent": 10.7142857143 + }, + { + "Kreis": "Magdeburg, Landeshauptstadt", + "median_free_beds_in_percent": 10.7142857143 + }, + { + "Kreis": "Alt\u00f6tting", + "median_free_beds_in_percent": 10.7142857143 + }, + { + "Kreis": "Erding", + "median_free_beds_in_percent": 10.5263157895 + }, + { + "Kreis": "Uelzen", + "median_free_beds_in_percent": 10.5263157895 + }, + { + "Kreis": "Main-Taunus-Kreis", + "median_free_beds_in_percent": 10.3448275862 + }, + { + "Kreis": "Memmingen", + "median_free_beds_in_percent": 10.0 + }, + { + "Kreis": "Gifhorn", + "median_free_beds_in_percent": 10.0 + }, + { + "Kreis": "F\u00fcrstenfeldbruck", + "median_free_beds_in_percent": 10.0 + }, + { + "Kreis": "Dithmarschen", + "median_free_beds_in_percent": 10.0 + }, + { + "Kreis": "M\u00fcnster, Stadt", + "median_free_beds_in_percent": 9.7014925373 + }, + { + "Kreis": "Salzlandkreis", + "median_free_beds_in_percent": 9.6774193548 + }, + { + "Kreis": "Mainz-Bingen", + "median_free_beds_in_percent": 9.0909090909 + }, + { + "Kreis": "T\u00fcbingen", + "median_free_beds_in_percent": 9.0909090909 + }, + { + "Kreis": "Freising", + "median_free_beds_in_percent": 8.3333333333 + }, + { + "Kreis": "Rastatt", + "median_free_beds_in_percent": 8.3333333333 + }, + { + "Kreis": "St\u00e4dteregion Aachen", + "median_free_beds_in_percent": 8.0701754386 + }, + { + "Kreis": "K\u00f6ln, Stadt", + "median_free_beds_in_percent": 7.9545454545 + }, + { + "Kreis": "Bonn, Stadt", + "median_free_beds_in_percent": 7.4468085106 + }, + { + "Kreis": "Biberach", + "median_free_beds_in_percent": 7.1428571429 + }, + { + "Kreis": "Ludwigsburg", + "median_free_beds_in_percent": 6.9306930693 + }, + { + "Kreis": "Wetteraukreis", + "median_free_beds_in_percent": 6.0606060606 + }, + { + "Kreis": "Lippe", + "median_free_beds_in_percent": 6.0 + }, + { + "Kreis": "Gera, Stadt", + "median_free_beds_in_percent": 5.0 + }, + { + "Kreis": "Darmstadt-Dieburg", + "median_free_beds_in_percent": 4.0 + }, + { + "Kreis": "Odenwaldkreis", + "median_free_beds_in_percent": 3.8461538462 + }, + { + "Kreis": "Dachau", + "median_free_beds_in_percent": 3.8461538462 + }, + { + "Kreis": "Emmendingen", + "median_free_beds_in_percent": 3.2608695652 + } +] \ No newline at end of file diff --git a/docs/intensivstationen.html b/docs/intensivstationen.html index e15e2d34134..4cbac867965 100644 --- a/docs/intensivstationen.html +++ b/docs/intensivstationen.html @@ -13,6 +13,7 @@ + + + @@ -19,6 +25,16 @@ document.addEventListener( "DOMContentLoaded", event => { + const slider = document.getElementById('slider'); + noUiSlider.create(slider, { + start: [20, 80], + connect: true, + range: { + 'min': 0, + 'max': 100 + } + }); + slider.noUiSlider.on('update', values => console.log(values[0], ' - ', values[1])); const intensiveCareCapacitiesChartView = new IntensiveCareCapacitiesChartView(document.getElementById("intensiveCareCapacities")); const freeBedsChartView = new FreeBedsChartView(document.getElementById('freeBeds')); const kreisSelect = document.querySelector('#kreisSelect'); @@ -460,6 +476,7 @@

+

Datensatz:
diff --git a/src/help.txt b/src/help.txt index 196401773d1..1704b8aeea5 100644 --- a/src/help.txt +++ b/src/help.txt @@ -15,6 +15,7 @@ get VAERS data: - download data (e.g. 2022VAERSData.zip) from https://vaers.hhs.gov/data/datasets.html and save and unzip in VAERS folder FK-FIXME: +- Fcron funktioniert nicht, jobs werden im Nachhinein nicht ausgeführt, verwende Autocron statt Fcron FK-TODO: - Intensivstationen ergänzen durch Tabelle oder Barchart: From ae5701310c7673701802690158284e00d991c661 Mon Sep 17 00:00:00 2001 From: frankknoll Date: Sun, 20 Mar 2022 17:36:26 +0100 Subject: [PATCH 11/13] adding slider to MedianOfFreeBedsByKreisChartView --- docs/MedianOfFreeBedsByKreisChartView.js | 5 ++++ docs/intensivstationen.html | 14 +++--------- docs/intensivstationen.js | 29 +++++++++++++++++++++--- src/help.txt | 2 ++ 4 files changed, 36 insertions(+), 14 deletions(-) diff --git a/docs/MedianOfFreeBedsByKreisChartView.js b/docs/MedianOfFreeBedsByKreisChartView.js index 941b958d952..add365222b4 100644 --- a/docs/MedianOfFreeBedsByKreisChartView.js +++ b/docs/MedianOfFreeBedsByKreisChartView.js @@ -21,6 +21,11 @@ class MedianOfFreeBedsByKreisChartView { }); } + setData(data) { + this.#chart.config.data.datasets[0].data = data; + this.#chart.update(); + } + #getData(data, label) { return { datasets: [ diff --git a/docs/intensivstationen.html b/docs/intensivstationen.html index 632bc4d7805..77cb23508e6 100644 --- a/docs/intensivstationen.html +++ b/docs/intensivstationen.html @@ -25,16 +25,6 @@ document.addEventListener( "DOMContentLoaded", event => { - const slider = document.getElementById('slider'); - noUiSlider.create(slider, { - start: [20, 80], - connect: true, - range: { - 'min': 0, - 'max': 100 - } - }); - slider.noUiSlider.on('update', values => console.log(values[0], ' - ', values[1])); const intensiveCareCapacitiesChartView = new IntensiveCareCapacitiesChartView(document.getElementById("intensiveCareCapacities")); const freeBedsChartView = new FreeBedsChartView(document.getElementById('freeBeds')); const kreisSelect = document.querySelector('#kreisSelect'); @@ -42,7 +32,9 @@ kreisSelect.addEventListener( 'change', event => onKreisOptionSelected(kreisSelect, intensiveCareCapacitiesChartView, freeBedsChartView)); - displayMedianOfFreeBedsByKreisChart(document.getElementById('medianOfFreeBedsByKreis')); + displayMedianOfFreeBedsByKreisChart( + document.getElementById('medianOfFreeBedsByKreis'), + document.getElementById('slider')); }); function onKreisOptionSelected(kreisSelect, intensiveCareCapacitiesChartView, freeBedsChartView) { diff --git a/docs/intensivstationen.js b/docs/intensivstationen.js index 75fcc25ab53..9e0c20c7a4e 100644 --- a/docs/intensivstationen.js +++ b/docs/intensivstationen.js @@ -46,9 +46,32 @@ function add_median_free_beds_in_percent(dataDicts) { } } -function displayMedianOfFreeBedsByKreisChart(canvas) { - const medianOfFreeBedsByKreisChartView = new MedianOfFreeBedsByKreisChartView(canvas); +function displayMedianOfFreeBedsByKreisChart(canvas, slider) { fetch(`data/intensivstationen/medianOfFreeBedsByKreisTable.json`) .then(response => response.json()) - .then(json => medianOfFreeBedsByKreisChartView.displayChart(json)); + .then(json => _displayMedianOfFreeBedsByKreisChart(canvas, slider, json)); +} + +function _displayMedianOfFreeBedsByKreisChart(canvas, sliderElement, data) { + const medianOfFreeBedsByKreisChartView = new MedianOfFreeBedsByKreisChartView(canvas); + medianOfFreeBedsByKreisChartView.displayChart(data); + createSlider( + sliderElement, + { + min: 0, + max: data.length - 1 + }, + values => medianOfFreeBedsByKreisChartView.setData(data.slice(values[0], values[1] + 1))); +} + +function createSlider(sliderElement, range, onUpdate) { + noUiSlider.create( + sliderElement, + { + start: [range.min, range.max], + connect: true, + range: range, + step: 1, + }); + sliderElement.noUiSlider.on('update', onUpdate); } diff --git a/src/help.txt b/src/help.txt index 1704b8aeea5..a41b885fbce 100644 --- a/src/help.txt +++ b/src/help.txt @@ -21,6 +21,8 @@ FK-TODO: - Intensivstationen ergänzen durch Tabelle oder Barchart: Kreis => "Median der Anteile freier Betten", absteigend sortiert nach "Median der Anteile freier Betten". - Darstellung als Dashboard, siehe https://covid-karte.de/ oder https://experience.arcgis.com/experience/3a132983ad3c4ab8a28704e9addefaba +- Rot-Gelb-Grün eingefärbte Deutschland-Karte anzeigen wie in https://experience.arcgis.com/experience/3a132983ad3c4ab8a28704e9addefaba +- Alle Charts mit Slidern versehen. man 5 fcrontab From bc6b648898ab2610652b3d43021d393d6e902ef7 Mon Sep 17 00:00:00 2001 From: frankknoll Date: Sun, 20 Mar 2022 18:25:30 +0100 Subject: [PATCH 12/13] updating TODOs --- src/help.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/help.txt b/src/help.txt index a41b885fbce..f2d9e8cf77c 100644 --- a/src/help.txt +++ b/src/help.txt @@ -18,11 +18,9 @@ FK-FIXME: - Fcron funktioniert nicht, jobs werden im Nachhinein nicht ausgeführt, verwende Autocron statt Fcron FK-TODO: -- Intensivstationen ergänzen durch Tabelle oder Barchart: - Kreis => "Median der Anteile freier Betten", absteigend sortiert nach "Median der Anteile freier Betten". - Darstellung als Dashboard, siehe https://covid-karte.de/ oder https://experience.arcgis.com/experience/3a132983ad3c4ab8a28704e9addefaba - Rot-Gelb-Grün eingefärbte Deutschland-Karte anzeigen wie in https://experience.arcgis.com/experience/3a132983ad3c4ab8a28704e9addefaba -- Alle Charts mit Slidern versehen. +- Alle Charts mit Slidern versehen? man 5 fcrontab From 720a94240c74ceb78faadcc795e1833b7be93b51 Mon Sep 17 00:00:00 2001 From: frankknoll Date: Sun, 20 Mar 2022 18:33:39 +0100 Subject: [PATCH 13/13] updating heading --- docs/intensivstationen.html | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/intensivstationen.html b/docs/intensivstationen.html index 77cb23508e6..5a0062e2203 100644 --- a/docs/intensivstationen.html +++ b/docs/intensivstationen.html @@ -466,6 +466,7 @@

+

Median der Anteile freier Betten