Merge branch 'main' into pages
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -9,3 +9,4 @@ src/tmp/
|
|||||||
src/results/
|
src/results/
|
||||||
docs/data/*.xlsx
|
docs/data/*.xlsx
|
||||||
docs/data/*.html
|
docs/data/*.html
|
||||||
|
.env
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
theme: jekyll-theme-leap-day
|
|
||||||
@@ -11,7 +11,7 @@ class FreeBedsChartView {
|
|||||||
if (this.#chart != null) {
|
if (this.#chart != null) {
|
||||||
this.#chart.destroy();
|
this.#chart.destroy();
|
||||||
}
|
}
|
||||||
const label = 'Anteil freier Betten';
|
const label = 'freie Betten';
|
||||||
this.#chart = new Chart(
|
this.#chart = new Chart(
|
||||||
this.#canvas,
|
this.#canvas,
|
||||||
{
|
{
|
||||||
@@ -35,9 +35,9 @@ class FreeBedsChartView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function drawTrafficLights(chart) {
|
function drawTrafficLights(chart) {
|
||||||
const RED = 'rgba(240, 59, 32, 0.75)';
|
const RED = 'rgba(240, 59, 32, 0.75)'; // #F03B20
|
||||||
const YELLOW = 'rgba(254, 178, 76, 0.75)';
|
const YELLOW = 'rgba(254, 178, 76, 0.75)'; // #FEB24C
|
||||||
const GREEN = 'rgba(56, 168, 0, 0.75)';
|
const GREEN = 'rgba(56, 168, 0, 0.75)'; // #38A800
|
||||||
chart.ctx.save();
|
chart.ctx.save();
|
||||||
fillRect({ chart: chart, startInPercent: 0, endInPercent: 10, color: RED });
|
fillRect({ chart: chart, startInPercent: 0, endInPercent: 10, color: RED });
|
||||||
fillRect({ chart: chart, startInPercent: 10, endInPercent: 25, color: YELLOW });
|
fillRect({ chart: chart, startInPercent: 10, endInPercent: 25, color: YELLOW });
|
||||||
@@ -60,7 +60,7 @@ class FreeBedsChartView {
|
|||||||
backgroundColor: 'rgba(0, 0, 150, 1)'
|
backgroundColor: 'rgba(0, 0, 150, 1)'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Median der Anteile freier Betten',
|
label: 'Median freier Betten',
|
||||||
data: data,
|
data: data,
|
||||||
parsing: {
|
parsing: {
|
||||||
yAxisKey: 'median_free_beds_in_percent'
|
yAxisKey: 'median_free_beds_in_percent'
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ class MedianOfFreeBedsByKreisChartView {
|
|||||||
if (this.#chart != null) {
|
if (this.#chart != null) {
|
||||||
this.#chart.destroy();
|
this.#chart.destroy();
|
||||||
}
|
}
|
||||||
const label = 'Median der Anteile freier Betten';
|
const label = 'Median freier Betten';
|
||||||
this.#chart = new Chart(
|
this.#chart = new Chart(
|
||||||
this.#canvas,
|
this.#canvas,
|
||||||
{
|
{
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -18,7 +18,7 @@ FK-FIXME:
|
|||||||
|
|
||||||
FK-TODO:
|
FK-TODO:
|
||||||
- Darstellung als Dashboard, siehe https://covid-karte.de/ oder https://experience.arcgis.com/experience/3a132983ad3c4ab8a28704e9addefaba
|
- Darstellung als Dashboard, siehe https://covid-karte.de/ oder https://experience.arcgis.com/experience/3a132983ad3c4ab8a28704e9addefaba
|
||||||
- nach den "Median der Anteile freier Betten"-Werten Rot-Gelb-Grün eingefärbte Deutschland-Karte anzeigen wie in https://experience.arcgis.com/experience/3a132983ad3c4ab8a28704e9addefaba
|
- nach den "Median freier Betten"-Werten 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?
|
||||||
|
|
||||||
anacron job:
|
anacron job:
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
"source": [
|
"source": [
|
||||||
"from datetime import datetime\n",
|
"from datetime import datetime\n",
|
||||||
"\n",
|
"\n",
|
||||||
"print(datetime.now().strftime(\"%d.%m.%Y, %H:%M:%S Uhr\"))\t"
|
"print(datetime.now().strftime(\"%d.%m.%Y, %H:%M:%S Uhr\"))"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -591,11 +591,15 @@
|
|||||||
" self.kreise = kreise\n",
|
" self.kreise = kreise\n",
|
||||||
"\n",
|
"\n",
|
||||||
" def addKreisAndBundeslandAndEinwohnerzahlColumns(self, dataFrame):\n",
|
" def addKreisAndBundeslandAndEinwohnerzahlColumns(self, dataFrame):\n",
|
||||||
|
" dataFrame = self.addKreisAndEinwohnerzahlColumns(dataFrame)\n",
|
||||||
|
" return self._addBundeslandColumn(dataFrame)\n",
|
||||||
|
" \n",
|
||||||
|
" def addKreisAndEinwohnerzahlColumns(self, dataFrame):\n",
|
||||||
" dataFrame_kreise = pd.merge(dataFrame, self.kreise, how = 'left', left_on = 'gemeindeschluessel', right_index = True)\n",
|
" dataFrame_kreise = pd.merge(dataFrame, self.kreise, how = 'left', left_on = 'gemeindeschluessel', right_index = True)\n",
|
||||||
" dataFrame['Kreis'] = dataFrame_kreise['Kreis']\n",
|
" dataFrame['Kreis'] = dataFrame_kreise['Kreis']\n",
|
||||||
" dataFrame['Einwohnerzahl'] = dataFrame_kreise['Einwohnerzahl']\n",
|
" dataFrame['Einwohnerzahl'] = dataFrame_kreise['Einwohnerzahl']\n",
|
||||||
" return self._addBundeslandColumn(dataFrame)\n",
|
" return dataFrame\n",
|
||||||
" \n",
|
"\n",
|
||||||
" def _addBundeslandColumn(self, dataFrame):\n",
|
" def _addBundeslandColumn(self, dataFrame):\n",
|
||||||
" return pd.merge(\n",
|
" return pd.merge(\n",
|
||||||
" dataFrame,\n",
|
" dataFrame,\n",
|
||||||
@@ -4720,9 +4724,9 @@
|
|||||||
" def __init__(self, dataFrame):\n",
|
" def __init__(self, dataFrame):\n",
|
||||||
" self.dataFrame = dataFrame\n",
|
" self.dataFrame = dataFrame\n",
|
||||||
"\n",
|
"\n",
|
||||||
" def createMedianOfFreeBedsByKreisTable(self):\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",
|
" 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",
|
" aggregated = self.dataFrame.groupby(kreisKey).agg(\n",
|
||||||
" median_free_beds_in_percent =\n",
|
" median_free_beds_in_percent =\n",
|
||||||
" pd.NamedAgg(\n",
|
" pd.NamedAgg(\n",
|
||||||
" column = 'free_beds_divided_by_all_beds_in_percent',\n",
|
" column = 'free_beds_divided_by_all_beds_in_percent',\n",
|
||||||
@@ -4758,7 +4762,7 @@
|
|||||||
" medianOfFreeBedsByKreisTableFactory = MedianOfFreeBedsByKreisTableFactory(dataFrame)\n",
|
" medianOfFreeBedsByKreisTableFactory = MedianOfFreeBedsByKreisTableFactory(dataFrame)\n",
|
||||||
" \n",
|
" \n",
|
||||||
" # When\n",
|
" # When\n",
|
||||||
" medianOfFreeBedsByKreisTable = medianOfFreeBedsByKreisTableFactory.createMedianOfFreeBedsByKreisTable()\n",
|
" medianOfFreeBedsByKreisTable = medianOfFreeBedsByKreisTableFactory.createMedianOfFreeBedsByKreisTable('Kreis')\n",
|
||||||
"\n",
|
"\n",
|
||||||
" # Then\n",
|
" # Then\n",
|
||||||
" assert_frame_equal(\n",
|
" assert_frame_equal(\n",
|
||||||
@@ -4818,10 +4822,117 @@
|
|||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"medianOfFreeBedsByKreisTableFactory = MedianOfFreeBedsByKreisTableFactory(timeSeries)\n",
|
"medianOfFreeBedsByKreisTableFactory = MedianOfFreeBedsByKreisTableFactory(timeSeries)\n",
|
||||||
"medianOfFreeBedsByKreisTable = medianOfFreeBedsByKreisTableFactory.createMedianOfFreeBedsByKreisTable()\n",
|
"medianOfFreeBedsByKreisTable = medianOfFreeBedsByKreisTableFactory.createMedianOfFreeBedsByKreisTable('Kreis')\n",
|
||||||
"medianOfFreeBedsByKreisTable.reset_index().to_json('../../docs/data/intensivstationen/medianOfFreeBedsByKreisTable.json', orient = \"records\")"
|
"medianOfFreeBedsByKreisTable.reset_index().to_json('../../docs/data/intensivstationen/medianOfFreeBedsByKreisTable.json', orient = \"records\")"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "396cb4f8",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"def createMedianOfFreeBedsByKreisTableForChoroplethMap(medianOfFreeBedsByKreisTableFactory):\n",
|
||||||
|
" medianOfFreeBedsByKreisTable = medianOfFreeBedsByKreisTableFactory.createMedianOfFreeBedsByKreisTable('gemeindeschluessel').reset_index()\n",
|
||||||
|
" return ColumnsAdder(kreise).addKreisAndEinwohnerzahlColumns(medianOfFreeBedsByKreisTable)\n",
|
||||||
|
" \n",
|
||||||
|
"medianOfFreeBedsByKreisTable = createMedianOfFreeBedsByKreisTableForChoroplethMap(medianOfFreeBedsByKreisTableFactory)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "b4247571",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"import requests\n",
|
||||||
|
"import json\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
"class Datawrapper:\n",
|
||||||
|
"\n",
|
||||||
|
" def __init__(self, accessToken):\n",
|
||||||
|
" self.authHeader = {\"Authorization\": f\"Bearer {accessToken}\"}\n",
|
||||||
|
"\n",
|
||||||
|
" def setChartTitle(self, title):\n",
|
||||||
|
" response = requests.request(\n",
|
||||||
|
" \"PATCH\",\n",
|
||||||
|
" \"https://api.datawrapper.de/v3/charts/dYmYb\",\n",
|
||||||
|
" json={\"title\": title},\n",
|
||||||
|
" headers={\n",
|
||||||
|
" \"Accept\": \"*/*\",\n",
|
||||||
|
" \"Content-Type\": \"application/json\"\n",
|
||||||
|
" } | self.authHeader)\n",
|
||||||
|
" return json.loads(response.text)\n",
|
||||||
|
"\n",
|
||||||
|
" def uploadChartData(self, data: pd.DataFrame):\n",
|
||||||
|
" response = requests.request(\n",
|
||||||
|
" \"PUT\",\n",
|
||||||
|
" \"https://api.datawrapper.de/v3/charts/dYmYb/data\",\n",
|
||||||
|
" data=data.to_csv(\n",
|
||||||
|
" index=False,\n",
|
||||||
|
" columns=['gemeindeschluessel', 'median_free_beds_in_percent', 'Kreis']).encode(\"utf-8\"),\n",
|
||||||
|
" headers={\n",
|
||||||
|
" \"Accept\": \"*/*\",\n",
|
||||||
|
" \"Content-Type\": \"text/csv\"\n",
|
||||||
|
" } | self.authHeader)\n",
|
||||||
|
" return response.text\n",
|
||||||
|
"\n",
|
||||||
|
" def fetchChartData(self):\n",
|
||||||
|
" response = requests.request(\n",
|
||||||
|
" \"GET\",\n",
|
||||||
|
" \"https://api.datawrapper.de/v3/charts/dYmYb/data\",\n",
|
||||||
|
" headers={\n",
|
||||||
|
" \"Accept\": \"text/csv\"\n",
|
||||||
|
" } | self.authHeader)\n",
|
||||||
|
"\n",
|
||||||
|
" return response.text\n",
|
||||||
|
"\n",
|
||||||
|
" def publishChart(self):\n",
|
||||||
|
" response = requests.request(\n",
|
||||||
|
" \"POST\",\n",
|
||||||
|
" \"https://api.datawrapper.de/v3/charts/dYmYb/publish\",\n",
|
||||||
|
" headers={\n",
|
||||||
|
" \"Accept\": \"*/*\"\n",
|
||||||
|
" } | self.authHeader)\n",
|
||||||
|
" return json.loads(response.text)\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "d1b75357",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"def getChartTitle(dateStart, dateEnd):\n",
|
||||||
|
" def formatDate(date):\n",
|
||||||
|
" return date.strftime(\"%d.%m.%Y\")\n",
|
||||||
|
"\n",
|
||||||
|
" return f\"Median freier Intensivbetten im Zeitraum {formatDate(dateStart)} bis {formatDate(dateEnd)}\""
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "9de2f34e",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"from decouple import AutoConfig\n",
|
||||||
|
"\n",
|
||||||
|
"config = AutoConfig(search_path='../..')\n",
|
||||||
|
"dataWrapper = Datawrapper(config('DATAWRAPPER_API_TOKEN'))\n",
|
||||||
|
"dataWrapper.setChartTitle(\n",
|
||||||
|
" getChartTitle(\n",
|
||||||
|
" dateStart=timeSeries['date'].min(),\n",
|
||||||
|
" dateEnd=timeSeries['date'].max()))\n",
|
||||||
|
"dataWrapper.uploadChartData(medianOfFreeBedsByKreisTable)\n",
|
||||||
|
"dataWrapper.publishChart()\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
@@ -4829,7 +4940,7 @@
|
|||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"def publish():\n",
|
"def publishGitHubPages():\n",
|
||||||
" %cd /home/frankknoll/Dokumente/Corona/projects/HowBadIsMyBatch-pages\n",
|
" %cd /home/frankknoll/Dokumente/Corona/projects/HowBadIsMyBatch-pages\n",
|
||||||
" ! git add -A\n",
|
" ! git add -A\n",
|
||||||
" ! git commit -m \"updating data\"\n",
|
" ! git commit -m \"updating data\"\n",
|
||||||
@@ -4843,7 +4954,7 @@
|
|||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"publish()"
|
"publishGitHubPages()"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in New Issue
Block a user