feat: Added parsing of details and table with details to dashboard
This commit is contained in:
		
							parent
							
								
									fe6cfaf8b6
								
							
						
					
					
						commit
						bac8cac1b7
					
				
					 3 changed files with 138 additions and 3 deletions
				
			
		|  | @ -31,6 +31,64 @@ | ||||||
| 				Mit dieser Rate dauert es bis zum <em>{{ mean_vaccinations_last_seven_days_herd_immunity }}</em> für {{ herd_immunity }} % und bis zum <em>{{ mean_vaccinations_last_seven_days_done }}</em> für 100 %. | 				Mit dieser Rate dauert es bis zum <em>{{ mean_vaccinations_last_seven_days_herd_immunity }}</em> für {{ herd_immunity }} % und bis zum <em>{{ mean_vaccinations_last_seven_days_done }}</em> für 100 %. | ||||||
| 			</p> | 			</p> | ||||||
| 		</section> | 		</section> | ||||||
|  | 		<section> | ||||||
|  | 			<h1>Details</h1> | ||||||
|  | 			<figure> | ||||||
|  | 				<table> | ||||||
|  | 					<thead> | ||||||
|  | 						<tr> | ||||||
|  | 							<th rowspan="3">Land</th> | ||||||
|  | 							<th rowspan="2" colspan="2"> | ||||||
|  | 								Impfungen<br /> | ||||||
|  | 								gesamt | ||||||
|  | 							</th> | ||||||
|  | 							<th colspan="8">Impfung wegen<sup><a href="#footnote-006">6</a></sup></th> | ||||||
|  | 						</tr> | ||||||
|  | 						<tr> | ||||||
|  | 							<th colspan="2">Alter</th> | ||||||
|  | 							<th colspan="2">Beruf</th> | ||||||
|  | 							<th colspan="2">Gesundheit</th> | ||||||
|  | 							<th colspan="2">Pflegeheim</th> | ||||||
|  | 						</tr> | ||||||
|  | 						<tr> | ||||||
|  | 							<th>Anzahl</th> | ||||||
|  | 							<th>%</th> | ||||||
|  | 							<th>Anzahl</th> | ||||||
|  | 							<th>%</th> | ||||||
|  | 							<th>Anzahl</th> | ||||||
|  | 							<th>%</th> | ||||||
|  | 							<th>Anzahl</th> | ||||||
|  | 							<th>%</th> | ||||||
|  | 							<th>Anzahl</th> | ||||||
|  | 							<th>%</th> | ||||||
|  | 						</tr> | ||||||
|  | 					</thead> | ||||||
|  | 					<tbody> | ||||||
|  | 						{% for land in details_per_land %} | ||||||
|  | 						<tr> | ||||||
|  | 							<th>{{ land }}</th> | ||||||
|  | 							<td class="number">{{ details_per_land[land].total_vaccinations }}</td> | ||||||
|  | 							<td class="number">{{ details_per_land[land].total_vaccinations_percentage }} %</td> | ||||||
|  | 							<td class="number">{{ details_per_land[land].vaccination_reason_age }}</td> | ||||||
|  | 							<td class="number">{{ details_per_land[land].vaccination_reason_age_percentage }} %</td> | ||||||
|  | 							<td class="number">{{ details_per_land[land].vaccination_reason_job }}</td> | ||||||
|  | 							<td class="number">{{ details_per_land[land].vaccination_reason_job_percentage }} %</td> | ||||||
|  | 							<td class="number">{{ details_per_land[land].vaccination_reason_medical }}</td> | ||||||
|  | 							<td class="number">{{ details_per_land[land].vaccination_reason_medical_percentage }} %</td> | ||||||
|  | 							<td class="number">{{ details_per_land[land].vaccination_reason_oldhome }}</td> | ||||||
|  | 							<td class="number">{{ details_per_land[land].vaccination_reason_oldhome_percentage }} %</td> | ||||||
|  | 						</tr> | ||||||
|  | 						{% endfor %} | ||||||
|  | 					</tbody> | ||||||
|  | 				</table> | ||||||
|  | 				<figcaption> | ||||||
|  | 					<a name="table-001"><span class="ref">Tabelle 1:</span></a> | ||||||
|  | 					Details der Impfungen, aufgeschlüsselt nach Ländern<br /> | ||||||
|  | 					Der Prozentwert bezieht sich bei den Gründen auf die in dem jeweiligen Land insgesamt vorgenommenen Impfungen, nicht auf die Größe der jeweiligen Gruppe. | ||||||
|  | 					Eine Impfung kann mehrere der genannten Gründe haben oder bei keinen der Gründen genannt werden, daher stimmen die Summe der Gründe und die Gesamtzahl der Impfungen nicht überein. | ||||||
|  | 				</figcaption> | ||||||
|  | 			</figure> | ||||||
|  | 		</section> | ||||||
| 		<section> | 		<section> | ||||||
| 			<h1>Fragen und Antworten</h1> | 			<h1>Fragen und Antworten</h1> | ||||||
| 			<section> | 			<section> | ||||||
|  | @ -138,6 +196,7 @@ | ||||||
| 				<li><a name="footnote-003">Bevölkerungsstand vom 31. Dezember 2019: {{ einwohner_deutschland }}.</a></li> | 				<li><a name="footnote-003">Bevölkerungsstand vom 31. Dezember 2019: {{ einwohner_deutschland }}.</a></li> | ||||||
| 				<li><a name="footnote-004">{{ herd_immunity }} % ist der Wert, bei dem aktuell von einer Herdenimmunität ausgegangen wird.</a></li> | 				<li><a name="footnote-004">{{ herd_immunity }} % ist der Wert, bei dem aktuell von einer Herdenimmunität ausgegangen wird.</a></li> | ||||||
| 				<li><a name="footnote-005">Die täglichen Impfraten unterliegen starken Schwankungen und sind daher wenig aussagekräftig.</a></li> | 				<li><a name="footnote-005">Die täglichen Impfraten unterliegen starken Schwankungen und sind daher wenig aussagekräftig.</a></li> | ||||||
|  | 				<li><a name="footnote-006">Nicht alle Länder veröffentlichen alle in der Aufschlüsselung aufgelisteten Daten.</a></li> | ||||||
| 			</ol> | 			</ol> | ||||||
| 		</section> | 		</section> | ||||||
| 	</body> | 	</body> | ||||||
|  |  | ||||||
							
								
								
									
										53
									
								
								plot.py
									
										
									
									
									
								
							
							
						
						
									
										53
									
								
								plot.py
									
										
									
									
									
								
							|  | @ -40,8 +40,6 @@ with open(data_filename, 'wb') as outfile: | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| rki_file = pd.read_excel(data_filename, sheet_name=None, engine='openpyxl') | rki_file = pd.read_excel(data_filename, sheet_name=None, engine='openpyxl') | ||||||
| 
 | 
 | ||||||
| raw_data = rki_file['Impfungen_proTag'] | raw_data = rki_file['Impfungen_proTag'] | ||||||
|  | @ -113,6 +111,54 @@ print_stand = stand_date.isoformat() | ||||||
| filename_stand = stand_date.strftime("%Y%m%d%H%M%S") | filename_stand = stand_date.strftime("%Y%m%d%H%M%S") | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | # Infos der einzelnen Länder | ||||||
|  | details_sheet_name = (set(rki_file.keys()) - {'Erläuterung', 'Impfungen_proTag'}).pop() | ||||||
|  | 
 | ||||||
|  | details_sheet = rki_file[details_sheet_name] | ||||||
|  | 
 | ||||||
|  | land_names = details_sheet['Bundesland'].iloc[0:17] | ||||||
|  | 
 | ||||||
|  | total_vaccinations_by_land = details_sheet['Impfungen kumulativ'].iloc[0:17] | ||||||
|  | vaccination_per_mille_by_land = details_sheet['Impfungen pro 1.000 Einwohner'].iloc[0:17] | ||||||
|  | 
 | ||||||
|  | vaccination_reason_age_by_land = details_sheet['Indikation nach Alter*'].iloc[0:17] | ||||||
|  | vaccination_reason_job_by_land = details_sheet['Berufliche Indikation*'].iloc[0:17] | ||||||
|  | vaccination_reason_medical_by_land = details_sheet['Medizinische Indikation*'].iloc[0:17] | ||||||
|  | vaccination_reason_oldhome_by_land = details_sheet['Pflegeheim-bewohnerIn*'].iloc[0:17] | ||||||
|  | 
 | ||||||
|  | details_per_land = {} | ||||||
|  | details_per_land_formatted = {} | ||||||
|  | for i in range(len(land_names)): | ||||||
|  | 
 | ||||||
|  | 	details_per_land[land_names[i]] = { | ||||||
|  | 		'total_vaccinations': int(total_vaccinations_by_land[i]), | ||||||
|  | 		'total_vaccinations_percentage': vaccination_per_mille_by_land[i] / 10, | ||||||
|  | 		'vaccination_reason_age': int(vaccination_reason_age_by_land[i]), | ||||||
|  | 		'vaccination_reason_age_percentage': np.round(vaccination_reason_age_by_land[i] / total_vaccinations_by_land[i] * 100), | ||||||
|  | 		'vaccination_reason_job': int(vaccination_reason_job_by_land[i]), | ||||||
|  | 		'vaccination_reason_job_percentage': np.round(vaccination_reason_job_by_land[i] / total_vaccinations_by_land[i] * 100), | ||||||
|  | 		'vaccination_reason_medical': int(vaccination_reason_medical_by_land[i]), | ||||||
|  | 		'vaccination_reason_medical_percentage': np.round(vaccination_reason_medical_by_land[i] / total_vaccinations_by_land[i] * 100), | ||||||
|  | 		'vaccination_reason_oldhome': int(vaccination_reason_oldhome_by_land[i]), | ||||||
|  | 		'vaccination_reason_oldhome_percentage': np.round(vaccination_reason_oldhome_by_land[i] / total_vaccinations_by_land[i] * 100), | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 	details_per_land_formatted[land_names[i]] = { | ||||||
|  | 		'total_vaccinations': '{:n}'.format(int(total_vaccinations_by_land[i])).replace('.', ' '), | ||||||
|  | 		'total_vaccinations_percentage': '{:.3n}'.format(np.round(vaccination_per_mille_by_land[i] / 10, 2)), | ||||||
|  | 		'vaccination_reason_age': '{:n}'.format(int(vaccination_reason_age_by_land[i])).replace('.', ' '), | ||||||
|  | 		'vaccination_reason_age_percentage': '{:n}'.format(np.round(vaccination_reason_age_by_land[i] / total_vaccinations_by_land[i] * 100)), | ||||||
|  | 		'vaccination_reason_job': '{:n}'.format(int(vaccination_reason_job_by_land[i])).replace('.', ' '), | ||||||
|  | 		'vaccination_reason_job_percentage': '{:n}'.format(np.round(vaccination_reason_job_by_land[i] / total_vaccinations_by_land[i] * 100)), | ||||||
|  | 		'vaccination_reason_medical': '{:n}'.format(int(vaccination_reason_medical_by_land[i])).replace('.', ' '), | ||||||
|  | 		'vaccination_reason_medical_percentage': '{:n}'.format(np.round(vaccination_reason_medical_by_land[i] / total_vaccinations_by_land[i] * 100)), | ||||||
|  | 		'vaccination_reason_oldhome': '{:n}'.format(int(vaccination_reason_oldhome_by_land[i])).replace('.', ' '), | ||||||
|  | 		'vaccination_reason_oldhome_percentage': '{:n}'.format(np.round(vaccination_reason_oldhome_by_land[i] / total_vaccinations_by_land[i] * 100)), | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| archive_folder = site_folder + 'archive/' + filename_stand | archive_folder = site_folder + 'archive/' + filename_stand | ||||||
| 
 | 
 | ||||||
| if os.path.isdir(archive_folder): | if os.path.isdir(archive_folder): | ||||||
|  | @ -227,7 +273,8 @@ def render_dashboard(): | ||||||
| 		last_date_day_rate_done = last_date_day_rate_done.strftime(df), | 		last_date_day_rate_done = last_date_day_rate_done.strftime(df), | ||||||
| 		mean_vaccinations_last_seven_days = '{:n}'.format(mean_vaccinations_last_seven_days_int).replace('.', ' '), | 		mean_vaccinations_last_seven_days = '{:n}'.format(mean_vaccinations_last_seven_days_int).replace('.', ' '), | ||||||
| 		mean_vaccinations_last_seven_days_herd_immunity = mean_vaccinations_last_seven_days_herd_immunity.strftime(df), | 		mean_vaccinations_last_seven_days_herd_immunity = mean_vaccinations_last_seven_days_herd_immunity.strftime(df), | ||||||
| 		mean_vaccinations_last_seven_days_done = mean_vaccinations_last_seven_days_done.strftime(df) | 		mean_vaccinations_last_seven_days_done = mean_vaccinations_last_seven_days_done.strftime(df), | ||||||
|  | 		details_per_land = details_per_land_formatted | ||||||
| 	).dump('site/index.xhtml') | 	).dump('site/index.xhtml') | ||||||
| 
 | 
 | ||||||
| 	shutil.copyfile(dashboard_filename, dashboard_archive_filename) | 	shutil.copyfile(dashboard_filename, dashboard_archive_filename) | ||||||
|  |  | ||||||
|  | @ -45,6 +45,10 @@ sup { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | figure { | ||||||
|  | 	max-width: 100%; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| figure img { | figure img { | ||||||
| 	width: 90%; | 	width: 90%; | ||||||
| 	height: auto; | 	height: auto; | ||||||
|  | @ -57,3 +61,28 @@ figure figcaption { | ||||||
| figure figcaption .ref { | figure figcaption .ref { | ||||||
| 	font-weight: bolder; | 	font-weight: bolder; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | figure { | ||||||
|  | 	overflow-y: auto; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | table { | ||||||
|  | 	border-collapse: collapse; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | table td, table th { | ||||||
|  | 	padding: .2em .5em; | ||||||
|  | 	border: 1px solid #333333; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | table th { | ||||||
|  | 	background: #BADBFF; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | table tbody th { | ||||||
|  | 	text-align: left; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | table td.number { | ||||||
|  | 	text-align: right; | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue