Merge branch 'main' into pages
This commit is contained in:
@@ -18,7 +18,7 @@ FK-FIXME:
|
||||
|
||||
FK-TODO:
|
||||
- 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?
|
||||
|
||||
anacron job:
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
"source": [
|
||||
"from datetime import datetime\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",
|
||||
"\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['Kreis'] = dataFrame_kreise['Kreis']\n",
|
||||
" dataFrame['Einwohnerzahl'] = dataFrame_kreise['Einwohnerzahl']\n",
|
||||
" return self._addBundeslandColumn(dataFrame)\n",
|
||||
" \n",
|
||||
" return dataFrame\n",
|
||||
"\n",
|
||||
" def _addBundeslandColumn(self, dataFrame):\n",
|
||||
" return pd.merge(\n",
|
||||
" dataFrame,\n",
|
||||
@@ -4720,9 +4724,9 @@
|
||||
" def __init__(self, dataFrame):\n",
|
||||
" self.dataFrame = dataFrame\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",
|
||||
" aggregated = self.dataFrame.groupby('Kreis').agg(\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",
|
||||
@@ -4758,7 +4762,7 @@
|
||||
" medianOfFreeBedsByKreisTableFactory = MedianOfFreeBedsByKreisTableFactory(dataFrame)\n",
|
||||
" \n",
|
||||
" # When\n",
|
||||
" medianOfFreeBedsByKreisTable = medianOfFreeBedsByKreisTableFactory.createMedianOfFreeBedsByKreisTable()\n",
|
||||
" medianOfFreeBedsByKreisTable = medianOfFreeBedsByKreisTableFactory.createMedianOfFreeBedsByKreisTable('Kreis')\n",
|
||||
"\n",
|
||||
" # Then\n",
|
||||
" assert_frame_equal(\n",
|
||||
@@ -4818,10 +4822,117 @@
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"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\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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",
|
||||
"execution_count": null,
|
||||
@@ -4829,7 +4940,7 @@
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def publish():\n",
|
||||
"def publishGitHubPages():\n",
|
||||
" %cd /home/frankknoll/Dokumente/Corona/projects/HowBadIsMyBatch-pages\n",
|
||||
" ! git add -A\n",
|
||||
" ! git commit -m \"updating data\"\n",
|
||||
@@ -4843,7 +4954,7 @@
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"publish()"
|
||||
"publishGitHubPages()"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user