├── .github └── workflows │ ├── main.yml │ └── manual.yml ├── CNAME ├── LICENSE ├── README.md ├── assets ├── css │ ├── bootstrap │ │ ├── bootstrap-grid.css │ │ ├── bootstrap-grid.css.map │ │ ├── bootstrap-grid.min.css │ │ ├── bootstrap-grid.min.css.map │ │ ├── bootstrap-reboot.css │ │ ├── bootstrap-reboot.css.map │ │ ├── bootstrap-reboot.min.css │ │ ├── bootstrap-reboot.min.css.map │ │ ├── bootstrap-utilities.css │ │ ├── bootstrap-utilities.css.map │ │ ├── bootstrap-utilities.min.css │ │ ├── bootstrap-utilities.min.css.map │ │ ├── bootstrap.css │ │ ├── bootstrap.css.map │ │ ├── bootstrap.min.css │ │ └── bootstrap.min.css.map │ └── main.css ├── data │ ├── array_index.json │ ├── data_latest.csv │ ├── data_latest.json │ ├── landkreise_edited.geojson │ ├── landkreise_simplify200_old.geojson │ ├── minified_landkreise.geo.json │ ├── minified_landkreise.geo.json.qmd │ ├── population_landkreise.json │ ├── population_landkreise_altersgruppen.csv │ ├── population_rki_age_groups.csv │ ├── timeseries.hdf5 │ └── timeseries_nd.hdf5 ├── img │ ├── example.png │ ├── minus.png │ └── plus.png ├── js │ ├── bootstrap │ │ ├── bootstrap.bundle.js │ │ ├── bootstrap.bundle.js.map │ │ ├── bootstrap.bundle.min.js │ │ ├── bootstrap.bundle.min.js.map │ │ ├── bootstrap.esm.js │ │ ├── bootstrap.esm.js.map │ │ ├── bootstrap.esm.min.js │ │ ├── bootstrap.esm.min.js.map │ │ ├── bootstrap.js │ │ ├── bootstrap.js.map │ │ ├── bootstrap.min.js │ │ └── bootstrap.min.js.map │ ├── d3-interpolate-path.min.js │ ├── hdf5.js │ ├── main.js │ └── utils.js └── python │ ├── IFR_CFR_vs_cases.py │ ├── create_mini_geojson.py │ ├── requirements.txt │ ├── timeseries_data.py │ └── update_data.py ├── index.html └── legacy.html /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | name: automatic-update 3 | 4 | # Controls when the action will run. Triggers the workflow on push or pull request 5 | # events but only for the master branch 6 | on: 7 | schedule: 8 | - cron: "0 */4 * * *" #runs at 04:00 UTC everyday 9 | 10 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 11 | jobs: 12 | # This workflow contains a single job called "build" 13 | update_data: 14 | # The type of runner that the job will run on 15 | runs-on: ubuntu-latest 16 | # Same for every task/step 17 | defaults: 18 | run: 19 | working-directory: ./assets/python 20 | # Steps represent a sequence of tasks that will be executed as part of the job 21 | steps: 22 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 23 | - uses: actions/checkout@v2 24 | 25 | - name: Set up Python 3.9 26 | uses: actions/setup-python@v2 27 | with: 28 | python-version: 3.9 29 | - name: Install dependencies 30 | run: pip install -r requirements.txt 31 | # Another job called 32 | - name: Run update on rki data (legacy) 33 | run: python update_data.py 34 | - name: Run update on rki data 35 | run: python timeseries_data.py 36 | - name: Add & Commit 37 | uses: EndBug/add-and-commit@v5 38 | with: 39 | author_name: UpdateBot 40 | author_email: sebastian@mohrenclan.de 41 | message: "Updated rki dataset" 42 | add: 'assets/data/*' 43 | env: 44 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 45 | -------------------------------------------------------------------------------- /.github/workflows/manual.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: manual-update 4 | 5 | # Controls when the action will run. Triggers the workflow on push or pull request 6 | # events but only for the master branch 7 | on: [workflow_dispatch] 8 | 9 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 10 | jobs: 11 | # This workflow contains a single job called "build" 12 | build: 13 | # The type of runner that the job will run on 14 | runs-on: ubuntu-latest 15 | defaults: 16 | run: 17 | working-directory: ./assets/python 18 | # Steps represent a sequence of tasks that will be executed as part of the job 19 | steps: 20 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 21 | - uses: actions/checkout@v2 22 | 23 | - name: Set up Python 3.9 24 | uses: actions/setup-python@v2 25 | with: 26 | python-version: 3.9 27 | - name: Install dependencies 28 | run: pip install -r requirements.txt 29 | # Another job called 30 | - name: Run update on rki data 31 | run: python update_data.py 32 | - name: Run update on rki data 33 | run: python timeseries_data.py 34 | - name: Add & Commit 35 | uses: EndBug/add-and-commit@v5 36 | with: 37 | author_name: UpdateBot 38 | author_email: sebastian@mohrenclan.de 39 | message: "Updated rki dataset" 40 | add: 'assets/data/*' 41 | env: 42 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 43 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | risikogebiete-deutschland.de -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU AFFERO GENERAL PUBLIC LICENSE 2 | Version 3, 19 November 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU Affero General Public License is a free, copyleft license for 11 | software and other kinds of works, specifically designed to ensure 12 | cooperation with the community in the case of network server software. 13 | 14 | The licenses for most software and other practical works are designed 15 | to take away your freedom to share and change the works. By contrast, 16 | our General Public Licenses are intended to guarantee your freedom to 17 | share and change all versions of a program--to make sure it remains free 18 | software for all its users. 19 | 20 | When we speak of free software, we are referring to freedom, not 21 | price. Our General Public Licenses are designed to make sure that you 22 | have the freedom to distribute copies of free software (and charge for 23 | them if you wish), that you receive source code or can get it if you 24 | want it, that you can change the software or use pieces of it in new 25 | free programs, and that you know you can do these things. 26 | 27 | Developers that use our General Public Licenses protect your rights 28 | with two steps: (1) assert copyright on the software, and (2) offer 29 | you this License which gives you legal permission to copy, distribute 30 | and/or modify the software. 31 | 32 | A secondary benefit of defending all users' freedom is that 33 | improvements made in alternate versions of the program, if they 34 | receive widespread use, become available for other developers to 35 | incorporate. Many developers of free software are heartened and 36 | encouraged by the resulting cooperation. However, in the case of 37 | software used on network servers, this result may fail to come about. 38 | The GNU General Public License permits making a modified version and 39 | letting the public access it on a server without ever releasing its 40 | source code to the public. 41 | 42 | The GNU Affero General Public License is designed specifically to 43 | ensure that, in such cases, the modified source code becomes available 44 | to the community. It requires the operator of a network server to 45 | provide the source code of the modified version running there to the 46 | users of that server. Therefore, public use of a modified version, on 47 | a publicly accessible server, gives the public access to the source 48 | code of the modified version. 49 | 50 | An older license, called the Affero General Public License and 51 | published by Affero, was designed to accomplish similar goals. This is 52 | a different license, not a version of the Affero GPL, but Affero has 53 | released a new version of the Affero GPL which permits relicensing under 54 | this license. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | TERMS AND CONDITIONS 60 | 61 | 0. Definitions. 62 | 63 | "This License" refers to version 3 of the GNU Affero General Public License. 64 | 65 | "Copyright" also means copyright-like laws that apply to other kinds of 66 | works, such as semiconductor masks. 67 | 68 | "The Program" refers to any copyrightable work licensed under this 69 | License. Each licensee is addressed as "you". "Licensees" and 70 | "recipients" may be individuals or organizations. 71 | 72 | To "modify" a work means to copy from or adapt all or part of the work 73 | in a fashion requiring copyright permission, other than the making of an 74 | exact copy. The resulting work is called a "modified version" of the 75 | earlier work or a work "based on" the earlier work. 76 | 77 | A "covered work" means either the unmodified Program or a work based 78 | on the Program. 79 | 80 | To "propagate" a work means to do anything with it that, without 81 | permission, would make you directly or secondarily liable for 82 | infringement under applicable copyright law, except executing it on a 83 | computer or modifying a private copy. Propagation includes copying, 84 | distribution (with or without modification), making available to the 85 | public, and in some countries other activities as well. 86 | 87 | To "convey" a work means any kind of propagation that enables other 88 | parties to make or receive copies. Mere interaction with a user through 89 | a computer network, with no transfer of a copy, is not conveying. 90 | 91 | An interactive user interface displays "Appropriate Legal Notices" 92 | to the extent that it includes a convenient and prominently visible 93 | feature that (1) displays an appropriate copyright notice, and (2) 94 | tells the user that there is no warranty for the work (except to the 95 | extent that warranties are provided), that licensees may convey the 96 | work under this License, and how to view a copy of this License. If 97 | the interface presents a list of user commands or options, such as a 98 | menu, a prominent item in the list meets this criterion. 99 | 100 | 1. Source Code. 101 | 102 | The "source code" for a work means the preferred form of the work 103 | for making modifications to it. "Object code" means any non-source 104 | form of a work. 105 | 106 | A "Standard Interface" means an interface that either is an official 107 | standard defined by a recognized standards body, or, in the case of 108 | interfaces specified for a particular programming language, one that 109 | is widely used among developers working in that language. 110 | 111 | The "System Libraries" of an executable work include anything, other 112 | than the work as a whole, that (a) is included in the normal form of 113 | packaging a Major Component, but which is not part of that Major 114 | Component, and (b) serves only to enable use of the work with that 115 | Major Component, or to implement a Standard Interface for which an 116 | implementation is available to the public in source code form. A 117 | "Major Component", in this context, means a major essential component 118 | (kernel, window system, and so on) of the specific operating system 119 | (if any) on which the executable work runs, or a compiler used to 120 | produce the work, or an object code interpreter used to run it. 121 | 122 | The "Corresponding Source" for a work in object code form means all 123 | the source code needed to generate, install, and (for an executable 124 | work) run the object code and to modify the work, including scripts to 125 | control those activities. However, it does not include the work's 126 | System Libraries, or general-purpose tools or generally available free 127 | programs which are used unmodified in performing those activities but 128 | which are not part of the work. For example, Corresponding Source 129 | includes interface definition files associated with source files for 130 | the work, and the source code for shared libraries and dynamically 131 | linked subprograms that the work is specifically designed to require, 132 | such as by intimate data communication or control flow between those 133 | subprograms and other parts of the work. 134 | 135 | The Corresponding Source need not include anything that users 136 | can regenerate automatically from other parts of the Corresponding 137 | Source. 138 | 139 | The Corresponding Source for a work in source code form is that 140 | same work. 141 | 142 | 2. Basic Permissions. 143 | 144 | All rights granted under this License are granted for the term of 145 | copyright on the Program, and are irrevocable provided the stated 146 | conditions are met. This License explicitly affirms your unlimited 147 | permission to run the unmodified Program. The output from running a 148 | covered work is covered by this License only if the output, given its 149 | content, constitutes a covered work. This License acknowledges your 150 | rights of fair use or other equivalent, as provided by copyright law. 151 | 152 | You may make, run and propagate covered works that you do not 153 | convey, without conditions so long as your license otherwise remains 154 | in force. You may convey covered works to others for the sole purpose 155 | of having them make modifications exclusively for you, or provide you 156 | with facilities for running those works, provided that you comply with 157 | the terms of this License in conveying all material for which you do 158 | not control copyright. Those thus making or running the covered works 159 | for you must do so exclusively on your behalf, under your direction 160 | and control, on terms that prohibit them from making any copies of 161 | your copyrighted material outside their relationship with you. 162 | 163 | Conveying under any other circumstances is permitted solely under 164 | the conditions stated below. Sublicensing is not allowed; section 10 165 | makes it unnecessary. 166 | 167 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 168 | 169 | No covered work shall be deemed part of an effective technological 170 | measure under any applicable law fulfilling obligations under article 171 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 172 | similar laws prohibiting or restricting circumvention of such 173 | measures. 174 | 175 | When you convey a covered work, you waive any legal power to forbid 176 | circumvention of technological measures to the extent such circumvention 177 | is effected by exercising rights under this License with respect to 178 | the covered work, and you disclaim any intention to limit operation or 179 | modification of the work as a means of enforcing, against the work's 180 | users, your or third parties' legal rights to forbid circumvention of 181 | technological measures. 182 | 183 | 4. Conveying Verbatim Copies. 184 | 185 | You may convey verbatim copies of the Program's source code as you 186 | receive it, in any medium, provided that you conspicuously and 187 | appropriately publish on each copy an appropriate copyright notice; 188 | keep intact all notices stating that this License and any 189 | non-permissive terms added in accord with section 7 apply to the code; 190 | keep intact all notices of the absence of any warranty; and give all 191 | recipients a copy of this License along with the Program. 192 | 193 | You may charge any price or no price for each copy that you convey, 194 | and you may offer support or warranty protection for a fee. 195 | 196 | 5. Conveying Modified Source Versions. 197 | 198 | You may convey a work based on the Program, or the modifications to 199 | produce it from the Program, in the form of source code under the 200 | terms of section 4, provided that you also meet all of these conditions: 201 | 202 | a) The work must carry prominent notices stating that you modified 203 | it, and giving a relevant date. 204 | 205 | b) The work must carry prominent notices stating that it is 206 | released under this License and any conditions added under section 207 | 7. This requirement modifies the requirement in section 4 to 208 | "keep intact all notices". 209 | 210 | c) You must license the entire work, as a whole, under this 211 | License to anyone who comes into possession of a copy. This 212 | License will therefore apply, along with any applicable section 7 213 | additional terms, to the whole of the work, and all its parts, 214 | regardless of how they are packaged. This License gives no 215 | permission to license the work in any other way, but it does not 216 | invalidate such permission if you have separately received it. 217 | 218 | d) If the work has interactive user interfaces, each must display 219 | Appropriate Legal Notices; however, if the Program has interactive 220 | interfaces that do not display Appropriate Legal Notices, your 221 | work need not make them do so. 222 | 223 | A compilation of a covered work with other separate and independent 224 | works, which are not by their nature extensions of the covered work, 225 | and which are not combined with it such as to form a larger program, 226 | in or on a volume of a storage or distribution medium, is called an 227 | "aggregate" if the compilation and its resulting copyright are not 228 | used to limit the access or legal rights of the compilation's users 229 | beyond what the individual works permit. Inclusion of a covered work 230 | in an aggregate does not cause this License to apply to the other 231 | parts of the aggregate. 232 | 233 | 6. Conveying Non-Source Forms. 234 | 235 | You may convey a covered work in object code form under the terms 236 | of sections 4 and 5, provided that you also convey the 237 | machine-readable Corresponding Source under the terms of this License, 238 | in one of these ways: 239 | 240 | a) Convey the object code in, or embodied in, a physical product 241 | (including a physical distribution medium), accompanied by the 242 | Corresponding Source fixed on a durable physical medium 243 | customarily used for software interchange. 244 | 245 | b) Convey the object code in, or embodied in, a physical product 246 | (including a physical distribution medium), accompanied by a 247 | written offer, valid for at least three years and valid for as 248 | long as you offer spare parts or customer support for that product 249 | model, to give anyone who possesses the object code either (1) a 250 | copy of the Corresponding Source for all the software in the 251 | product that is covered by this License, on a durable physical 252 | medium customarily used for software interchange, for a price no 253 | more than your reasonable cost of physically performing this 254 | conveying of source, or (2) access to copy the 255 | Corresponding Source from a network server at no charge. 256 | 257 | c) Convey individual copies of the object code with a copy of the 258 | written offer to provide the Corresponding Source. This 259 | alternative is allowed only occasionally and noncommercially, and 260 | only if you received the object code with such an offer, in accord 261 | with subsection 6b. 262 | 263 | d) Convey the object code by offering access from a designated 264 | place (gratis or for a charge), and offer equivalent access to the 265 | Corresponding Source in the same way through the same place at no 266 | further charge. You need not require recipients to copy the 267 | Corresponding Source along with the object code. If the place to 268 | copy the object code is a network server, the Corresponding Source 269 | may be on a different server (operated by you or a third party) 270 | that supports equivalent copying facilities, provided you maintain 271 | clear directions next to the object code saying where to find the 272 | Corresponding Source. Regardless of what server hosts the 273 | Corresponding Source, you remain obligated to ensure that it is 274 | available for as long as needed to satisfy these requirements. 275 | 276 | e) Convey the object code using peer-to-peer transmission, provided 277 | you inform other peers where the object code and Corresponding 278 | Source of the work are being offered to the general public at no 279 | charge under subsection 6d. 280 | 281 | A separable portion of the object code, whose source code is excluded 282 | from the Corresponding Source as a System Library, need not be 283 | included in conveying the object code work. 284 | 285 | A "User Product" is either (1) a "consumer product", which means any 286 | tangible personal property which is normally used for personal, family, 287 | or household purposes, or (2) anything designed or sold for incorporation 288 | into a dwelling. In determining whether a product is a consumer product, 289 | doubtful cases shall be resolved in favor of coverage. For a particular 290 | product received by a particular user, "normally used" refers to a 291 | typical or common use of that class of product, regardless of the status 292 | of the particular user or of the way in which the particular user 293 | actually uses, or expects or is expected to use, the product. A product 294 | is a consumer product regardless of whether the product has substantial 295 | commercial, industrial or non-consumer uses, unless such uses represent 296 | the only significant mode of use of the product. 297 | 298 | "Installation Information" for a User Product means any methods, 299 | procedures, authorization keys, or other information required to install 300 | and execute modified versions of a covered work in that User Product from 301 | a modified version of its Corresponding Source. The information must 302 | suffice to ensure that the continued functioning of the modified object 303 | code is in no case prevented or interfered with solely because 304 | modification has been made. 305 | 306 | If you convey an object code work under this section in, or with, or 307 | specifically for use in, a User Product, and the conveying occurs as 308 | part of a transaction in which the right of possession and use of the 309 | User Product is transferred to the recipient in perpetuity or for a 310 | fixed term (regardless of how the transaction is characterized), the 311 | Corresponding Source conveyed under this section must be accompanied 312 | by the Installation Information. But this requirement does not apply 313 | if neither you nor any third party retains the ability to install 314 | modified object code on the User Product (for example, the work has 315 | been installed in ROM). 316 | 317 | The requirement to provide Installation Information does not include a 318 | requirement to continue to provide support service, warranty, or updates 319 | for a work that has been modified or installed by the recipient, or for 320 | the User Product in which it has been modified or installed. Access to a 321 | network may be denied when the modification itself materially and 322 | adversely affects the operation of the network or violates the rules and 323 | protocols for communication across the network. 324 | 325 | Corresponding Source conveyed, and Installation Information provided, 326 | in accord with this section must be in a format that is publicly 327 | documented (and with an implementation available to the public in 328 | source code form), and must require no special password or key for 329 | unpacking, reading or copying. 330 | 331 | 7. Additional Terms. 332 | 333 | "Additional permissions" are terms that supplement the terms of this 334 | License by making exceptions from one or more of its conditions. 335 | Additional permissions that are applicable to the entire Program shall 336 | be treated as though they were included in this License, to the extent 337 | that they are valid under applicable law. If additional permissions 338 | apply only to part of the Program, that part may be used separately 339 | under those permissions, but the entire Program remains governed by 340 | this License without regard to the additional permissions. 341 | 342 | When you convey a copy of a covered work, you may at your option 343 | remove any additional permissions from that copy, or from any part of 344 | it. (Additional permissions may be written to require their own 345 | removal in certain cases when you modify the work.) You may place 346 | additional permissions on material, added by you to a covered work, 347 | for which you have or can give appropriate copyright permission. 348 | 349 | Notwithstanding any other provision of this License, for material you 350 | add to a covered work, you may (if authorized by the copyright holders of 351 | that material) supplement the terms of this License with terms: 352 | 353 | a) Disclaiming warranty or limiting liability differently from the 354 | terms of sections 15 and 16 of this License; or 355 | 356 | b) Requiring preservation of specified reasonable legal notices or 357 | author attributions in that material or in the Appropriate Legal 358 | Notices displayed by works containing it; or 359 | 360 | c) Prohibiting misrepresentation of the origin of that material, or 361 | requiring that modified versions of such material be marked in 362 | reasonable ways as different from the original version; or 363 | 364 | d) Limiting the use for publicity purposes of names of licensors or 365 | authors of the material; or 366 | 367 | e) Declining to grant rights under trademark law for use of some 368 | trade names, trademarks, or service marks; or 369 | 370 | f) Requiring indemnification of licensors and authors of that 371 | material by anyone who conveys the material (or modified versions of 372 | it) with contractual assumptions of liability to the recipient, for 373 | any liability that these contractual assumptions directly impose on 374 | those licensors and authors. 375 | 376 | All other non-permissive additional terms are considered "further 377 | restrictions" within the meaning of section 10. If the Program as you 378 | received it, or any part of it, contains a notice stating that it is 379 | governed by this License along with a term that is a further 380 | restriction, you may remove that term. If a license document contains 381 | a further restriction but permits relicensing or conveying under this 382 | License, you may add to a covered work material governed by the terms 383 | of that license document, provided that the further restriction does 384 | not survive such relicensing or conveying. 385 | 386 | If you add terms to a covered work in accord with this section, you 387 | must place, in the relevant source files, a statement of the 388 | additional terms that apply to those files, or a notice indicating 389 | where to find the applicable terms. 390 | 391 | Additional terms, permissive or non-permissive, may be stated in the 392 | form of a separately written license, or stated as exceptions; 393 | the above requirements apply either way. 394 | 395 | 8. Termination. 396 | 397 | You may not propagate or modify a covered work except as expressly 398 | provided under this License. Any attempt otherwise to propagate or 399 | modify it is void, and will automatically terminate your rights under 400 | this License (including any patent licenses granted under the third 401 | paragraph of section 11). 402 | 403 | However, if you cease all violation of this License, then your 404 | license from a particular copyright holder is reinstated (a) 405 | provisionally, unless and until the copyright holder explicitly and 406 | finally terminates your license, and (b) permanently, if the copyright 407 | holder fails to notify you of the violation by some reasonable means 408 | prior to 60 days after the cessation. 409 | 410 | Moreover, your license from a particular copyright holder is 411 | reinstated permanently if the copyright holder notifies you of the 412 | violation by some reasonable means, this is the first time you have 413 | received notice of violation of this License (for any work) from that 414 | copyright holder, and you cure the violation prior to 30 days after 415 | your receipt of the notice. 416 | 417 | Termination of your rights under this section does not terminate the 418 | licenses of parties who have received copies or rights from you under 419 | this License. If your rights have been terminated and not permanently 420 | reinstated, you do not qualify to receive new licenses for the same 421 | material under section 10. 422 | 423 | 9. Acceptance Not Required for Having Copies. 424 | 425 | You are not required to accept this License in order to receive or 426 | run a copy of the Program. Ancillary propagation of a covered work 427 | occurring solely as a consequence of using peer-to-peer transmission 428 | to receive a copy likewise does not require acceptance. However, 429 | nothing other than this License grants you permission to propagate or 430 | modify any covered work. These actions infringe copyright if you do 431 | not accept this License. Therefore, by modifying or propagating a 432 | covered work, you indicate your acceptance of this License to do so. 433 | 434 | 10. Automatic Licensing of Downstream Recipients. 435 | 436 | Each time you convey a covered work, the recipient automatically 437 | receives a license from the original licensors, to run, modify and 438 | propagate that work, subject to this License. You are not responsible 439 | for enforcing compliance by third parties with this License. 440 | 441 | An "entity transaction" is a transaction transferring control of an 442 | organization, or substantially all assets of one, or subdividing an 443 | organization, or merging organizations. If propagation of a covered 444 | work results from an entity transaction, each party to that 445 | transaction who receives a copy of the work also receives whatever 446 | licenses to the work the party's predecessor in interest had or could 447 | give under the previous paragraph, plus a right to possession of the 448 | Corresponding Source of the work from the predecessor in interest, if 449 | the predecessor has it or can get it with reasonable efforts. 450 | 451 | You may not impose any further restrictions on the exercise of the 452 | rights granted or affirmed under this License. For example, you may 453 | not impose a license fee, royalty, or other charge for exercise of 454 | rights granted under this License, and you may not initiate litigation 455 | (including a cross-claim or counterclaim in a lawsuit) alleging that 456 | any patent claim is infringed by making, using, selling, offering for 457 | sale, or importing the Program or any portion of it. 458 | 459 | 11. Patents. 460 | 461 | A "contributor" is a copyright holder who authorizes use under this 462 | License of the Program or a work on which the Program is based. The 463 | work thus licensed is called the contributor's "contributor version". 464 | 465 | A contributor's "essential patent claims" are all patent claims 466 | owned or controlled by the contributor, whether already acquired or 467 | hereafter acquired, that would be infringed by some manner, permitted 468 | by this License, of making, using, or selling its contributor version, 469 | but do not include claims that would be infringed only as a 470 | consequence of further modification of the contributor version. For 471 | purposes of this definition, "control" includes the right to grant 472 | patent sublicenses in a manner consistent with the requirements of 473 | this License. 474 | 475 | Each contributor grants you a non-exclusive, worldwide, royalty-free 476 | patent license under the contributor's essential patent claims, to 477 | make, use, sell, offer for sale, import and otherwise run, modify and 478 | propagate the contents of its contributor version. 479 | 480 | In the following three paragraphs, a "patent license" is any express 481 | agreement or commitment, however denominated, not to enforce a patent 482 | (such as an express permission to practice a patent or covenant not to 483 | sue for patent infringement). To "grant" such a patent license to a 484 | party means to make such an agreement or commitment not to enforce a 485 | patent against the party. 486 | 487 | If you convey a covered work, knowingly relying on a patent license, 488 | and the Corresponding Source of the work is not available for anyone 489 | to copy, free of charge and under the terms of this License, through a 490 | publicly available network server or other readily accessible means, 491 | then you must either (1) cause the Corresponding Source to be so 492 | available, or (2) arrange to deprive yourself of the benefit of the 493 | patent license for this particular work, or (3) arrange, in a manner 494 | consistent with the requirements of this License, to extend the patent 495 | license to downstream recipients. "Knowingly relying" means you have 496 | actual knowledge that, but for the patent license, your conveying the 497 | covered work in a country, or your recipient's use of the covered work 498 | in a country, would infringe one or more identifiable patents in that 499 | country that you have reason to believe are valid. 500 | 501 | If, pursuant to or in connection with a single transaction or 502 | arrangement, you convey, or propagate by procuring conveyance of, a 503 | covered work, and grant a patent license to some of the parties 504 | receiving the covered work authorizing them to use, propagate, modify 505 | or convey a specific copy of the covered work, then the patent license 506 | you grant is automatically extended to all recipients of the covered 507 | work and works based on it. 508 | 509 | A patent license is "discriminatory" if it does not include within 510 | the scope of its coverage, prohibits the exercise of, or is 511 | conditioned on the non-exercise of one or more of the rights that are 512 | specifically granted under this License. You may not convey a covered 513 | work if you are a party to an arrangement with a third party that is 514 | in the business of distributing software, under which you make payment 515 | to the third party based on the extent of your activity of conveying 516 | the work, and under which the third party grants, to any of the 517 | parties who would receive the covered work from you, a discriminatory 518 | patent license (a) in connection with copies of the covered work 519 | conveyed by you (or copies made from those copies), or (b) primarily 520 | for and in connection with specific products or compilations that 521 | contain the covered work, unless you entered into that arrangement, 522 | or that patent license was granted, prior to 28 March 2007. 523 | 524 | Nothing in this License shall be construed as excluding or limiting 525 | any implied license or other defenses to infringement that may 526 | otherwise be available to you under applicable patent law. 527 | 528 | 12. No Surrender of Others' Freedom. 529 | 530 | If conditions are imposed on you (whether by court order, agreement or 531 | otherwise) that contradict the conditions of this License, they do not 532 | excuse you from the conditions of this License. If you cannot convey a 533 | covered work so as to satisfy simultaneously your obligations under this 534 | License and any other pertinent obligations, then as a consequence you may 535 | not convey it at all. For example, if you agree to terms that obligate you 536 | to collect a royalty for further conveying from those to whom you convey 537 | the Program, the only way you could satisfy both those terms and this 538 | License would be to refrain entirely from conveying the Program. 539 | 540 | 13. Remote Network Interaction; Use with the GNU General Public License. 541 | 542 | Notwithstanding any other provision of this License, if you modify the 543 | Program, your modified version must prominently offer all users 544 | interacting with it remotely through a computer network (if your version 545 | supports such interaction) an opportunity to receive the Corresponding 546 | Source of your version by providing access to the Corresponding Source 547 | from a network server at no charge, through some standard or customary 548 | means of facilitating copying of software. This Corresponding Source 549 | shall include the Corresponding Source for any work covered by version 3 550 | of the GNU General Public License that is incorporated pursuant to the 551 | following paragraph. 552 | 553 | Notwithstanding any other provision of this License, you have 554 | permission to link or combine any covered work with a work licensed 555 | under version 3 of the GNU General Public License into a single 556 | combined work, and to convey the resulting work. The terms of this 557 | License will continue to apply to the part which is the covered work, 558 | but the work with which it is combined will remain governed by version 559 | 3 of the GNU General Public License. 560 | 561 | 14. Revised Versions of this License. 562 | 563 | The Free Software Foundation may publish revised and/or new versions of 564 | the GNU Affero General Public License from time to time. Such new versions 565 | will be similar in spirit to the present version, but may differ in detail to 566 | address new problems or concerns. 567 | 568 | Each version is given a distinguishing version number. If the 569 | Program specifies that a certain numbered version of the GNU Affero General 570 | Public License "or any later version" applies to it, you have the 571 | option of following the terms and conditions either of that numbered 572 | version or of any later version published by the Free Software 573 | Foundation. If the Program does not specify a version number of the 574 | GNU Affero General Public License, you may choose any version ever published 575 | by the Free Software Foundation. 576 | 577 | If the Program specifies that a proxy can decide which future 578 | versions of the GNU Affero General Public License can be used, that proxy's 579 | public statement of acceptance of a version permanently authorizes you 580 | to choose that version for the Program. 581 | 582 | Later license versions may give you additional or different 583 | permissions. However, no additional obligations are imposed on any 584 | author or copyright holder as a result of your choosing to follow a 585 | later version. 586 | 587 | 15. Disclaimer of Warranty. 588 | 589 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 590 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 591 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 592 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 593 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 594 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 595 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 596 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 597 | 598 | 16. Limitation of Liability. 599 | 600 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 601 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 602 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 603 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 604 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 605 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 606 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 607 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 608 | SUCH DAMAGES. 609 | 610 | 17. Interpretation of Sections 15 and 16. 611 | 612 | If the disclaimer of warranty and limitation of liability provided 613 | above cannot be given local legal effect according to their terms, 614 | reviewing courts shall apply local law that most closely approximates 615 | an absolute waiver of all civil liability in connection with the 616 | Program, unless a warranty or assumption of liability accompanies a 617 | copy of the Program in return for a fee. 618 | 619 | END OF TERMS AND CONDITIONS 620 | 621 | How to Apply These Terms to Your New Programs 622 | 623 | If you develop a new program, and you want it to be of the greatest 624 | possible use to the public, the best way to achieve this is to make it 625 | free software which everyone can redistribute and change under these terms. 626 | 627 | To do so, attach the following notices to the program. It is safest 628 | to attach them to the start of each source file to most effectively 629 | state the exclusion of warranty; and each file should have at least 630 | the "copyright" line and a pointer to where the full notice is found. 631 | 632 | 633 | Copyright (C) 634 | 635 | This program is free software: you can redistribute it and/or modify 636 | it under the terms of the GNU Affero General Public License as published 637 | by the Free Software Foundation, either version 3 of the License, or 638 | (at your option) any later version. 639 | 640 | This program is distributed in the hope that it will be useful, 641 | but WITHOUT ANY WARRANTY; without even the implied warranty of 642 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 643 | GNU Affero General Public License for more details. 644 | 645 | You should have received a copy of the GNU Affero General Public License 646 | along with this program. If not, see . 647 | 648 | Also add information on how to contact you by electronic and paper mail. 649 | 650 | If your software can interact with users remotely through a computer 651 | network, you should also make sure that it provides a way for users to 652 | get its source. For example, if your program is a web application, its 653 | interface could display a "Source" link that leads users to an archive 654 | of the code. There are many ways you could offer source, and different 655 | solutions will be better for different programs; see section 13 for the 656 | specific requirements. 657 | 658 | You should also get your employer (if you work as a programmer) or school, 659 | if any, to sign a "copyright disclaimer" for the program, if necessary. 660 | For more information on this, and how to apply and follow the GNU AGPL, see 661 | . 662 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Risikogebiete 2 | [![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](http://www.gnu.org/licenses/agpl-3.0) 3 | 4 | Lightweight Germany map containing **age dependent** incidence numbers for each region. Updates automatically approximatly every four hours. 5 | The data used to calculate the incidence is from the [Robert Koch Institute](https://npgeo-corona-npgeo-de.hub.arcgis.com/datasets/23b1ccb051f543a5b526021275c1c6e5_0/about) (new infections) and from [DESTATIS (Dataset 12411-0017)](https://www-genesis.destatis.de/genesis//online?operation=table&code=12411-0017&bypass=true&levelindex=0&levelid=1618480251047) (population by region). 6 | You can also download the processed data in json, csv or hdf5 format from the `assets/data` folder. 7 | 8 | - **Live Website: https://risikogebiete-deutschland.de/** 9 | 10 |
11 | Example picture 12 |
13 | -------------------------------------------------------------------------------- /assets/css/bootstrap/bootstrap-reboot.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Reboot v5.0.0-alpha2 (https://getbootstrap.com/) 3 | * Copyright 2011-2020 The Bootstrap Authors 4 | * Copyright 2011-2020 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) 7 | */ 8 | *, 9 | *::before, 10 | *::after { 11 | box-sizing: border-box; 12 | } 13 | 14 | body { 15 | margin: 0; 16 | font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; 17 | font-size: 1rem; 18 | font-weight: 400; 19 | line-height: 1.5; 20 | color: #212529; 21 | background-color: #fff; 22 | -webkit-text-size-adjust: 100%; 23 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0); 24 | } 25 | 26 | [tabindex="-1"]:focus:not(:focus-visible) { 27 | outline: 0 !important; 28 | } 29 | 30 | hr { 31 | margin: 1rem 0; 32 | color: inherit; 33 | background-color: currentColor; 34 | border: 0; 35 | opacity: 0.25; 36 | } 37 | 38 | hr:not([size]) { 39 | height: 1px; 40 | } 41 | 42 | h1, h2, h3, h4, h5, h6 { 43 | margin-top: 0; 44 | margin-bottom: 0.5rem; 45 | font-weight: 500; 46 | line-height: 1.2; 47 | } 48 | 49 | h1 { 50 | font-size: calc(1.375rem + 1.5vw); 51 | } 52 | 53 | @media (min-width: 1200px) { 54 | h1 { 55 | font-size: 2.5rem; 56 | } 57 | } 58 | 59 | h2 { 60 | font-size: calc(1.325rem + 0.9vw); 61 | } 62 | 63 | @media (min-width: 1200px) { 64 | h2 { 65 | font-size: 2rem; 66 | } 67 | } 68 | 69 | h3 { 70 | font-size: calc(1.3rem + 0.6vw); 71 | } 72 | 73 | @media (min-width: 1200px) { 74 | h3 { 75 | font-size: 1.75rem; 76 | } 77 | } 78 | 79 | h4 { 80 | font-size: calc(1.275rem + 0.3vw); 81 | } 82 | 83 | @media (min-width: 1200px) { 84 | h4 { 85 | font-size: 1.5rem; 86 | } 87 | } 88 | 89 | h5 { 90 | font-size: 1.25rem; 91 | } 92 | 93 | h6 { 94 | font-size: 1rem; 95 | } 96 | 97 | p { 98 | margin-top: 0; 99 | margin-bottom: 1rem; 100 | } 101 | 102 | abbr[title], 103 | abbr[data-original-title] { 104 | text-decoration: underline; 105 | -webkit-text-decoration: underline dotted; 106 | text-decoration: underline dotted; 107 | cursor: help; 108 | -webkit-text-decoration-skip-ink: none; 109 | text-decoration-skip-ink: none; 110 | } 111 | 112 | address { 113 | margin-bottom: 1rem; 114 | font-style: normal; 115 | line-height: inherit; 116 | } 117 | 118 | ol, 119 | ul { 120 | padding-left: 2rem; 121 | } 122 | 123 | ol, 124 | ul, 125 | dl { 126 | margin-top: 0; 127 | margin-bottom: 1rem; 128 | } 129 | 130 | ol ol, 131 | ul ul, 132 | ol ul, 133 | ul ol { 134 | margin-bottom: 0; 135 | } 136 | 137 | dt { 138 | font-weight: 700; 139 | } 140 | 141 | dd { 142 | margin-bottom: .5rem; 143 | margin-left: 0; 144 | } 145 | 146 | blockquote { 147 | margin: 0 0 1rem; 148 | } 149 | 150 | b, 151 | strong { 152 | font-weight: bolder; 153 | } 154 | 155 | small { 156 | font-size: 0.875em; 157 | } 158 | 159 | mark { 160 | padding: 0.2em; 161 | background-color: #fcf8e3; 162 | } 163 | 164 | sub, 165 | sup { 166 | position: relative; 167 | font-size: 0.75em; 168 | line-height: 0; 169 | vertical-align: baseline; 170 | } 171 | 172 | sub { 173 | bottom: -.25em; 174 | } 175 | 176 | sup { 177 | top: -.5em; 178 | } 179 | 180 | a { 181 | color: #0d6efd; 182 | text-decoration: underline; 183 | } 184 | 185 | a:hover { 186 | color: #024dbc; 187 | } 188 | 189 | a:not([href]):not([class]), a:not([href]):not([class]):hover { 190 | color: inherit; 191 | text-decoration: none; 192 | } 193 | 194 | pre, 195 | code, 196 | kbd, 197 | samp { 198 | font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; 199 | font-size: 1em; 200 | } 201 | 202 | pre { 203 | display: block; 204 | margin-top: 0; 205 | margin-bottom: 1rem; 206 | overflow: auto; 207 | font-size: 0.875em; 208 | -ms-overflow-style: scrollbar; 209 | } 210 | 211 | pre code { 212 | font-size: inherit; 213 | color: inherit; 214 | word-break: normal; 215 | } 216 | 217 | code { 218 | font-size: 0.875em; 219 | color: #d63384; 220 | word-wrap: break-word; 221 | } 222 | 223 | a > code { 224 | color: inherit; 225 | } 226 | 227 | kbd { 228 | padding: 0.2rem 0.4rem; 229 | font-size: 0.875em; 230 | color: #fff; 231 | background-color: #212529; 232 | border-radius: 0.2rem; 233 | } 234 | 235 | kbd kbd { 236 | padding: 0; 237 | font-size: 1em; 238 | font-weight: 700; 239 | } 240 | 241 | figure { 242 | margin: 0 0 1rem; 243 | } 244 | 245 | img, 246 | svg { 247 | vertical-align: middle; 248 | } 249 | 250 | table { 251 | caption-side: bottom; 252 | border-collapse: collapse; 253 | } 254 | 255 | caption { 256 | padding-top: 0.5rem; 257 | padding-bottom: 0.5rem; 258 | color: #6c757d; 259 | text-align: left; 260 | } 261 | 262 | th { 263 | text-align: inherit; 264 | text-align: -webkit-match-parent; 265 | } 266 | 267 | thead, 268 | tbody, 269 | tfoot, 270 | tr, 271 | td, 272 | th { 273 | border-color: inherit; 274 | border-style: solid; 275 | border-width: 0; 276 | } 277 | 278 | label { 279 | display: inline-block; 280 | } 281 | 282 | button { 283 | border-radius: 0; 284 | } 285 | 286 | button:focus { 287 | outline: 1px dotted; 288 | outline: 5px auto -webkit-focus-ring-color; 289 | } 290 | 291 | input, 292 | button, 293 | select, 294 | optgroup, 295 | textarea { 296 | margin: 0; 297 | font-family: inherit; 298 | font-size: inherit; 299 | line-height: inherit; 300 | } 301 | 302 | button, 303 | input { 304 | overflow: visible; 305 | } 306 | 307 | button, 308 | select { 309 | text-transform: none; 310 | } 311 | 312 | [role="button"] { 313 | cursor: pointer; 314 | } 315 | 316 | select { 317 | word-wrap: normal; 318 | } 319 | 320 | [list]::-webkit-calendar-picker-indicator { 321 | display: none; 322 | } 323 | 324 | button, 325 | [type="button"], 326 | [type="reset"], 327 | [type="submit"] { 328 | -webkit-appearance: button; 329 | } 330 | 331 | button:not(:disabled), 332 | [type="button"]:not(:disabled), 333 | [type="reset"]:not(:disabled), 334 | [type="submit"]:not(:disabled) { 335 | cursor: pointer; 336 | } 337 | 338 | ::-moz-focus-inner { 339 | padding: 0; 340 | border-style: none; 341 | } 342 | 343 | textarea { 344 | resize: vertical; 345 | } 346 | 347 | fieldset { 348 | min-width: 0; 349 | padding: 0; 350 | margin: 0; 351 | border: 0; 352 | } 353 | 354 | legend { 355 | float: left; 356 | width: 100%; 357 | padding: 0; 358 | margin-bottom: 0.5rem; 359 | font-size: calc(1.275rem + 0.3vw); 360 | line-height: inherit; 361 | white-space: normal; 362 | } 363 | 364 | @media (min-width: 1200px) { 365 | legend { 366 | font-size: 1.5rem; 367 | } 368 | } 369 | 370 | legend + * { 371 | clear: left; 372 | } 373 | 374 | ::-webkit-datetime-edit-fields-wrapper, 375 | ::-webkit-datetime-edit-text, 376 | ::-webkit-datetime-edit-minute, 377 | ::-webkit-datetime-edit-hour-field, 378 | ::-webkit-datetime-edit-day-field, 379 | ::-webkit-datetime-edit-month-field, 380 | ::-webkit-datetime-edit-year-field { 381 | padding: 0; 382 | } 383 | 384 | ::-webkit-inner-spin-button { 385 | height: auto; 386 | } 387 | 388 | [type="search"] { 389 | outline-offset: -2px; 390 | -webkit-appearance: textfield; 391 | } 392 | 393 | ::-webkit-search-decoration { 394 | -webkit-appearance: none; 395 | } 396 | 397 | ::-webkit-color-swatch-wrapper { 398 | padding: 0; 399 | } 400 | 401 | ::-webkit-file-upload-button { 402 | font: inherit; 403 | -webkit-appearance: button; 404 | } 405 | 406 | output { 407 | display: inline-block; 408 | } 409 | 410 | iframe { 411 | border: 0; 412 | } 413 | 414 | summary { 415 | display: list-item; 416 | cursor: pointer; 417 | } 418 | 419 | progress { 420 | vertical-align: baseline; 421 | } 422 | 423 | [hidden] { 424 | display: none !important; 425 | } 426 | /*# sourceMappingURL=bootstrap-reboot.css.map */ -------------------------------------------------------------------------------- /assets/css/bootstrap/bootstrap-reboot.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Reboot v5.0.0-alpha2 (https://getbootstrap.com/) 3 | * Copyright 2011-2020 The Bootstrap Authors 4 | * Copyright 2011-2020 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) 7 | */*,::after,::before{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#024dbc}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em;-ms-overflow-style:scrollbar}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit;white-space:normal}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important} 8 | /*# sourceMappingURL=bootstrap-reboot.min.css.map */ -------------------------------------------------------------------------------- /assets/css/bootstrap/bootstrap-utilities.min.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["../../scss/bootstrap-utilities.scss","../../scss/mixins/_utilities.scss","../../scss/mixins/_breakpoints.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap Utilities v5.0.0-alpha2 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n// Configuration\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"utilities\";\n\n\n// Utilities\n\n@import \"utilities/api\";\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (eg. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n @if $value != null {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} -------------------------------------------------------------------------------- /assets/css/main.css: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Sebastian B. Mohr 3 | * @Date: 2020-10-15 13:30:35 4 | * @Last Modified by: Sebastian Mohr 5 | * @Last Modified time: 2021-11-05 20:55:27 6 | */ 7 | html, body { 8 | font-family: "Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif; 9 | font-size: 12px; 10 | overflow: hidden; 11 | } 12 | 13 | 14 | h5{ 15 | font-weight: bold; 16 | font-size: 12px; 17 | margin-left: 3px; 18 | margin-right: 3px; 19 | margin-bottom: 3px; 20 | margin-top: 3px; 21 | padding:0; 22 | color: #7762b5; 23 | } 24 | 25 | input { 26 | margin-right: 2px; 27 | } 28 | 29 | #chartdiv { 30 | height: 100vh; 31 | } 32 | #inputs{ 33 | position: fixed; 34 | display: grid; 35 | top: 10px; 36 | left: 10px; 37 | padding: 5px; 38 | background-color: rgba(0,0,0,0.1); 39 | border-radius: 5px; 40 | } 41 | 42 | .color-box { 43 | width: 15px; 44 | height: 15px; 45 | display: inline-block; 46 | background-color: #ccc; 47 | } 48 | 49 | #legend{ 50 | position: fixed; 51 | display: grid; 52 | bottom: 10px; 53 | left: 10px; 54 | padding: 5px; 55 | background-color: rgba(0,0,0,0.1); 56 | border-radius: 5px; 57 | } 58 | 59 | table { 60 | border-collapse: collapse; 61 | } 62 | td:first-child, th:first-child { 63 | border-left: none; 64 | } 65 | tr:last-child { 66 | border-bottom: none; 67 | } 68 | 69 | .data_tooltip { 70 | color: #212529; 71 | position: absolute; 72 | background-color: white; 73 | border: solid; 74 | border-width: 1px; 75 | border-radius: 5px; 76 | padding: 10px; 77 | pointer-events: none; 78 | background-color: rgba(200,200,200,0.8); 79 | font-size: 10px; 80 | } 81 | 82 | .data_tooltip h5{ 83 | color: #212529; 84 | } 85 | 86 | /*-------------------------------------------------------------- 87 | # Accordion 88 | --------------------------------------------------------------*/ 89 | 90 | /* Style the buttons that are used to open and close the accordion panel */ 91 | .accordion { 92 | color: #6f7180; 93 | cursor: pointer; 94 | width: 100%; 95 | text-align: left; 96 | border: none; 97 | outline: none; 98 | transition: 0.4s; 99 | display: flex; 100 | justify-content: space-between; 101 | } 102 | 103 | .accordion.active{ 104 | color: #7762b5; 105 | } 106 | .accordion>i::before{ 107 | content: "\f067"; 108 | position: relative; 109 | } 110 | .accordion>i:before { 111 | position: relative; 112 | top: 50%; 113 | transform: translateY(-50%); 114 | display: block; 115 | } 116 | 117 | .accordion.active>i::before{ 118 | content: "\f068"; 119 | } 120 | 121 | /* Style the accordion panel. Note: hidden by default */ 122 | .panel { 123 | display: block; 124 | overflow: hidden; 125 | } 126 | 127 | 128 | ul { 129 | padding: 0px; 130 | margin: 0px; 131 | } 132 | 133 | ul > li 134 | { 135 | list-style-type: none; 136 | } 137 | 138 | #loader { 139 | border: 12px solid #f3f3f3; 140 | border-radius: 50%; 141 | border-top: 12px solid #444444; 142 | width: 70px; 143 | height: 70px; 144 | animation: spin 1s linear infinite; 145 | } 146 | 147 | @keyframes spin { 148 | 100% { 149 | transform: rotate(360deg); 150 | } 151 | } 152 | 153 | .center { 154 | position: absolute; 155 | top: 0; 156 | bottom: 0; 157 | left: 0; 158 | right: 0; 159 | margin: auto; 160 | } 161 | 162 | #legend_subtitle{ 163 | font-size: 9px; color: #666; font-weight: normal; 164 | } 165 | 166 | @media (prefers-color-scheme: dark) { 167 | body { 168 | background-color: #1c1c1c; 169 | color: gray; 170 | } 171 | 172 | .highcharts-background{ 173 | background-color: #1c1c1c; 174 | fill: #1c1c1c; 175 | } 176 | 177 | .highcharts-plot-background { 178 | fill: #1c1c1c; 179 | } 180 | .highcharts-plot-border { 181 | stroke: #1c1c1c; 182 | } 183 | .highcharts-legend-item { 184 | color: gray !important; 185 | fill: gray !important; 186 | } 187 | .legend_title{ 188 | fill: white; 189 | } 190 | .legend_subtitle{ 191 | fill: gray; 192 | color: gray; 193 | } 194 | 195 | } 196 | 197 | .grid-container { 198 | display: grid; 199 | grid-template-columns: min-content min-content; 200 | grid-gap: 0px 10px; 201 | padding: 10px; 202 | } 203 | #color-bar-texts{ 204 | display: flex; 205 | flex-direction: column; 206 | justify-content: space-between; 207 | height: 100%; 208 | padding: 1.5px; 209 | } 210 | #color-bar-texts div{ 211 | text-align: right; 212 | white-space:nowrap; 213 | } -------------------------------------------------------------------------------- /assets/data/array_index.json: -------------------------------------------------------------------------------- 1 | {"date": {"1739145600": 0, "1739232000": 1, "1739318400": 2, "1739404800": 3, "1739491200": 4, "1739577600": 5, "1739664000": 6, "1739750400": 7, "1739836800": 8, "1739923200": 9, "1740009600": 10, "1740096000": 11, "1740182400": 12, "1740268800": 13, "1740355200": 14, "1740441600": 15, "1740528000": 16, "1740614400": 17, "1740700800": 18, "1740787200": 19, "1740873600": 20, "1740960000": 21, "1741046400": 22, "1741132800": 23, "1741219200": 24, "1741305600": 25, "1741392000": 26, "1741478400": 27, "1741564800": 28, "1741651200": 29, "1741737600": 30, "1741824000": 31, "1741910400": 32, "1741996800": 33, "1742083200": 34, "1742169600": 35, "1742256000": 36, "1742342400": 37, "1742428800": 38, "1742515200": 39, "1742601600": 40, "1742688000": 41, "1742774400": 42, "1742860800": 43, "1742947200": 44, "1743033600": 45, "1743120000": 46, "1743206400": 47, "1743292800": 48, "1743379200": 49, "1743465600": 50, "1743552000": 51, "1743638400": 52, "1743724800": 53, "1743811200": 54, "1743897600": 55, "1743984000": 56, "1744070400": 57, "1744156800": 58, "1744243200": 59, "1744329600": 60, "1744416000": 61, "1744502400": 62, "1744588800": 63, "1744675200": 64, "1744761600": 65, "1744848000": 66, "1744934400": 67, "1745020800": 68, "1745107200": 69, "1745193600": 70, "1745280000": 71, "1745366400": 72, "1745452800": 73, "1745539200": 74, "1745625600": 75, "1745712000": 76, "1745798400": 77, "1745884800": 78, "1745971200": 79, "1746057600": 80, "1746144000": 81, "1746230400": 82, "1746316800": 83, "1746403200": 84, "1746489600": 85, "1746576000": 86, "1746662400": 87, "1746748800": 88, "1746835200": 89, "1746921600": 90, "1747008000": 91, "1747094400": 92, "1747180800": 93, "1747267200": 94, "1747353600": 95, "1747440000": 96, "1747526400": 97, "1747612800": 98, "1747699200": 99, "1747785600": 100, "1747872000": 101, "1747958400": 102, "1748044800": 103, "1748131200": 104, "1748217600": 105, "1748304000": 106, "1748390400": 107, "1748476800": 108, "1748563200": 109}, "IdLandkreis": {"1001": 0, "1002": 1, "1003": 2, "1004": 3, "1051": 4, "1053": 5, "1054": 6, "1055": 7, "1056": 8, "1057": 9, "1058": 10, "1059": 11, "1060": 12, "1061": 13, "1062": 14, "2000": 15, "3101": 16, "3102": 17, "3103": 18, "3151": 19, "3153": 20, "3154": 21, "3155": 22, "3157": 23, "3158": 24, "3159": 25, "3241": 26, "3251": 27, "3252": 28, "3254": 29, "3255": 30, "3256": 31, "3257": 32, "3351": 33, "3352": 34, "3353": 35, "3354": 36, "3355": 37, "3356": 38, "3357": 39, "3358": 40, "3359": 41, "3360": 42, "3361": 43, "3401": 44, "3402": 45, "3403": 46, "3404": 47, "3405": 48, "3451": 49, "3452": 50, "3453": 51, "3454": 52, "3455": 53, "3456": 54, "3457": 55, "3458": 56, "3459": 57, "3460": 58, "3461": 59, "3462": 60, "4011": 61, "4012": 62, "5111": 63, "5112": 64, "5113": 65, "5114": 66, "5116": 67, "5117": 68, "5119": 69, "5120": 70, "5122": 71, "5124": 72, "5154": 73, "5158": 74, "5162": 75, "5166": 76, "5170": 77, "5314": 78, "5315": 79, "5316": 80, "5334": 81, "5358": 82, "5362": 83, "5366": 84, "5370": 85, "5374": 86, "5378": 87, "5382": 88, "5512": 89, "5513": 90, "5515": 91, "5554": 92, "5558": 93, "5562": 94, "5566": 95, "5570": 96, "5711": 97, "5754": 98, "5758": 99, "5762": 100, "5766": 101, "5770": 102, "5774": 103, "5911": 104, "5913": 105, "5914": 106, "5915": 107, "5916": 108, "5954": 109, "5958": 110, "5962": 111, "5966": 112, "5970": 113, "5974": 114, "5978": 115, "6411": 116, "6412": 117, "6413": 118, "6414": 119, "6431": 120, "6432": 121, "6433": 122, "6434": 123, "6435": 124, "6436": 125, "6437": 126, "6438": 127, "6439": 128, "6440": 129, "6531": 130, "6532": 131, "6533": 132, "6534": 133, "6535": 134, "6611": 135, "6631": 136, "6632": 137, "6633": 138, "6634": 139, "6635": 140, "6636": 141, "7111": 142, "7131": 143, "7132": 144, "7133": 145, "7134": 146, "7135": 147, "7137": 148, "7138": 149, "7140": 150, "7141": 151, "7143": 152, "7211": 153, "7231": 154, "7232": 155, "7233": 156, "7235": 157, "7311": 158, "7312": 159, "7313": 160, "7314": 161, "7315": 162, "7316": 163, "7317": 164, "7318": 165, "7319": 166, "7320": 167, "7331": 168, "7332": 169, "7333": 170, "7334": 171, "7335": 172, "7336": 173, "7337": 174, "7338": 175, "7339": 176, "7340": 177, "8111": 178, "8115": 179, "8116": 180, "8117": 181, "8118": 182, "8119": 183, "8121": 184, "8125": 185, "8126": 186, "8127": 187, "8128": 188, "8135": 189, "8136": 190, "8211": 191, "8212": 192, "8215": 193, "8216": 194, "8221": 195, "8222": 196, "8225": 197, "8226": 198, "8231": 199, "8235": 200, "8236": 201, "8237": 202, "8311": 203, "8315": 204, "8316": 205, "8317": 206, "8325": 207, "8326": 208, "8327": 209, "8335": 210, "8336": 211, "8337": 212, "8415": 213, "8416": 214, "8417": 215, "8421": 216, "8425": 217, "8426": 218, "8435": 219, "8436": 220, "8437": 221, "9161": 222, "9162": 223, "9163": 224, "9171": 225, "9172": 226, "9173": 227, "9174": 228, "9175": 229, "9176": 230, "9177": 231, "9178": 232, "9179": 233, "9180": 234, "9181": 235, "9182": 236, "9183": 237, "9184": 238, "9185": 239, "9186": 240, "9187": 241, "9188": 242, "9189": 243, "9190": 244, "9261": 245, "9262": 246, "9263": 247, "9271": 248, "9272": 249, "9273": 250, "9274": 251, "9275": 252, "9276": 253, "9277": 254, "9278": 255, "9279": 256, "9361": 257, "9362": 258, "9363": 259, "9371": 260, "9372": 261, "9373": 262, "9374": 263, "9375": 264, "9376": 265, "9377": 266, "9461": 267, "9462": 268, "9463": 269, "9464": 270, "9471": 271, "9472": 272, "9473": 273, "9474": 274, "9475": 275, "9476": 276, "9477": 277, "9478": 278, "9479": 279, "9561": 280, "9562": 281, "9563": 282, "9564": 283, "9565": 284, "9571": 285, "9572": 286, "9573": 287, "9574": 288, "9575": 289, "9576": 290, "9577": 291, "9661": 292, "9662": 293, "9663": 294, "9671": 295, "9672": 296, "9673": 297, "9674": 298, "9675": 299, "9676": 300, "9677": 301, "9678": 302, "9679": 303, "9761": 304, "9762": 305, "9763": 306, "9764": 307, "9771": 308, "9772": 309, "9773": 310, "9774": 311, "9775": 312, "9776": 313, "9777": 314, "9778": 315, "9779": 316, "9780": 317, "10041": 318, "10042": 319, "10043": 320, "10044": 321, "10045": 322, "10046": 323, "11000": 324, "12051": 325, "12052": 326, "12053": 327, "12054": 328, "12060": 329, "12061": 330, "12062": 331, "12063": 332, "12064": 333, "12065": 334, "12066": 335, "12067": 336, "12068": 337, "12069": 338, "12070": 339, "12071": 340, "12072": 341, "12073": 342, "13003": 343, "13004": 344, "13071": 345, "13072": 346, "13073": 347, "13074": 348, "13075": 349, "13076": 350, "14511": 351, "14521": 352, "14522": 353, "14523": 354, "14524": 355, "14612": 356, "14625": 357, "14626": 358, "14627": 359, "14628": 360, "14713": 361, "14729": 362, "14730": 363, "15001": 364, "15002": 365, "15003": 366, "15081": 367, "15082": 368, "15083": 369, "15084": 370, "15085": 371, "15086": 372, "15087": 373, "15088": 374, "15089": 375, "15090": 376, "15091": 377, "16051": 378, "16052": 379, "16053": 380, "16054": 381, "16055": 382, "16061": 383, "16062": 384, "16063": 385, "16064": 386, "16065": 387, "16066": 388, "16067": 389, "16068": 390, "16069": 391, "16070": 392, "16071": 393, "16072": 394, "16073": 395, "16074": 396, "16075": 397, "16076": 398, "16077": 399}, "Altersgruppe": {"A00-A04": 0, "A05-A14": 1, "A15-A34": 2, "A35-A59": 3, "A60-A79": 4, "A80+": 5, "total": 6, "unbekannt": 7}} -------------------------------------------------------------------------------- /assets/data/minified_landkreise.geo.json.qmd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | dataset 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 0 17 | 0 18 | 19 | 20 | 21 | 22 | false 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /assets/data/population_landkreise.json: -------------------------------------------------------------------------------- 1 | {"1001":89504,"1002":247548,"1003":217198,"1004":79487,"1051":133210,"1053":197264,"1054":165507,"1055":200581,"1056":314391,"1057":128647,"1058":272775,"1059":200025,"1060":276032,"1061":131347,"1062":243196,"2000":1841179,"3101":248292,"3102":104948,"3103":124151,"3151":175920,"3153":137014,"3154":91307,"3155":132765,"3157":133965,"3158":119960,"3159":328074,"3241":1157624,"3251":216886,"3252":148559,"3254":276594,"3255":70975,"3256":121386,"3257":157781,"3351":178936,"3352":198213,"3353":252776,"3354":48424,"3355":183372,"3356":113517,"3357":163455,"3358":139755,"3359":203102,"3360":92572,"3361":136792,"3401":77607,"3402":50195,"3403":168210,"3404":164748,"3405":76278,"3451":124071,"3452":189848,"3453":169348,"3454":325657,"3455":98460,"3456":136511,"3457":169809,"3458":130144,"3459":357343,"3460":141598,"3461":88624,"3462":56882,"4011":569352,"4012":113634,"5111":619294,"5112":498590,"5113":583109,"5114":227020,"5116":261454,"5117":170880,"5119":210829,"5120":110994,"5122":159360,"5124":354382,"5154":310974,"5158":485684,"5162":451007,"5166":298935,"5170":459809,"5314":327258,"5315":1085664,"5316":163838,"5334":555465,"5358":263722,"5362":470089,"5366":192840,"5370":254322,"5374":272471,"5378":283455,"5382":599780,"5512":117383,"5513":260654,"5515":314319,"5554":370676,"5558":219929,"5562":615261,"5566":447614,"5570":277783,"5711":333786,"5754":364083,"5758":250783,"5762":140667,"5766":348391,"5770":310710,"5774":306890,"5911":364628,"5913":587010,"5914":188814,"5915":179111,"5916":156374,"5954":324296,"5958":260475,"5962":412120,"5966":134775,"5970":278210,"5974":301902,"5978":394782,"6411":159207,"6412":753056,"6413":128744,"6414":278342,"6431":269694,"6432":297399,"6433":274526,"6434":236564,"6435":418950,"6436":237735,"6437":96798,"6438":354092,"6439":187157,"6440":306460,"6531":268876,"6532":253777,"6533":172083,"6534":246648,"6535":105878,"6611":201585,"6631":222584,"6632":120829,"6633":236633,"6634":180222,"6635":156953,"6636":101017,"7111":114024,"7131":129727,"7132":128705,"7133":158080,"7134":80720,"7135":61587,"7137":214259,"7138":181941,"7140":102937,"7141":122308,"7143":201597,"7211":110636,"7231":112262,"7232":98561,"7233":60603,"7235":148945,"7311":48561,"7312":99845,"7313":46677,"7314":171061,"7315":217118,"7316":53148,"7317":40403,"7318":50378,"7319":83330,"7320":34209,"7331":129244,"7332":132660,"7333":75101,"7334":129075,"7335":106057,"7336":70526,"7337":110356,"7338":154201,"7339":210889,"7340":95113,"8111":634830,"8115":391640,"8116":533859,"8117":257253,"8118":543984,"8119":426158,"8121":125960,"8125":343068,"8126":112010,"8127":195861,"8128":132321,"8135":132472,"8136":314002,"8211":55123,"8212":313092,"8215":444232,"8216":231018,"8221":160355,"8222":309370,"8225":143535,"8226":547625,"8231":125542,"8235":158397,"8236":198905,"8237":117935,"8311":230241,"8315":262795,"8316":165383,"8317":429479,"8325":139455,"8326":212381,"8327":140152,"8335":285325,"8336":228639,"8337":170619,"8415":286748,"8416":227331,"8417":188935,"8421":126329,"8425":196047,"8426":199742,"8435":216227,"8436":284285,"8437":130873,"9161":136981,"9162":1471508,"9163":63324,"9171":111210,"9172":105722,"9173":127227,"9174":153884,"9175":142142,"9176":132341,"9177":137660,"9178":179116,"9179":219320,"9180":88467,"9181":120071,"9182":99726,"9183":115250,"9184":348871,"9185":96680,"9186":127151,"9187":260983,"9188":136092,"9189":177089,"9190":135348,"9261":72404,"9262":52469,"9263":47794,"9271":119326,"9272":78355,"9273":122258,"9274":158698,"9275":192043,"9276":77656,"9277":120659,"9278":100649,"9279":96217,"9361":41970,"9362":152610,"9363":42520,"9371":103109,"9372":127882,"9373":133561,"9374":94352,"9375":193572,"9376":147189,"9377":72504,"9461":77592,"9462":74657,"9463":41249,"9464":45930,"9471":147086,"9472":103656,"9473":86906,"9474":116099,"9475":95311,"9476":67135,"9477":71845,"9478":66838,"9479":73178,"9561":41847,"9562":111962,"9563":127748,"9564":518365,"9565":40792,"9571":183949,"9572":136271,"9573":117387,"9574":170365,"9575":100364,"9576":126958,"9577":94393,"9661":70527,"9662":54032,"9663":127880,"9671":174208,"9672":103218,"9673":79690,"9674":84599,"9675":90909,"9676":128756,"9677":126365,"9678":115106,"9679":161834,"9761":295135,"9762":43893,"9763":68907,"9764":43837,"9771":133596,"9772":251534,"9773":96021,"9774":125747,"9775":174200,"9776":81669,"9777":140316,"9778":144041,"9779":133496,"9780":155362,"10041":329708,"10042":103366,"10043":132206,"10044":195201,"10045":142631,"10046":87397,"11000":3644826,"12051":72124,"12052":100219,"12053":57873,"12054":178089,"12060":182760,"12061":169067,"12062":102638,"12063":161909,"12064":194328,"12065":211249,"12066":110476,"12067":178658,"12068":99078,"12069":214664,"12070":76508,"12071":114429,"12072":168296,"12073":119552,"13003":208886,"13004":95818,"13071":259130,"13072":215113,"13073":224684,"13074":156729,"13075":236697,"13076":212618,"14511":247237,"14521":337696,"14522":306185,"14523":227796,"14524":317531,"14612":554649,"14625":300880,"14626":254894,"14627":242165,"14628":245611,"14713":587857,"14729":257763,"14730":197673,"15001":81237,"15002":239257,"15003":238697,"15081":83765,"15082":159854,"15083":171734,"15084":180190,"15085":214446,"15086":89928,"15087":136249,"15088":184582,"15089":190560,"15090":111982,"15091":125840,"16051":213699,"16052":94152,"16053":111407,"16054":34835,"16055":65090,"16056":42370,"16061":100380,"16062":83822,"16063":123025,"16064":102912,"16065":75009,"16066":122347,"16067":135452,"16068":69655,"16069":63553,"16070":108742,"16071":81947,"16072":56196,"16073":106356,"16074":83051,"16075":80868,"16076":98159,"16077":90118} -------------------------------------------------------------------------------- /assets/data/population_rki_age_groups.csv: -------------------------------------------------------------------------------- 1 | ags,Region,NUTS3,A00-A04,A05-A14,A15-A34,A35-A59,A60-A79,A80+ 2 | ,Deutschland,de,3961376.0,7429883.0,19117865.0,28919134.0,18057318.0,5681135.0 3 | 1,Schleswig-Holstein (BL),def,129237.0,258945.0,632377.0,1016095.0,659461.0,207658.0 4 | 1001,"Flensburg, Stadt",def01,4399.0,7573.0,27036.0,27783.0,17810.0,5563.0 5 | 1002,"Kiel, Stadt",def02,11333.0,19424.0,76854.0,79062.0,45970.0,14151.0 6 | 1003,"Lübeck, Stadt",def03,9419.0,17818.0,52653.0,72503.0,47637.0,16500.0 7 | 1004,"Neumünster, Stadt",def04,3613.0,7239.0,19242.0,26839.0,17452.0,5811.0 8 | 1051,Dithmarschen,def05,5371.0,11593.0,27964.0,45170.0,33194.0,9901.0 9 | 1053,Herzogtum Lauenburg,def06,9511.0,18856.0,39697.0,71949.0,43504.0,14502.0 10 | 1054,Nordfriesland,def07,6885.0,13983.0,35866.0,56915.0,40232.0,12070.0 11 | 1055,Ostholstein,def08,7319.0,16112.0,36449.0,69627.0,54288.0,16744.0 12 | 1056,Pinneberg,def09,15027.0,29695.0,65688.0,115041.0,68482.0,22170.0 13 | 1057,Plön,def0a,5328.0,11328.0,23498.0,45203.0,32975.0,10354.0 14 | 1058,Rendsburg-Eckernförde,def0b,12070.0,25441.0,54635.0,97822.0,64745.0,19385.0 15 | 1059,Schleswig-Flensburg,def0c,9257.0,18635.0,40895.0,69967.0,48000.0,14402.0 16 | 1060,Segeberg,def0d,12765.0,26002.0,58058.0,101333.0,60727.0,18290.0 17 | 1061,Steinburg,def0e,5697.0,11548.0,27369.0,46997.0,30089.0,9313.0 18 | 1062,Stormarn,def0f,11243.0,23698.0,46473.0,89884.0,54356.0,18502.0 19 | 2,Hamburg (BL),de6,99947.0,164687.0,494366.0,654050.0,326494.0,107709.0 20 | 3,Niedersachsen (BL),de9,374967.0,722242.0,1826037.0,2757531.0,1758463.0,554368.0 21 | 31,Statistische Region Braunschweig (R),de91,73095.0,136604.0,367456.0,542858.0,357328.0,117588.0 22 | 3101,"Braunschweig, Stadt",de911,11212.0,19461.0,68786.0,82632.0,49872.0,17443.0 23 | 3102,"Salzgitter, Stadt",de912,5727.0,10189.0,23669.0,33815.0,23204.0,7687.0 24 | 3103,"Wolfsburg, Stadt",de913,6605.0,11008.0,29020.0,42193.0,25910.0,9635.0 25 | 3151,Gifhorn,de914,9311.0,17128.0,37609.0,63995.0,37856.0,10624.0 26 | 3153,Goslar,de916,4935.0,10024.0,28691.0,45175.0,35145.0,12322.0 27 | 3154,Helmstedt,de917,4219.0,7850.0,18456.0,32386.0,21443.0,6943.0 28 | 3155,Northeim,de918,5405.0,10956.0,26279.0,45402.0,33018.0,11225.0 29 | 3157,Peine,de91a,6658.0,12969.0,28310.0,48660.0,29001.0,9203.0 30 | 3158,Wolfenbüttel,de91b,5160.0,10064.0,24692.0,42362.0,28506.0,8838.0 31 | 3159,Göttingen,de91c,13863.0,26955.0,81944.0,106238.0,73373.0,23668.0 32 | 32,Statistische Region Hannover (R),de92,99322.0,190524.0,489912.0,741532.0,469477.0,157471.0 33 | 3241,Region Hannover,de929,55818.0,104174.0,279960.0,398418.0,238683.0,80062.0 34 | 3251,Diepholz,de922,9915.0,19867.0,45489.0,77329.0,49078.0,15411.0 35 | 3252,Hameln-Pyrmont,de923,6537.0,12879.0,29863.0,50422.0,36036.0,12812.0 36 | 3254,Hildesheim,de925,11886.0,23307.0,62084.0,94392.0,62952.0,21196.0 37 | 3255,Holzminden,de926,2885.0,5720.0,14423.0,23397.0,17712.0,6321.0 38 | 3256,Nienburg (Weser),de927,5522.0,11210.0,26066.0,42260.0,27497.0,8835.0 39 | 3257,Schaumburg,de928,6759.0,13367.0,32027.0,55314.0,37519.0,12834.0 40 | 33,Statistische Region Lüneburg (R),de93,79767.0,158833.0,362697.0,602621.0,393315.0,119215.0 41 | 3351,Celle,de931,8469.0,16919.0,38066.0,60811.0,41817.0,12929.0 42 | 3352,Cuxhaven,de932,8580.0,17614.0,38789.0,67815.0,50096.0,15144.0 43 | 3353,Harburg,de933,12188.0,24198.0,50774.0,93315.0,56616.0,17340.0 44 | 3354,Lüchow-Dannenberg,de934,1875.0,4029.0,8803.0,16179.0,13310.0,4216.0 45 | 3355,Lüneburg,de935,8614.0,17395.0,43029.0,65858.0,38028.0,11215.0 46 | 3356,Osterholz,de936,5327.0,10442.0,21931.0,41192.0,27174.0,7862.0 47 | 3357,Rotenburg (Wümme),de937,7510.0,14971.0,36921.0,57882.0,36020.0,10478.0 48 | 3358,Heidekreis,de938,6503.0,12957.0,31331.0,48329.0,31388.0,10165.0 49 | 3359,Stade,de939,10179.0,19478.0,45521.0,71739.0,44626.0,12969.0 50 | 3360,Uelzen,de93a,3644.0,7676.0,18625.0,31806.0,22845.0,7793.0 51 | 3361,Verden,de93b,6878.0,13154.0,28907.0,47695.0,31395.0,9104.0 52 | 34,Statistische Region Weser-Ems (R),de94,122783.0,236281.0,605972.0,870520.0,538343.0,160094.0 53 | 3401,"Delmenhorst, Stadt",de941,4223.0,7166.0,17987.0,26079.0,17032.0,5072.0 54 | 3402,"Emden, Stadt",de942,2394.0,4447.0,12689.0,16541.0,10626.0,3216.0 55 | 3403,"Oldenburg (Oldenburg), Stadt",de943,7553.0,14070.0,48935.0,55940.0,32838.0,9741.0 56 | 3404,"Osnabrück, Stadt",de944,7434.0,13346.0,51939.0,52270.0,30014.0,10248.0 57 | 3405,"Wilhelmshaven, Stadt",de945,3290.0,5940.0,18788.0,23244.0,18471.0,6356.0 58 | 3451,Ammerland,de946,5884.0,11657.0,26151.0,43596.0,28859.0,8712.0 59 | 3452,Aurich,de947,8360.0,16935.0,40921.0,65471.0,45999.0,12008.0 60 | 3453,Cloppenburg,de948,9744.0,18429.0,44333.0,59024.0,30392.0,8760.0 61 | 3454,Emsland,de949,16504.0,31862.0,78692.0,114818.0,66804.0,18274.0 62 | 3455,Friesland,de94a,4303.0,8381.0,19679.0,33435.0,25066.0,7840.0 63 | 3456,Grafschaft Bentheim,de94b,6730.0,13570.0,31078.0,48030.0,28991.0,8763.0 64 | 3457,Leer,de94c,8193.0,15855.0,38974.0,59318.0,38002.0,10414.0 65 | 3458,"Oldenburg, Landkreis",de94d,6132.0,12195.0,27626.0,47601.0,28779.0,8557.0 66 | 3459,"Osnabrück, Landkreis",de94e,17874.0,34571.0,79713.0,125577.0,75943.0,24402.0 67 | 3460,Vechta,de94f,7989.0,15154.0,37759.0,49646.0,25069.0,7197.0 68 | 3461,Wesermarsch,de94g,3825.0,7635.0,18922.0,30688.0,21077.0,6436.0 69 | 3462,Wittmund,de94h,2351.0,5068.0,11786.0,19242.0,14381.0,4098.0 70 | 4,Bremen (BL),de5,34028.0,59215.0,174852.0,226913.0,140672.0,45522.0 71 | 4011,"Bremen, Stadt",de50,28154.0,48458.0,147443.0,189949.0,115516.0,38039.0 72 | 4012,"Bremerhaven, Stadt",de51,5874.0,10757.0,27409.0,36964.0,25156.0,7483.0 73 | 5,Nordrhein-Westfalen (BL),dea,866435.0,1626346.0,4222417.0,6212504.0,3802804.0,1216715.0 74 | 51,Regierungsbezirk Düsseldorf (R),dea1,252449.0,467103.0,1193568.0,1810586.0,1119410.0,364341.0 75 | 5111,"Düsseldorf, Stadt",dea11,31407.0,54091.0,160799.0,220553.0,116000.0,39027.0 76 | 5112,"Duisburg, Stadt",dea12,25704.0,45924.0,123127.0,169476.0,100250.0,34205.0 77 | 5113,"Essen, Stadt",dea13,29036.0,50838.0,143102.0,194927.0,123094.0,41763.0 78 | 5114,"Krefeld, Stadt",dea14,10899.0,20397.0,52378.0,78306.0,49357.0,16080.0 79 | 5116,"Mönchengladbach, Stadt",dea15,12788.0,23297.0,62642.0,89227.0,56164.0,16916.0 80 | 5117,"Mülheim an der Ruhr, Stadt",dea16,8184.0,15035.0,36754.0,58081.0,38863.0,13715.0 81 | 5119,"Oberhausen, Stadt",dea17,10031.0,18347.0,47634.0,72986.0,46894.0,14872.0 82 | 5120,"Remscheid, Stadt",dea18,5425.0,10212.0,24487.0,38882.0,24388.0,7944.0 83 | 5122,"Solingen, Stadt",dea19,7731.0,14679.0,35900.0,55927.0,33421.0,11587.0 84 | 5124,"Wuppertal, Stadt",dea1a,17932.0,33177.0,87534.0,119798.0,72645.0,24014.0 85 | 5154,Kleve,dea1b,14446.0,28151.0,72135.0,110191.0,68028.0,19514.0 86 | 5158,Mettmann,dea1c,22968.0,44405.0,97440.0,170462.0,112046.0,38249.0 87 | 5162,Rhein-Kreis Neuss,dea1d,22161.0,42858.0,92587.0,162829.0,99678.0,31617.0 88 | 5166,Viersen,dea1e,13258.0,26214.0,62114.0,108200.0,68231.0,20846.0 89 | 5170,Wesel,dea1f,20479.0,39478.0,94935.0,160741.0,110351.0,33992.0 90 | 53,Regierungsbezirk Köln (R),dea2,217084.0,406180.0,1095930.0,1560313.0,915345.0,283995.0 91 | 5314,"Bonn, Stadt",dea22,16438.0,31471.0,93907.0,109611.0,58559.0,19687.0 92 | 5315,"Köln, Stadt",dea23,54589.0,94151.0,304884.0,385925.0,189843.0,58471.0 93 | 5316,"Leverkusen, Stadt",dea24,8095.0,15314.0,36552.0,57691.0,33721.0,12356.0 94 | 5334,Städteregion Aachen,dea25,24977.0,46282.0,157209.0,178758.0,114037.0,35763.0 95 | 5358,Düren,dea26,12830.0,24024.0,59971.0,91464.0,59258.0,17091.0 96 | 5362,Rhein-Erft-Kreis,dea27,23592.0,44331.0,101251.0,168118.0,102674.0,30649.0 97 | 5366,Euskirchen,dea28,9089.0,17540.0,41151.0,68838.0,44303.0,12735.0 98 | 5370,Heinsberg,dea29,12083.0,23267.0,56046.0,91114.0,56584.0,16461.0 99 | 5374,Oberbergischer Kreis,dea2a,13535.0,25660.0,59867.0,94653.0,59256.0,19086.0 100 | 5378,Rheinisch-Bergischer Kreis,dea2b,12918.0,26096.0,56130.0,101479.0,64708.0,21940.0 101 | 5382,Rhein-Sieg-Kreis,dea2c,28938.0,58044.0,128962.0,212662.0,132402.0,39756.0 102 | 55,Regierungsbezirk Münster (R),dea3,128271.0,241123.0,618007.0,909584.0,555204.0,172436.0 103 | 5512,"Bottrop, Stadt",dea31,5339.0,9894.0,25641.0,41096.0,27259.0,8336.0 104 | 5513,"Gelsenkirchen, Stadt",dea32,13767.0,24945.0,61790.0,87506.0,54559.0,17078.0 105 | 5515,"Münster, Stadt",dea33,14563.0,25218.0,102805.0,100386.0,54039.0,18282.0 106 | 5554,Borken,dea34,19100.0,36759.0,87289.0,131685.0,74191.0,22315.0 107 | 5558,Coesfeld,dea35,10887.0,20530.0,47457.0,78579.0,48837.0,14296.0 108 | 5562,Recklinghausen,dea36,28584.0,53577.0,129707.0,213643.0,144275.0,44351.0 109 | 5566,Steinfurt,dea37,22680.0,43576.0,102306.0,158932.0,92016.0,28710.0 110 | 5570,Warendorf,dea38,13351.0,26624.0,61012.0,97757.0,60028.0,19068.0 111 | 57,Regierungsbezirk Detmold (R),dea4,100823.0,196059.0,484268.0,702512.0,428071.0,143991.0 112 | 5711,"Bielefeld, Stadt",dea41,16707.0,31171.0,88901.0,110546.0,63728.0,23142.0 113 | 5754,Gütersloh,dea42,18329.0,35402.0,84652.0,130086.0,72857.0,23612.0 114 | 5758,Herford,dea43,11818.0,23348.0,54075.0,87710.0,54386.0,19241.0 115 | 5762,Höxter,dea44,6166.0,12860.0,29989.0,48264.0,32446.0,10526.0 116 | 5766,Lippe,dea45,17248.0,34180.0,76491.0,116038.0,76864.0,26693.0 117 | 5770,Minden-Lübbecke,dea46,15008.0,29765.0,68632.0,105807.0,67878.0,23319.0 118 | 5774,Paderborn,dea47,15547.0,29333.0,81528.0,104061.0,59912.0,17458.0 119 | 59,Regierungsbezirk Arnsberg (R),dea5,167808.0,315881.0,830644.0,1229509.0,784774.0,251952.0 120 | 5911,"Bochum, Stadt",dea51,16127.0,28786.0,94867.0,119909.0,79358.0,26540.0 121 | 5913,"Dortmund, Stadt",dea52,28998.0,51619.0,150654.0,198813.0,119232.0,38934.0 122 | 5914,"Hagen, Stadt",dea53,9614.0,17625.0,43353.0,63331.0,40934.0,13829.0 123 | 5915,"Hamm, Stadt",dea54,8651.0,17253.0,43097.0,61228.0,37810.0,11877.0 124 | 5916,"Herne, Stadt",dea55,7377.0,13641.0,36686.0,53865.0,33855.0,11025.0 125 | 5954,Ennepe-Ruhr-Kreis,dea56,14597.0,27013.0,68228.0,112944.0,76719.0,24605.0 126 | 5958,Hochsauerlandkreis,dea57,11441.0,23056.0,57222.0,90800.0,58301.0,18957.0 127 | 5962,Märkischer Kreis,dea58,19197.0,37341.0,89491.0,143451.0,91502.0,29240.0 128 | 5966,Olpe,dea59,6299.0,12378.0,30088.0,48072.0,28389.0,8729.0 129 | 5970,Siegen-Wittgenstein,de5a,13274.0,24277.0,66789.0,92833.0,60681.0,19090.0 130 | 5974,Soest,dea5b,14111.0,27936.0,66540.0,106349.0,65986.0,20863.0 131 | 5978,Unna,dea5c,18122.0,34956.0,83629.0,137914.0,92007.0,28263.0 132 | 6,Hessen (BL),de7,305505.0,572678.0,1482050.0,2211163.0,1312645.0,404039.0 133 | 64,Regierungsbezirk Darmstadt (R),de71,202920.0,375173.0,947053.0,1440653.0,809498.0,244664.0 134 | 6411,"Darmstadt, Stadt",de711,7880.0,13859.0,52066.0,49898.0,27520.0,8655.0 135 | 6412,"Frankfurt am Main, Stadt",de712,41964.0,68908.0,214657.0,280645.0,121943.0,35263.0 136 | 6413,"Offenbach am Main, Stadt",de713,7592.0,12942.0,35782.0,45593.0,21960.0,6411.0 137 | 6414,"Wiesbaden, Stadt",de714,15051.0,26752.0,67169.0,97093.0,54720.0,17689.0 138 | 6431,Bergstraße,de715,12596.0,23775.0,56955.0,96563.0,62178.0,18273.0 139 | 6432,Darmstadt-Dieburg,de716,14618.0,27860.0,64948.0,107516.0,64904.0,17998.0 140 | 6433,Groß-Gerau,de717,14831.0,26607.0,65220.0,99027.0,53972.0,16069.0 141 | 6434,Hochtaunuskreis,de718,11090.0,24224.0,46056.0,86632.0,51308.0,17604.0 142 | 6435,Main-Kinzig-Kreis,de719,20189.0,38435.0,92231.0,149556.0,92950.0,27191.0 143 | 6436,Main-Taunus-Kreis,de71a,11930.0,24180.0,48946.0,88395.0,48971.0,16136.0 144 | 6437,Odenwaldkreis,de71b,4201.0,8264.0,20262.0,33401.0,23459.0,7116.0 145 | 6438,Offenbach,de71c,18295.0,33787.0,78092.0,127127.0,75308.0,23204.0 146 | 6439,Rheingau-Taunus-Kreis,de71d,8262.0,16823.0,37925.0,67506.0,43595.0,13049.0 147 | 6440,Wetteraukreis,de71e,14421.0,28757.0,66744.0,111701.0,66710.0,20006.0 148 | 65,Regierungsbezirk Gießen (R),de72,47526.0,91498.0,260243.0,354486.0,225193.0,69700.0 149 | 6531,Gießen,de721,12882.0,22699.0,77598.0,87225.0,54115.0,16169.0 150 | 6532,Lahn-Dill-Kreis,de722,11734.0,22961.0,55574.0,88340.0,56845.0,17865.0 151 | 6533,Limburg-Weilburg,de723,7729.0,15491.0,37993.0,60749.0,38531.0,11419.0 152 | 6534,Marburg-Biedenkopf,de724,10875.0,21634.0,68085.0,81391.0,49523.0,15576.0 153 | 6535,Vogelsbergkreis,de725,4306.0,8713.0,20993.0,36781.0,26179.0,8671.0 154 | 66,Regierungsbezirk Kassel (R),de73,55059.0,106007.0,274754.0,416024.0,277954.0,89675.0 155 | 6611,"Kassel, Stadt",de731,10018.0,17098.0,59006.0,64312.0,39079.0,12624.0 156 | 6633,Kassel,de734,10405.0,20321.0,46759.0,82439.0,58642.0,18198.0 157 | 6631,Fulda,de732,10592.0,20365.0,53110.0,76332.0,46775.0,15971.0 158 | 6632,Hersfeld-Rotenburg,de733,5449.0,10675.0,25236.0,41164.0,28793.0,9402.0 159 | 6634,Schwalm-Eder-Kreis,de735,7576.0,15557.0,37162.0,63472.0,42614.0,13292.0 160 | 6635,Waldeck-Frankenberg,de736,6908.0,13893.0,32741.0,54415.0,36598.0,11851.0 161 | 6636,Werra-Meißner-Kreis,de737,4111.0,8098.0,20740.0,33890.0,25453.0,8337.0 162 | 7,Rheinland-Pfalz (BL),deb,192265.0,359373.0,927478.0,1418212.0,914543.0,282032.0 163 | 71,Regierungsbezirk Koblenz (früher) (R),deb1,69103.0,130778.0,326132.0,518191.0,345804.0,108215.0 164 | 7111,"Koblenz, Stadt",deb11,5130.0,8989.0,32464.0,35749.0,23252.0,8468.0 165 | 7131,Ahrweiler,deb12,5798.0,10837.0,26935.0,44436.0,31564.0,10516.0 166 | 7132,Altenkirchen (Westerwald),deb13,6001.0,11641.0,27736.0,44824.0,29524.0,9079.0 167 | 7133,Bad Kreuznach,deb14,7229.0,14089.0,32994.0,54791.0,37843.0,11399.0 168 | 7134,Birkenfeld,deb15,3729.0,6726.0,17175.0,27042.0,19767.0,6512.0 169 | 7135,Cochem-Zell,deb16,2513.0,4956.0,12567.0,21348.0,15088.0,4903.0 170 | 7137,Mayen-Koblenz,deb17,10199.0,18868.0,46501.0,75345.0,48773.0,14748.0 171 | 7138,Neuwied,deb18,8889.0,16733.0,39588.0,63025.0,41593.0,12983.0 172 | 7140,Rhein-Hunsrück-Kreis,deb19,4690.0,8890.0,21581.0,36204.0,24426.0,7372.0 173 | 7141,Rhein-Lahn-Kreis,deb1a,5468.0,10643.0,24989.0,42962.0,29428.0,8807.0 174 | 7143,Westerwaldkreis,deb1b,9457.0,18406.0,43602.0,72465.0,44546.0,13428.0 175 | 72,Regierungsbezirk Trier (früher) (R),deb2,24364.0,46655.0,124765.0,185953.0,115239.0,36137.0 176 | 7211,"Trier, Stadt",deb21,4840.0,8595.0,36102.0,35637.0,19704.0,6650.0 177 | 7231,Bernkastel-Wittlich,deb22,5174.0,9804.0,23370.0,39607.0,26137.0,8391.0 178 | 7232,Bitburg-Prüm,deb23,4933.0,8993.0,21951.0,35140.0,21520.0,6521.0 179 | 7233,Vulkaneifel,deb24,2463.0,5050.0,12518.0,20657.0,15242.0,4716.0 180 | 7235,Trier-Saarburg,deb25,6954.0,14213.0,30824.0,54912.0,32636.0,9859.0 181 | 73,Regierungsbezirk Rheinhessen-Pfalz (früher)(R),deb3,98798.0,181940.0,476581.0,714068.0,453500.0,137680.0 182 | 7311,"Frankenthal (Pfalz), Stadt",deb31,2519.0,4429.0,11090.0,16291.0,10601.0,3832.0 183 | 7312,"Kaiserslautern, Stadt",deb32,4670.0,7796.0,29899.0,30804.0,20531.0,6330.0 184 | 7313,"Landau in der Pfalz, Stadt",deb33,2105.0,3766.0,13831.0,15072.0,9196.0,2911.0 185 | 7314,"Ludwigshafen am Rhein, Stadt",deb34,9643.0,17079.0,43845.0,59153.0,31893.0,10640.0 186 | 7315,"Mainz, Stadt",deb35,10097.0,17192.0,70862.0,70469.0,37713.0,12245.0 187 | 7316,"Neustadt an der Weinstraße, Stadt",deb36,2506.0,4536.0,11301.0,17749.0,12731.0,4441.0 188 | 7317,"Pirmasens, Stadt",deb37,1780.0,3333.0,8780.0,12895.0,9876.0,3567.0 189 | 7318,"Speyer, Stadt",deb38,2287.0,4402.0,11123.0,17506.0,11557.0,3686.0 190 | 7319,"Worms, Stadt",deb39,4350.0,7795.0,20419.0,28059.0,17553.0,5366.0 191 | 7320,"Zweibrücken, Stadt",deb3a,1488.0,2905.0,8059.0,11206.0,7953.0,2582.0 192 | 7331,Alzey-Worms,deb3b,6377.0,12002.0,27697.0,46962.0,29226.0,7423.0 193 | 7332,Bad Dürkheim,deb3c,5764.0,11214.0,25367.0,47334.0,33254.0,9738.0 194 | 7333,Donnersbergkreis,deb3d,3431.0,6796.0,15613.0,26755.0,17753.0,4977.0 195 | 7334,Germersheim,deb3e,6326.0,11939.0,28709.0,46533.0,27704.0,7802.0 196 | 7335,"Kaiserslautern, Landkreis",deb3f,5769.0,9816.0,22174.0,36607.0,24471.0,7142.0 197 | 7336,Kusel,deb3g,3155.0,5820.0,14025.0,24154.0,17783.0,5282.0 198 | 7337,Südliche Weinstraße,deb3h,4865.0,9513.0,21816.0,39712.0,26807.0,7808.0 199 | 7338,Rhein-Pfalz-Kreis,deb3i,7761.0,13941.0,30850.0,55430.0,35507.0,11120.0 200 | 7339,Mainz-Bingen,deb3j,10153.0,20329.0,42927.0,78098.0,47047.0,12863.0 201 | 7340,Südwestpfalz,deb3k,3752.0,7337.0,18194.0,33279.0,24344.0,7925.0 202 | 8,Baden-Württemberg (BL),de1,545064.0,1013464.0,2702808.0,3854650.0,2264270.0,720138.0 203 | 81,Regierungsbezirk Stuttgart (R),de11,206871.0,380715.0,1009066.0,1460065.0,830084.0,267422.0 204 | 8111,"Stuttgart, Stadt",de 111,30277.0,52401.0,186375.0,220342.0,108142.0,38374.0 205 | 8115,Böblingen,de112,21121.0,37809.0,91621.0,138865.0,78526.0,24865.0 206 | 8116,Esslingen,de113,25938.0,48869.0,127142.0,189650.0,107941.0,35484.0 207 | 8117,Göppingen,de114,12631.0,23688.0,58557.0,89872.0,55376.0,18021.0 208 | 8118,Ludwigsburg,de115,28421.0,51737.0,127555.0,194679.0,108528.0,34503.0 209 | 8119,Rems-Murr-Kreis,de116,21042.0,39459.0,96852.0,151312.0,89421.0,29162.0 210 | 8121,"Heilbronn, Stadt",de117,6615.0,11897.0,33848.0,42296.0,23792.0,8144.0 211 | 8125,Heilbronn,de118,17716.0,32444.0,79932.0,124376.0,69677.0,20311.0 212 | 8126,Hohenlohekreis,de119,5549.0,10503.0,26881.0,39646.0,23070.0,7006.0 213 | 8127,Schwäbisch Hall,de11a,10166.0,18774.0,46773.0,68881.0,40455.0,11712.0 214 | 8128,Main-Tauber-Kreis,de11b,6103.0,11595.0,29027.0,45649.0,30494.0,9531.0 215 | 8135,Heidenheim,de11c,6351.0,12434.0,30265.0,45560.0,28360.0,9807.0 216 | 8136,Ostalbkreis,de11d,14941.0,29105.0,74238.0,108937.0,66302.0,20502.0 217 | 82,Regierungsbezirk Karlsruhe (R),de12,133127.0,246864.0,693403.0,975146.0,579203.0,183111.0 218 | 8211,"Baden-Baden, Stadt",de121,2327.0,4336.0,11349.0,18959.0,13312.0,4902.0 219 | 8212,"Karlsruhe, Stadt",de122,13501.0,24051.0,96210.0,103188.0,55986.0,19124.0 220 | 8215,Karlsruhe,de123,20805.0,40718.0,98037.0,159688.0,96324.0,29529.0 221 | 8216,Rastatt,de124,10771.0,20526.0,50351.0,82392.0,51304.0,16076.0 222 | 8221,"Heidelberg, Stadt",de125,7651.0,12234.0,56430.0,50483.0,26094.0,8593.0 223 | 8222,"Mannheim, Stadt",de126,15008.0,25378.0,90495.0,105056.0,56575.0,18146.0 224 | 8225,Neckar-Odenwald-Kreis,de127,6590.0,12650.0,31813.0,50278.0,32605.0,9697.0 225 | 8226,Rhein-Neckar-Kreis,de128,26484.0,50723.0,119416.0,195186.0,120243.0,36303.0 226 | 8231,"Pforzheim, Stadt",de129,6919.0,12063.0,32774.0,41226.0,24351.0,8624.0 227 | 8235,Calw,de12a,7685.0,14880.0,35780.0,56031.0,34153.0,10672.0 228 | 8236,Enzkreis,de12b,9770.0,18333.0,43796.0,71053.0,43119.0,13485.0 229 | 8237,Freudenstadt,de12c,5616.0,10972.0,26952.0,41606.0,25137.0,7960.0 230 | 83,Regierungsbezirk Freiburg (R),de13,112286.0,211957.0,544213.0,777465.0,474477.0,150953.0 231 | 8311,"Freiburg im Breisgau, Stadt",de131,11580.0,19423.0,75858.0,73364.0,38754.0,12216.0 232 | 8315,Breisgau-Hochschwarzwald,de132,13023.0,24980.0,57703.0,91353.0,58575.0,17967.0 233 | 8316,Emmendingen,de133,8237.0,15671.0,36337.0,58890.0,36529.0,10744.0 234 | 8317,Ortenaukreis,de134,21255.0,40539.0,97963.0,149809.0,92015.0,29372.0 235 | 8325,Rottweil,de135,7017.0,13275.0,31767.0,48487.0,29790.0,9542.0 236 | 8326,Schwarzwald-Baar-Kreis,de136,10360.0,19360.0,49100.0,71187.0,46648.0,15851.0 237 | 8327,Tuttlingen,de137,7415.0,14224.0,33792.0,48292.0,27908.0,9135.0 238 | 8335,Konstanz,de138,13609.0,25450.0,72567.0,95970.0,59233.0,19476.0 239 | 8336,Lörrach,de139,11417.0,22176.0,51034.0,81260.0,47707.0,15142.0 240 | 8337,Waldshut,de13a,8373.0,16859.0,38092.0,58853.0,37318.0,11508.0 241 | 84,Regierungsbezirk Tübingen (R),de14,92780.0,173928.0,456126.0,641974.0,380506.0,118652.0 242 | 8415,Reutlingen,de141,14389.0,26908.0,66385.0,100381.0,59367.0,19604.0 243 | 8416,Tübingen,de142,11517.0,20500.0,67359.0,74689.0,42186.0,12427.0 244 | 8417,Zollernalbkreis,de143,8629.0,16886.0,42280.0,65775.0,41760.0,14033.0 245 | 8421,"Ulm, Stadt",de144,6143.0,11233.0,37545.0,41501.0,22949.0,7419.0 246 | 8425,Alb-Donau-Kreis,de145,10187.0,19357.0,46286.0,69568.0,39521.0,12157.0 247 | 8426,Biberach,de146,10918.0,20194.0,47873.0,70915.0,39644.0,11738.0 248 | 8435,Bodenseekreis,de147,10308.0,19600.0,48384.0,74946.0,49071.0,15161.0 249 | 8436,Ravensburg,de148,14387.0,27005.0,69383.0,98817.0,58282.0,17550.0 250 | 8437,Sigmaringen,de149,6302.0,12245.0,30631.0,45382.0,27726.0,8563.0 251 | 9,Bayern (BL),de2,638940.0,1160804.0,3134205.0,4636305.0,2722984.0,831499.0 252 | 91,Regierungsbezirk Oberbayern (R),de21,239832.0,429303.0,1165939.0,1680920.0,913046.0,281825.0 253 | 9161,"Ingolstadt, Stadt",de 211,7348.0,12189.0,36946.0,47433.0,25341.0,8135.0 254 | 9162,"München, Stadt",de 212,79289.0,123455.0,428500.0,520908.0,252625.0,79449.0 255 | 9163,"Rosenheim, Stadt",de 213,3173.0,5529.0,16846.0,21721.0,12485.0,3797.0 256 | 9171,Altötting,de214,5560.0,10171.0,24674.0,38826.0,24596.0,7689.0 257 | 9172,Berchtesgadener Land,de215,4870.0,8863.0,24213.0,35989.0,23999.0,7995.0 258 | 9173,Bad Tölz-Wolfratshausen,de216,6413.0,11873.0,28089.0,45644.0,27330.0,8568.0 259 | 9174,Dachau,de217,8110.0,14813.0,35923.0,57706.0,29629.0,8718.0 260 | 9175,Ebersberg,de218,7339.0,14993.0,31943.0,54073.0,26881.0,8420.0 261 | 9176,Eichstätt,de219,7521.0,13271.0,31932.0,47849.0,24991.0,7317.0 262 | 9177,Erding,de21a,7095.0,13322.0,32571.0,52900.0,25339.0,6955.0 263 | 9178,Freising,de21b,9347.0,16896.0,47364.0,67183.0,30829.0,8388.0 264 | 9179,Fürstenfeldbruck,de21c,10914.0,21333.0,47747.0,78793.0,45874.0,14650.0 265 | 9180,Garmisch-Partenkirchen,de21d,3944.0,7216.0,18951.0,30268.0,20791.0,7254.0 266 | 9181,Landsberg a.Lech,de21e,5814.0,11596.0,26575.0,44110.0,25061.0,7146.0 267 | 9182,Miesbach,de21f,4678.0,9053.0,21101.0,36111.0,21994.0,7073.0 268 | 9183,Mühldorf a.Inn,de21g,5732.0,10807.0,26957.0,41159.0,24455.0,6762.0 269 | 9184,München,de21h,17221.0,35989.0,79064.0,127041.0,68324.0,22834.0 270 | 9185,Neuburg-Schrobenhausen,de21i,4953.0,9360.0,22414.0,35147.0,19834.0,5595.0 271 | 9186,Pfaffenhofen a.d. Ilm,de21j,6798.0,12140.0,29980.0,47303.0,25051.0,6955.0 272 | 9187,Rosenheim,de21k,12589.0,24148.0,57885.0,92745.0,57382.0,16581.0 273 | 9188,Starnberg,de21l,6275.0,13824.0,27433.0,49023.0,30237.0,9875.0 274 | 9189,Traunstein,de21m,8217.0,15656.0,39329.0,61317.0,40204.0,12596.0 275 | 9190,Weilheim-Schongau,de21n,6632.0,12806.0,29502.0,47671.0,29794.0,9073.0 276 | 92,Regierungsbezirk Niederbayern (R),de22,57288.0,108907.0,289965.0,441876.0,270061.0,76072.0 277 | 9261,"Landshut, Stadt",de221,3437.0,6190.0,19121.0,25371.0,14495.0,4797.0 278 | 9262,"Passau, Stadt",de222,2079.0,3668.0,16576.0,15973.0,11052.0,3455.0 279 | 9263,"Straubing, Stadt",de223,2064.0,3780.0,11769.0,16686.0,10358.0,3134.0 280 | 9271,Deggendorf,de224,5244.0,10191.0,28269.0,42402.0,26176.0,7196.0 281 | 9272,Freyung-Grafenau,de225,3304.0,6259.0,17095.0,27856.0,18861.0,4987.0 282 | 9273,Kelheim,de226,6197.0,11776.0,29164.0,44539.0,24528.0,6854.0 283 | 9274,Landshut,de227,8154.0,15490.0,35928.0,59287.0,32478.0,8558.0 284 | 9275,Passau,de228,8294.0,16612.0,41791.0,68286.0,45211.0,12462.0 285 | 9276,Regen,de229,3418.0,6355.0,17033.0,26975.0,18463.0,5166.0 286 | 9277,Rottal-Inn,de22a,5532.0,10651.0,27751.0,42573.0,26893.0,8102.0 287 | 9278,Straubing-Bogen,de22b,4891.0,9372.0,22496.0,37010.0,21556.0,5795.0 288 | 9279,Dingolfing-Landau,de22c,4674.0,8563.0,22972.0,34918.0,19990.0,5566.0 289 | 93,Regierungsbezirk Oberpfalz (R),de23,52148.0,95560.0,264542.0,393979.0,236064.0,69809.0 290 | 9361,"Amberg, Stadt",de231,1822.0,3428.0,9884.0,14121.0,9590.0,3362.0 291 | 9362,"Regensburg, Stadt",de232,7114.0,11854.0,49733.0,49991.0,25967.0,8435.0 292 | 9363,"Weiden in der Oberpfalz, Stadt",de233,1904.0,3386.0,10266.0,14377.0,9556.0,3254.0 293 | 9371,Amberg-Sulzbach,de234,4804.0,8669.0,22657.0,36846.0,23023.0,7050.0 294 | 9372,Cham,de235,5736.0,10953.0,28535.0,45439.0,29005.0,8330.0 295 | 9373,Neumarkt in der Oberpfalz,de236,6682.0,12356.0,31174.0,48885.0,27625.0,7851.0 296 | 9374,Neustadt an der Waldnaab,de237,4536.0,7981.0,20719.0,33928.0,21159.0,6127.0 297 | 9375,Regensburg,de238,9600.0,18268.0,42447.0,71700.0,41339.0,10716.0 298 | 9376,Schwandorf,de239,6864.0,12736.0,33731.0,53297.0,31793.0,9451.0 299 | 9377,Tirschenreuth,de23a,3086.0,5929.0,15396.0,25395.0,17007.0,5233.0 300 | 94,Regierungsbezirk Oberfranken (R),de24,46479.0,87736.0,238708.0,372413.0,243300.0,76735.0 301 | 9461,"Bamberg, Stadt",de241,3715.0,5830.0,23639.0,24667.0,14502.0,5020.0 302 | 9462,"Bayreuth, Stadt",de242,2896.0,5156.0,23765.0,22370.0,15469.0,5127.0 303 | 9463,"Coburg, Stadt",de243,1701.0,3150.0,10239.0,13372.0,9323.0,3287.0 304 | 9464,"Hof, Stadt",de244,2209.0,3824.0,10750.0,14816.0,10676.0,3550.0 305 | 9471,Bamberg,de245,7310.0,13459.0,32449.0,54610.0,30931.0,8404.0 306 | 9472,Bayreuth,de246,4451.0,9054.0,20963.0,37772.0,24189.0,7235.0 307 | 9473,Coburg,de247,3841.0,7290.0,17693.0,30920.0,20513.0,6490.0 308 | 9474,Forchheim,de248,5561.0,10581.0,25031.0,42310.0,25474.0,7246.0 309 | 9475,Hof,de249,3694.0,7446.0,18323.0,33143.0,23862.0,8333.0 310 | 9476,Kronach,de24a,2457.0,5058.0,13213.0,24231.0,16400.0,5384.0 311 | 9477,Kulmbach,de24b,2747.0,5652.0,14403.0,25634.0,17580.0,5550.0 312 | 9478,Lichtenfels,de24c,2890.0,5546.0,14057.0,23797.0,15644.0,4842.0 313 | 9479,Wunsiedel im Fichtelgebirge,de24d,3007.0,5690.0,14183.0,24771.0,18737.0,6267.0 314 | 95,Regierungsbezirk Mittelfranken (R),de25,87836.0,156958.0,422876.0,624703.0,368996.0,113800.0 315 | 9561,"Ansbach, Stadt",de251,2161.0,3699.0,10065.0,14064.0,8921.0,2888.0 316 | 9562,"Erlangen, Stadt",de252,5400.0,9512.0,35417.0,36317.0,19191.0,6691.0 317 | 9563,"Fürth, Stadt",de253,6690.0,10847.0,31853.0,47335.0,24819.0,6953.0 318 | 9564,"Nürnberg, Stadt",de254,25696.0,44169.0,137016.0,177215.0,100777.0,33497.0 319 | 9565,"Schwabach, Stadt",de255,2072.0,3769.0,8880.0,14688.0,8834.0,2738.0 320 | 9571,Ansbach,de256,9148.0,16913.0,42003.0,65746.0,38890.0,11891.0 321 | 9572,Erlangen-Höchstadt,de257,7028.0,13449.0,28487.0,50039.0,30241.0,8018.0 322 | 9573,Fürth,de258,5890.0,10502.0,23448.0,42496.0,27253.0,8264.0 323 | 9574,Nürnberger Land,de259,8077.0,15191.0,35129.0,61854.0,38880.0,11661.0 324 | 9575,Neustadt an der Aisch-Bad Winsheim,de25a,4867.0,9063.0,22287.0,36094.0,22144.0,6559.0 325 | 9576,Roth,de25b,6187.0,11451.0,27250.0,45982.0,27822.0,8057.0 326 | 9577,Weißenburg-Gunzenhausen,de25c,4620.0,8393.0,21041.0,32873.0,21224.0,6583.0 327 | 96,Regierungsbezirk Unterfranken (R),de26,60783.0,111498.0,302167.0,457420.0,293924.0,91827.0 328 | 9661,"Aschaffenburg, Stadt",de261,3396.0,6012.0,17334.0,24657.0,15011.0,4592.0 329 | 9662,"Schweinfurt, Stadt",de262,2564.0,4683.0,13076.0,16779.0,11990.0,4334.0 330 | 9663,"Würzburg, Stadt",de263,5379.0,8237.0,43894.0,37617.0,23696.0,9111.0 331 | 9671,Aschaffenburg,de264,8123.0,15228.0,36806.0,63132.0,39101.0,11810.0 332 | 9672,Bad Kissingen,de265,4413.0,8559.0,21051.0,35544.0,25274.0,8394.0 333 | 9673,Rhön-Grabfeld,de266,3639.0,7030.0,17083.0,27729.0,18359.0,5795.0 334 | 9674,Haßberge,de267,3906.0,7434.0,18235.0,30232.0,19209.0,5368.0 335 | 9675,Kitzingen,de268,4374.0,7884.0,20609.0,32613.0,19640.0,6035.0 336 | 9676,Miltenberg,de269,5898.0,11468.0,27815.0,46380.0,28525.0,8657.0 337 | 9677,Main-Spessart,de26a,5545.0,10380.0,26105.0,44735.0,29984.0,9409.0 338 | 9678,Schweinfurt,de26b,5545.0,10038.0,25134.0,40516.0,26233.0,7979.0 339 | 9679,Würzburg,de26c,8001.0,14545.0,35025.0,57486.0,36902.0,10343.0 340 | 97,Regierungsbezirk Schwaben (R),de27,94574.0,170842.0,450008.0,664994.0,397593.0,121431.0 341 | 9761,"Augsburg, Stadt",de271,14299.0,24019.0,84583.0,99180.0,55740.0,18761.0 342 | 9762,"Kaufbeuren, Stadt",de272,2226.0,3894.0,10323.0,14824.0,9817.0,3314.0 343 | 9763,"Kempten (Allgäu), Stadt",de273,3372.0,5600.0,18163.0,22359.0,14773.0,4884.0 344 | 9764,"Memmingen, Stadt",de274,2122.0,3881.0,10482.0,15115.0,9453.0,3047.0 345 | 9771,Aichach-Friedberg,de275,7128.0,12949.0,29762.0,48980.0,27831.0,8005.0 346 | 9772,Augsburg,de276,13177.0,24058.0,55340.0,91323.0,54057.0,15513.0 347 | 9773,Dillingen an der Donau,de277,4696.0,8926.0,22201.0,34142.0,20492.0,6105.0 348 | 9774,Günzburg,de278,6284.0,11689.0,30065.0,45401.0,26155.0,7433.0 349 | 9775,Neu-Ulm,de279,8796.0,16126.0,41609.0,61598.0,36344.0,10731.0 350 | 9776,Lindau (Bodensee),de27a,3846.0,7156.0,17934.0,28960.0,18128.0,5957.0 351 | 9777,Ostallgäu,de27b,7230.0,13175.0,31675.0,49530.0,30722.0,8850.0 352 | 9778,Unterallgäu,de27c,7360.0,13369.0,33203.0,50985.0,30843.0,9581.0 353 | 9779,Donau-Ries,de27d,6400.0,12460.0,30976.0,47800.0,27780.0,8367.0 354 | 9780,Oberallgäu,de27e,7638.0,13540.0,33692.0,54797.0,35458.0,10883.0 355 | 10,Saarland (BL),dec,41034.0,79381.0,213909.0,335982.0,240786.0,75795.0 356 | 10041,Regionalverband Saarbrücken,dec01,14363.0,26365.0,78612.0,108636.0,76734.0,24004.0 357 | 10042,Merzig-Wadern,dec02,4066.0,8668.0,21284.0,36843.0,24843.0,7539.0 358 | 10043,Neunkirchen,dec03,5373.0,10373.0,27081.0,45304.0,32894.0,10383.0 359 | 10044,Saarlouis,dec04,8285.0,15864.0,40511.0,66547.0,48092.0,15020.0 360 | 10045,Saarpfalz-Kreis,dec05,5700.0,11383.0,29284.0,48135.0,35705.0,11989.0 361 | 10046,St. Wendel,dec06,3247.0,6728.0,17137.0,30517.0,22518.0,6860.0 362 | 11000,Berlin (BL),de3,193234.0,326311.0,964109.0,1276145.0,698465.0,211227.0 363 | 12,Brandenburg (BL),de4,108713.0,225684.0,441733.0,914109.0,634308.0,197346.0 364 | 12051,"Brandenburg an der Havel, Stadt",de421,3083.0,5788.0,14032.0,23818.0,18663.0,6800.0 365 | 12052,"Cottbus, Stadt",de422,4276.0,7994.0,21509.0,32465.0,24937.0,8497.0 366 | 12053,"Frankfurt (Oder), Stadt",de411,2289.0,4679.0,11858.0,18825.0,15124.0,4976.0 367 | 12054,"Potsdam, Stadt",de423,9749.0,17679.0,44577.0,62572.0,33986.0,11771.0 368 | 12060,Barnim,de412,8123.0,17505.0,31663.0,68626.0,46209.0,13118.0 369 | 12061,Dahme-Spreewald,de424,7792.0,15413.0,29550.0,63166.0,41403.0,13467.0 370 | 12062,Elbe-Elster,de425,3927.0,8011.0,15411.0,36060.0,29105.0,9313.0 371 | 12063,Havelland,de426,7081.0,15601.0,28998.0,61772.0,38564.0,10980.0 372 | 12064,Märkisch-Oderland,de413,8400.0,18176.0,30929.0,73913.0,49139.0,15194.0 373 | 12065,Oberhavel,de414,9232.0,19978.0,37125.0,80715.0,50607.0,15257.0 374 | 12066,Oberspreewald-Lausitz,de427,4238.0,8622.0,17129.0,38143.0,30911.0,10328.0 375 | 12067,Oder-Spree,de415,7515.0,15555.0,28289.0,63809.0,48239.0,15396.0 376 | 12068,Ostprignitz-Ruppin,de416,4008.0,8332.0,16463.0,35118.0,26968.0,7972.0 377 | 12069,Potsdam-Mittelmark,de428,9383.0,21670.0,35604.0,83103.0,51963.0,14843.0 378 | 12070,Prignitz,de417,2916.0,5866.0,12422.0,26281.0,21588.0,7085.0 379 | 12071,Spree-Neiße,de429,4292.0,9284.0,15920.0,40956.0,33381.0,9887.0 380 | 12072,Teltow-Fläming,de42a,7911.0,15690.0,31536.0,63541.0,39370.0,11949.0 381 | 12073,Uckermark,de418,4498.0,9841.0,18718.0,41226.0,34151.0,10513.0 382 | 13,Mecklenburg-Vorpommern (BL),de8,67491.0,138091.0,301484.0,559202.0,415186.0,126684.0 383 | 13003,"Rostock, Stadt",de803,9235.0,15928.0,55404.0,64828.0,46670.0,17126.0 384 | 13004,"Schwerin, Stadt",de804,4464.0,8305.0,20319.0,30745.0,23577.0,8243.0 385 | 13071,Mecklenburgische Seenplatte,de80j,10211.0,22258.0,43430.0,90073.0,70766.0,21336.0 386 | 13072,Rostock,de80k,9570.0,20342.0,34772.0,79734.0,55987.0,15389.0 387 | 13073,Vorpommern-Rügen,de80l,8587.0,18929.0,38091.0,79407.0,60983.0,18705.0 388 | 13074,Nordwestmecklenburg,de80m,6854.0,13976.0,28640.0,56890.0,39462.0,11500.0 389 | 13075,Vorpommern-Greifswald,de80n,9552.0,19810.0,45094.0,79757.0,62252.0,19158.0 390 | 13076,Ludwigslust-Parchim,de80o,9018.0,18543.0,35734.0,77768.0,55489.0,15227.0 391 | 14,Sachsen (BL),ded,184422.0,359660.0,800315.0,1359818.0,1018999.0,348757.0 392 | 145,Direktionsbezirk Chemnitz (früher) (R),ded1,58753.0,120617.0,244990.0,472471.0,397802.0,131747.0 393 | 14511,"Chemnitz, Stadt",ded11,11427.0,20414.0,53655.0,76096.0,62793.0,21949.0 394 | 14521,Erzgebirgskreis,ded14,13454.0,29456.0,51850.0,111700.0,97914.0,30574.0 395 | 14522,Mittelsachsen,ded15,12498.0,26343.0,51167.0,103044.0,83068.0,27979.0 396 | 14523,Vogtlandkreis,ded16,8712.0,18327.0,35778.0,75937.0,65559.0,21684.0 397 | 14524,Zwickau,ded17,12662.0,26077.0,52540.0,105694.0,88468.0,29561.0 398 | 146,Direktionsbezirk Dresden (früher) (R),ded2,73938.0,147019.0,311675.0,534597.0,390887.0,138450.0 399 | 14612,"Dresden, Stadt",ded21,29658.0,51935.0,148323.0,175921.0,109387.0,41556.0 400 | 14625,Bautzen,ded24,12995.0,27522.0,46285.0,104593.0,80743.0,27620.0 401 | 14626,Görlitz,ded25,9935.0,21846.0,39452.0,84118.0,72502.0,24872.0 402 | 14627,Meißen,ded26,10303.0,22306.0,37965.0,84906.0,63925.0,22312.0 403 | 14628,Sächsische Schweiz-Osterzgebirge,ded27,11047.0,23410.0,39650.0,85059.0,64330.0,22090.0 404 | 147,Direktionsbezirk Leipzig (früher) (R),ded3,51731.0,92024.0,243650.0,352750.0,230310.0,78560.0 405 | 14713,"Leipzig, Stadt",ded31,31764.0,50974.0,171004.0,188265.0,110384.0,40754.0 406 | 14729,"Leipzig, Landkreis",ded32,11286.0,23658.0,40234.0,93143.0,68375.0,21443.0 407 | 14730,Nordsachsen,ded33,8681.0,17392.0,32412.0,71342.0,51551.0,16363.0 408 | 15,Sachsen-Anhalt (BL),dee,89756.0,181024.0,402457.0,753117.0,586264.0,182164.0 409 | 15001,"Dessau-Roßlau, Stadt",dee01,3004.0,5978.0,13140.0,26052.0,23571.0,8358.0 410 | 15002,"Halle (Saale), Stadt",dee02,11526.0,20575.0,61479.0,72927.0,54242.0,18013.0 411 | 15003,"Magdeburg, Stadt",dee03,11075.0,19691.0,59628.0,74127.0,54468.0,18576.0 412 | 15081,Altmarkkreis Salzwedel,dee04,3471.0,7412.0,14127.0,30113.0,21494.0,6556.0 413 | 15082,Anhalt-Bitterfeld,dee05,6026.0,12413.0,25492.0,55806.0,45057.0,13692.0 414 | 15083,Börde,dee07,7219.0,15309.0,28676.0,63459.0,44149.0,12111.0 415 | 15084,Burgenlandkreis,dee08,7093.0,14194.0,29299.0,62237.0,49690.0,16333.0 416 | 15085,Harz,dee09,7980.0,16803.0,35466.0,74249.0,60389.0,18423.0 417 | 15086,Jerichower Land,dee06,3757.0,7551.0,14205.0,32606.0,24255.0,7215.0 418 | 15087,Mansfeld-Südharz,dee0a,4709.0,10566.0,20536.0,46451.0,40156.0,12524.0 419 | 15088,Saalekreis,dee0b,7600.0,16121.0,30185.0,66614.0,49633.0,13662.0 420 | 15089,Salzlandkreis,dee0c,7217.0,15153.0,31501.0,65888.0,52986.0,16380.0 421 | 15090,Stendal,dee0d,4398.0,9349.0,19223.0,39168.0,30088.0,8964.0 422 | 15091,Wittenberg,dee0e,4681.0,9909.0,19500.0,43420.0,36086.0,11357.0 423 | 16,Thüringen (BL),deg,90338.0,181978.0,397268.0,733338.0,560974.0,169482.0 424 | 16051,"Erfurt, Stadt",deg01,10246.0,18714.0,52208.0,70598.0,47870.0,14345.0 425 | 16052,"Gera, Stadt",deg02,3897.0,7534.0,16467.0,29813.0,26621.0,8793.0 426 | 16053,"Jena, Stadt",deg03,5355.0,9543.0,33455.0,33145.0,22301.0,7544.0 427 | 16054,"Suhl, Stadt",deg04,1262.0,2583.0,5989.0,11833.0,11706.0,3416.0 428 | 16055,"Weimar, Stadt",deg05,3097.0,6013.0,15672.0,21259.0,14377.0,4810.0 429 | 16056,"Eisennach, Stadt",deg0n,1881.0,3574.0,8185.0,14503.0,10467.0,3640.0 430 | 16061,Eichsfeld,deg06,4888.0,9566.0,18050.0,35305.0,25270.0,6927.0 431 | 16062,Nordhausen,deg07,3507.0,7092.0,15625.0,28083.0,22291.0,6818.0 432 | 16063,Wartburgkreis,deg0p,4930.0,10230.0,19822.0,42674.0,31960.0,9358.0 433 | 16064,Unstrut-Hainich-Kreis,deg09,4542.0,9277.0,17822.0,35775.0,26768.0,8048.0 434 | 16065,Kyffhäuserkreis,deg0a,2803.0,6066.0,12066.0,25794.0,21447.0,6036.0 435 | 16066,Schmalkalden-Meiningen,deg0b,4969.0,10341.0,21523.0,43881.0,34060.0,10142.0 436 | 16067,Gotha,deg0c,5717.0,11686.0,24273.0,47925.0,35092.0,10215.0 437 | 16068,Sömmerda,deg0d,3009.0,6226.0,11505.0,25273.0,18736.0,4678.0 438 | 16069,Hildburghausen,deg0e,2567.0,5253.0,10860.0,22948.0,16668.0,4901.0 439 | 16070,Ilm-Kreis,deg0f,4472.0,8997.0,20609.0,36119.0,27770.0,8282.0 440 | 16071,Weimarer Land,deg0g,3699.0,7955.0,13611.0,29896.0,21547.0,5448.0 441 | 16072,Sonneberg,deg0h,2032.0,4399.0,9417.0,20471.0,16135.0,5263.0 442 | 16073,Saalfeld-Rudolstadt,deg0i,3987.0,8032.0,16133.0,35548.0,29651.0,9848.0 443 | 16074,Saale-Holzland-Kreis,deg0j,3398.0,7280.0,13670.0,29728.0,22639.0,6235.0 444 | 16075,Saale-Orla-Kreis,deg0k,3191.0,6772.0,12970.0,28382.0,22173.0,6824.0 445 | 16076,Greiz,deg0l,3603.0,7881.0,14002.0,33832.0,28824.0,9256.0 446 | 16077,Altenburger Land,deg0m,3286.0,6964.0,13334.0,30553.0,26601.0,8655.0 447 | ,,,,,,,, 448 | ,,"© Statistisches Bundesamt (Destatis), Wiesbaden 2020",,,,,, 449 | ,," Vervielfältigung und Verbreitung, auch auszugsweise, mit Quellenangabe gestattet.",,,,,, 450 | -------------------------------------------------------------------------------- /assets/data/timeseries.hdf5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/semohr/risikogebiete_deutschland/34f62d4d07bcd757362e38e28a5fb55e1871640d/assets/data/timeseries.hdf5 -------------------------------------------------------------------------------- /assets/data/timeseries_nd.hdf5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/semohr/risikogebiete_deutschland/34f62d4d07bcd757362e38e28a5fb55e1871640d/assets/data/timeseries_nd.hdf5 -------------------------------------------------------------------------------- /assets/img/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/semohr/risikogebiete_deutschland/34f62d4d07bcd757362e38e28a5fb55e1871640d/assets/img/example.png -------------------------------------------------------------------------------- /assets/img/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/semohr/risikogebiete_deutschland/34f62d4d07bcd757362e38e28a5fb55e1871640d/assets/img/minus.png -------------------------------------------------------------------------------- /assets/img/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/semohr/risikogebiete_deutschland/34f62d4d07bcd757362e38e28a5fb55e1871640d/assets/img/plus.png -------------------------------------------------------------------------------- /assets/js/d3-interpolate-path.min.js: -------------------------------------------------------------------------------- 1 | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).d3=t.d3||{})}(this,function(t){"use strict";function e(e,t){var n,r=Object.keys(e);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(e),t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)),r}function n(r){for(var t=1;tt.length)&&(e=t.length);for(var n=0,r=new Array(e);n=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,u=!0,l=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return u=t.done,t},e:function(t){l=!0,o=t},f:function(){try{u||null==n.return||n.return()}finally{if(l)throw o}}}}function c(t,e){var u=[],l=[];return t.length&&function t(e,n){if(1===e.length)u.push(e[0]),l.push(e[0]);else{for(var r=Array(e.length-1),o=0;oc.length?c=o(c,f,e):f.length ${name_} 208 |
209 | 210 | 211 | 212 | 213 | 214 | 215 | `; 216 | str +=` 217 | 218 | 219 | 220 | 221 | 222 | `; 223 | for (a of age_groups) { 224 | console.log(i_a[a],name_,this.point.properties.id) 225 | str +=` 226 | 227 | 228 | 229 | 230 | 231 | `; 232 | } 233 | str += "
AltersgruppeFälle der letzte Wochepro 100.000 EW
Alle${wc}${i.toFixed(2).replace(".", ",")}
${a}${wc_a[a]}${i_a[a].toFixed(2).replace(".", ",")}
"; 234 | return str 235 | }, 236 | pointFormat: '{point.properties.GEN}: {point.properties.id}' 237 | }, 238 | colors: default_colors["colors"], 239 | colorAxis: { 240 | dataClassColor: 'category', 241 | dataClasses: default_dataClasses["dataClasses"], 242 | events:{ 243 | legendItemClick: function(e){ 244 | e.preventDefault(); 245 | //console.log(e) 246 | }, 247 | } 248 | }, 249 | legend: { 250 | title: { 251 | text: '
in der jeweiligen Altersgruppe' 252 | }, 253 | align: 'left', 254 | verticalAlign: 'bottom', 255 | floating: true, 256 | labelFormatter: function () { 257 | return (this.from || '<') + ' - ' + (this.to || '>'); 258 | }, 259 | layout: 'vertical', 260 | valueDecimals: 0, 261 | backgroundColor: 'rgba(0,0,0,0.1)', 262 | symbolRadius: 0, 263 | symbolHeight: 14, 264 | borderRadius: 5, 265 | itemStyle:{ 266 | color: colorFont() 267 | } 268 | }, 269 | }); 270 | } 271 | 272 | function colorFont(){ 273 | if (window.matchMedia('(prefers-color-scheme: dark)').matches) { 274 | return "gray" 275 | } 276 | else{ 277 | return "#333333" 278 | } 279 | } 280 | 281 | var inputs; 282 | window.addEventListener("load", setup_inputs); 283 | 284 | function setup_inputs(){ 285 | inputs = document.querySelectorAll("input[type='radio']") 286 | for (input of inputs){ 287 | input.onclick = function(e){ 288 | for (series of map.series){ 289 | if (series.name == e.target.id) { 290 | series.show() 291 | } 292 | else{ 293 | series.hide() 294 | } 295 | } 296 | } 297 | if (input.checked){ 298 | input.click(); 299 | } 300 | } 301 | 302 | input_change_color = document.getElementById("change_color"); 303 | input_change_color.onclick = function(e){ 304 | if (input_change_color.checked){ 305 | change_color(old_colors,default_dataClasses) 306 | } 307 | else{ 308 | change_color(default_colors,default_dataClasses) 309 | } 310 | } 311 | // Check for initial input state 312 | if (input_change_color.checked){ 313 | change_color(old_colors,default_dataClasses) 314 | } 315 | 316 | // Get last commit date 317 | commit_date(); 318 | } 319 | 320 | 321 | function get_series_by_age_group(ag){ 322 | for (series of map.series){ 323 | if (series.name == ag){ 324 | return series 325 | } 326 | } 327 | return "NOT FOUND" 328 | } 329 | 330 | 331 | 332 | // ---------------------------------------------------------------------------- // 333 | // Utils 334 | // ---------------------------------------------------------------------------- // 335 | // throttle function, enforces a minimum time interval 336 | function throttle(fn, interval) { 337 | var lastCall, timeoutId; 338 | return function () { 339 | var now = new Date().getTime(); 340 | if (lastCall && now < (lastCall + interval) ) { 341 | // if we are inside the interval we wait 342 | clearTimeout(timeoutId); 343 | timeoutId = setTimeout(function () { 344 | lastCall = now; 345 | fn.call(); 346 | }, interval - (now - lastCall) ); 347 | } else { 348 | // otherwise, we directly call the function 349 | lastCall = now; 350 | fn.call(); 351 | } 352 | }; 353 | } 354 | 355 | // Project the data using Proj4 356 | function project(geojson, projection) { 357 | const projectPolygon = coordinate => { 358 | coordinate.forEach((lonLat, i) => { 359 | coordinate[i] = window.proj4(projection, lonLat); 360 | }); 361 | }; 362 | geojson.features.forEach(function (feature) { 363 | if (feature.geometry.type === 'Polygon') { 364 | feature.geometry.coordinates.forEach(projectPolygon); 365 | } else if (feature.geometry.type === 'MultiPolygon') { 366 | feature.geometry.coordinates.forEach(items => { 367 | items.forEach(projectPolygon); 368 | }); 369 | } 370 | }); 371 | } 372 | 373 | /** 374 | * Find a short tooltip label for local authority classes in germany. 375 | * Keep a reasonable default for unknown new classes. 376 | */ 377 | function localAuthorityToolTip(pointProperties) { 378 | var bez = pointProperties.BEZ; 379 | var prefix = bez + ' '; 380 | if (bez == 'Landkreis') { 381 | prefix = 'LK '; 382 | } 383 | if (bez == 'Kreis') { 384 | prefix = 'Kr '; 385 | } 386 | if (bez == 'Stadtkreis') { 387 | prefix = 'SK '; 388 | } 389 | if (bez == 'Kreisfreie Stadt') { 390 | prefix = 'Stadt '; 391 | } 392 | return prefix + pointProperties.GEN; 393 | } 394 | 395 | 396 | 397 | const commit_date = async () => { 398 | const response1 = await fetch('https://api.github.com/repos/semohr/risikogebiete_deutschland/git/refs/heads/master'); 399 | const refmain = await response1.json() 400 | const response2 = await fetch('https://api.github.com/repos/semohr/risikogebiete_deutschland/git/commits/'+refmain.object.sha); 401 | const lastcommit = await response2.json(); 402 | const lastcommitdate = lastcommit.committer.date; 403 | document.getElementById("lastcommitdate").innerHTML = lastcommitdate.replace("T"," ").replace("Z",""); 404 | } 405 | 406 | 407 | 408 | // Change color of highcharts map dynamically 409 | // Expects dicts: 410 | // { color: ["#ffffff", "#ffffff"]} 411 | /* { dataClasses: [{ 412 | to: 25 413 | }, { 414 | from: 25, 415 | to: 50 416 | }]} 417 | */ 418 | function change_color(colours,dataClasses){ 419 | map.update(colours,false); 420 | for (i=0;i { 4 | coordinate.forEach((lonLat, i) => { 5 | coordinate[i] = window.proj4(projection, lonLat); 6 | }); 7 | }; 8 | geojson.features.forEach(function (feature) { 9 | if (feature.geometry.type === 'Polygon') { 10 | feature.geometry.coordinates.forEach(projectPolygon); 11 | } else if (feature.geometry.type === 'MultiPolygon') { 12 | feature.geometry.coordinates.forEach(items => { 13 | items.forEach(projectPolygon); 14 | }); 15 | } 16 | }); 17 | } 18 | 19 | 20 | /* 21 | Lighten or darken a given color 22 | 23 | https://stackoverflow.com/questions/5560248/programmatically-lighten-or-darken-a-hex-color-or-rgb-and-blend-colors 24 | 25 | see stackoverflow for usage 26 | */ 27 | const pSBC=(p,c0,c1,l)=>{ 28 | let r,g,b,P,f,t,h,i=parseInt,m=Math.round,a=typeof(c1)=="string"; 29 | if(typeof(p)!="number"||p<-1||p>1||typeof(c0)!="string"||(c0[0]!='r'&&c0[0]!='#')||(c1&&!a))return null; 30 | if(!this.pSBCr)this.pSBCr=(d)=>{ 31 | let n=d.length,x={}; 32 | if(n>9){ 33 | [r,g,b,a]=d=d.split(","),n=d.length; 34 | if(n<3||n>4)return null; 35 | x.r=i(r[3]=="a"?r.slice(5):r.slice(4)),x.g=i(g),x.b=i(b),x.a=a?parseFloat(a):-1 36 | }else{ 37 | if(n==8||n==6||n<4)return null; 38 | if(n<6)d="#"+d[1]+d[1]+d[2]+d[2]+d[3]+d[3]+(n>4?d[4]+d[4]:""); 39 | d=i(d.slice(1),16); 40 | if(n==9||n==5)x.r=d>>24&255,x.g=d>>16&255,x.b=d>>8&255,x.a=m((d&255)/0.255)/1000; 41 | else x.r=d>>16,x.g=d>>8&255,x.b=d&255,x.a=-1 42 | }return x}; 43 | h=c0.length>9,h=a?c1.length>9?true:c1=="c"?!h:false:h,f=this.pSBCr(c0),P=p<0,t=c1&&c1!="c"?this.pSBCr(c1):P?{r:0,g:0,b:0,a:-1}:{r:255,g:255,b:255,a:-1},p=P?p*-1:p,P=1-p; 44 | if(!f||!t)return null; 45 | if(l)r=m(P*f.r+p*t.r),g=m(P*f.g+p*t.g),b=m(P*f.b+p*t.b); 46 | else r=m((P*f.r**2+p*t.r**2)**0.5),g=m((P*f.g**2+p*t.g**2)**0.5),b=m((P*f.b**2+p*t.b**2)**0.5); 47 | a=f.a,t=t.a,f=a>=0||t>=0,a=f?a<0?t:t<0?a:a*P+t*p:0; 48 | if(h)return"rgb"+(f?"a(":"(")+r+","+g+","+b+(f?","+m(a*1000)/1000:"")+")"; 49 | else return"#"+(4294967296+r*16777216+g*65536+b*256+(f?m(a*255):0)).toString(16).slice(1,f?undefined:-2) 50 | } 51 | 52 | 53 | /* 54 | Adds colorbar to an html element by id 55 | 56 | Parameters 57 | ---------- 58 | parent_id : string 59 | Id of the dom elements to add the colorbar to. 60 | Creates a div with id "color-bar" inside parent 61 | colors : array of strings 62 | Colors to use for the colorbar 63 | classes : array of ints 64 | Classes to use as colormap annotations 65 | */ 66 | function add_colorbar_and_annotations(parent_id,colors,classes){ 67 | //Append a defs (for definition) element to svg 68 | var cb = d3.select("#"+parent_id) 69 | .append("div") 70 | .attr("id","color-bar") 71 | .append("svg") 72 | .style("display", "block") 73 | .attr("width", 15+5) 74 | .attr("height", 20*(colors.length)); 75 | 76 | //Append a linearGradient element to the defs and give it a unique id 77 | var linearGradient = cb.append("linearGradient") 78 | .attr("id", "linear-gradient"); 79 | //Vertical gradient 80 | linearGradient 81 | .attr("x1", "0%") 82 | .attr("y1", "0%") 83 | .attr("x2", "0%") 84 | .attr("y2", "100%"); 85 | 86 | //Set the color for the start (0%) 87 | linearGradient.selectAll("stop") 88 | .data(colors) 89 | .enter() 90 | .append("stop") 91 | .attr("offset",(d,i)=>{ 92 | return i/colors.length*100 + 1/colors.length*50+"%"; 93 | }) 94 | .attr("stop-color",d=>{return d}); 95 | 96 | //Draw the rectangle and fill with gradient 97 | cb.append("rect") 98 | .attr("x", 0) 99 | .attr("y", 0) 100 | .attr("width", 15) 101 | .attr("height", "100%") 102 | .style("fill", "url(#linear-gradient)") 103 | .on("mousemove", mouseover_legend); 104 | 105 | // Add annotation lines 106 | console.log(classes); 107 | cb.selectAll("line") 108 | .data(classes) 109 | .enter() 110 | .append("line") 111 | .attr("stroke-width","1") 112 | .style("stroke", "black") 113 | // Set alpha to 100% 114 | .style("opacity",1) 115 | .attr("x1", 0) 116 | .attr("x2", 20) 117 | .attr("y1", (d,i)=>{ 118 | return i*20 + 10 119 | }) 120 | .attr("y2", (d,i)=>{ 121 | return i*20 + 10 122 | }); 123 | 124 | // Add annotation text 125 | let annotations = d3.select("#"+parent_id) 126 | .append("div") 127 | .attr("id","color-bar-texts") 128 | .style("height",20*(colors.length)+"px"); 129 | annotations.selectAll("div") 130 | .data(classes) 131 | .enter() 132 | .append("div") 133 | .attr("class","color-bar-text") 134 | .html((d,i)=>{ 135 | return d 136 | }); 137 | } 138 | 139 | function mouseover_legend(d,i){ 140 | //console.log(d.clientY - d3.select("#color-bar").node().getBoundingClientRect().top); 141 | } 142 | 143 | function getAllIndexes(arr, val) { 144 | var indexes = [], i; 145 | for(i = 0; i < arr.length; i++) 146 | if (arr[i] === val) 147 | indexes.push(i); 148 | return indexes; 149 | } 150 | 151 | // throttle function, enforces a minimum time interval 152 | function throttle(fn, interval) { 153 | var lastCall, timeoutId; 154 | return function () { 155 | var now = new Date().getTime(); 156 | if (lastCall && now < (lastCall + interval) ) { 157 | // if we are inside the interval we wait 158 | clearTimeout(timeoutId); 159 | timeoutId = setTimeout(function () { 160 | lastCall = now; 161 | fn.call(); 162 | }, interval - (now - lastCall) ); 163 | } else { 164 | // otherwise, we directly call the function 165 | lastCall = now; 166 | fn.call(); 167 | } 168 | }; 169 | } 170 | 171 | 172 | // seconds * minutes * hours * milliseconds = 1 day 173 | var oneDay = 60 * 60 * 24 * 1000; 174 | 175 | // --------------------------------------- 176 | // Circle with population density as size transitions 177 | // --------------------------------------- 178 | 179 | // Transition to circles as shape of regions 180 | function circles_svg(){ 181 | // Transition paths to other shape 182 | var paths = d3.select("svg").selectAll("path"); 183 | paths.transition() 184 | .delay(function(d,i){ 185 | // Delay by position of circle 186 | // From top to bottom 187 | let centroid = path.centroid(d); 188 | let y = centroid[1]; 189 | return (y-100)*3; 190 | }) 191 | .duration(1000) 192 | .ease(d3.easeSinInOut) 193 | .attr('d', circlePath); 194 | } 195 | 196 | // Transition to "normal" shape of regions 197 | function map_svg(){ 198 | // Transition paths to other shape 199 | var paths = d3.select("svg").selectAll("path"); 200 | paths.transition() 201 | .delay(function(d,i){ 202 | // Delay by position of circle 203 | // From top to bottom 204 | let centroid = path.centroid(d); 205 | let y = centroid[1]; 206 | return (svg.node().getBBox().height-y-100)*3; 207 | }) 208 | .duration(1000) 209 | .ease(d3.easeSinInOut) 210 | .attr('d', path); 211 | } 212 | 213 | // Computes the circle svg path give a previous path 214 | function circlePath(d,i){ 215 | var n_points = this.pathSegList.length; 216 | var center = path.centroid(d); 217 | var r = 5; 218 | var points = _points_circle(center,r,n_points+1); 219 | //convert to string 220 | let str = "M" + points[0][0] + "," + points[0][1]; 221 | for (let i = 1; i < points.length; i++) { 222 | str += "L" + points[i][0] + "," + points[i][1]; 223 | } 224 | str+="Z"; 225 | return str 226 | } 227 | 228 | // Returns a list of points on a circle 229 | function _points_circle(center,radius,num_points){ 230 | var points = []; 231 | for (var i = 0; i < num_points; i++) { 232 | var angle = i * 2 * Math.PI / num_points; 233 | points.push([center[0] + radius * Math.cos(angle),center[1] + radius * Math.sin(angle)]); 234 | } 235 | return points; 236 | } 237 | 238 | /*-------------------------------------------------------------- 239 | # Accordion 240 | # taken from my website at semohr.github.io 241 | --------------------------------------------------------------*/ 242 | document.addEventListener('DOMContentLoaded', function() { 243 | var acc = document.getElementsByClassName("accordion"); 244 | var i; 245 | 246 | for (i = 0; i < acc.length; i++) { 247 | acc[i].addEventListener("click", function() { 248 | /* Toggle between adding and removing the "active" class, 249 | to highlight the button that controls the panel */ 250 | this.classList.toggle("active"); 251 | 252 | /* Toggle between hiding and showing the active panel 253 | // save old display style 254 | */ 255 | var panel = this.nextElementSibling; 256 | var imges = this.getElementsByClassName("pm"); 257 | if (panel.style.display !== "none") { 258 | panel.style.display = "none"; 259 | imges[0].src = "assets/img/plus.png"; 260 | } 261 | else { 262 | 263 | imges[0].src = "assets/img/minus.png"; 264 | panel.style.display = ""; 265 | } 266 | let old = this.firstElementChild.innerHTML; 267 | this.firstElementChild.innerHTML = this.attributes["collapsed-header"].nodeValue; 268 | this.attributes["collapsed-header"].nodeValue = old; 269 | }); 270 | } 271 | }); 272 | -------------------------------------------------------------------------------- /assets/python/IFR_CFR_vs_cases.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import pandas as pd 3 | import covid19_data_retrieval as cov19 4 | 5 | sys.path.append("../toolbox/master") 6 | 7 | 8 | rki = cov19.RKI(True) 9 | 10 | # Population by landkreis 11 | sys.path.append("../SurvStat_RKI/") 12 | from Landkreise import Landkreise 13 | 14 | lkr = Landkreise("../SurvStat_RKI/risklayer_kreise.csv") 15 | data = rki.data 16 | data = data.set_index( 17 | [ 18 | "Landkreis", 19 | "IdLandkreis", 20 | "Altersgruppe", 21 | "date", 22 | "date_ref", 23 | "Bundesland", 24 | "IdBundesland", 25 | ] 26 | ) 27 | data = data.drop(columns=["Altersgruppe2", "FID", "Datenstand", "Geschlecht"]) 28 | data = data["confirmed"] # Ist Erkrankungsbegin? 29 | 30 | population = pd.read_csv("population.csv") 31 | population = population.set_index("age") 32 | 33 | 34 | # IFR 35 | def f(a): 36 | if a <= 100: 37 | return 0.1 * 10 ** (1 / 20 * (a - 82)) 38 | else: 39 | return 0.6 40 | 41 | 42 | def inzidenz_per_lk(): 43 | """ 44 | Get inzidenz per Landkreis and age group 45 | 46 | """ 47 | # Cet data with landkreis columns 48 | data_l = pd.DataFrame() 49 | for landkreis in data.index.get_level_values("Landkreis").unique(): 50 | data_l[landkreis] = ( 51 | data.xs(landkreis, level="Landkreis") 52 | .groupby(["Altersgruppe", "date"]) 53 | .sum() 54 | ) 55 | 56 | # Expand so each day is in the data and fill nans with 0 57 | data_l = data_l.groupby(level=0).apply( 58 | lambda x: x.reset_index(level=0, drop=True).asfreq("D") 59 | ) 60 | data_l = data_l.fillna(0) 61 | 62 | level_values = data_l.index.get_level_values 63 | data_l = data_l.groupby( 64 | [ 65 | level_values(i) 66 | for i in [ 67 | 0, 68 | ] 69 | ] 70 | + [pd.Grouper(freq="W-Sun", level="date")] 71 | ).sum() 72 | 73 | # Calculate inzidenz per 100.000 74 | inzidenz = pd.DataFrame() 75 | for landkreis in data_l.columns: 76 | # get id by name 77 | for key, value in lkr.lkrNames.items(): 78 | if value == landkreis: 79 | inzidenz[landkreis] = 100000 * data_l[landkreis] / lkr.lkrN[key] 80 | continue 81 | if landkreis == "LK Göttingen (alt)": # Expetion 82 | inzidenz[landkreis] = 100000 * data_l[landkreis] / lkr.lkrN[3159] 83 | continue 84 | # Weight with age groups 85 | for age in inzidenz.index.get_level_values(level="Altersgruppe").unique(): 86 | if age == "A00-A04": 87 | factor = (population[0 : 4 + 1].sum() / population.sum()).values[0] 88 | elif age == "A05-A14": 89 | factor = (population[5 : 14 + 1].sum() / population.sum()).values[0] 90 | elif age == "A15-A34": 91 | factor = (population[15 : 34 + 1].sum() / population.sum()).values[0] 92 | elif age == "A35-A59": 93 | factor = (population[35 : 59 + 1].sum() / population.sum()).values[0] 94 | elif age == "A60-A79": 95 | factor = (population[60 : 79 + 1].sum() / population.sum()).values[0] 96 | elif age == "A80+": 97 | factor = (population[80:].sum() / population.sum()).values[0] 98 | 99 | inzidenz[age:age] = inzidenz[age:age] / factor 100 | 101 | return inzidenz 102 | -------------------------------------------------------------------------------- /assets/python/create_mini_geojson.py: -------------------------------------------------------------------------------- 1 | # ------------------------------------------------------------------------------ # 2 | # We need to create a geojson file which is readable by amchart, also i want to remove some spacey vars 3 | # @Author: Sebastian B. Mohr 4 | # @Email: 5 | # @Created: 2020-10-16 17:23:55 6 | # @Last Modified: 2021-10-16 16:10:08 7 | # ------------------------------------------------------------------------------ # 8 | import ujson 9 | from decimal import * 10 | 11 | n = 6 12 | 13 | 14 | # Raw geo_file 15 | with open("../data/landkreise_simplify200.geojson") as json_file: 16 | data = ujson.load(json_file) 17 | 18 | ids = [] 19 | 20 | lk_pop = {} 21 | for i, entry in enumerate(data["features"]): 22 | # Map AGS as ID for amchart 23 | props = entry["properties"] 24 | props["id"] = props["AGS"] 25 | ids.append(props["id"]) 26 | 27 | if entry["geometry"]["type"] == "MultiPolygon": 28 | for i_a, a in enumerate(entry["geometry"]["coordinates"]): 29 | for i_b, b in enumerate(a): 30 | for i_c, c in enumerate(b): 31 | for i_d, d in enumerate(c): 32 | entry["geometry"]["coordinates"][i_a][i_b][i_c][i_d] = round( 33 | d, n 34 | ) 35 | 36 | if entry["geometry"]["type"] == "Polygon": 37 | for i_a, a in enumerate(entry["geometry"]["coordinates"]): 38 | for i_b, b in enumerate(a): 39 | for i_c, c in enumerate(b): 40 | entry["geometry"]["coordinates"][i_a][i_b][i_c] = round(c, n) 41 | 42 | # Delete some props to clean space 43 | ls_del = [ 44 | "ADE", 45 | "GF", 46 | "BSG", 47 | "RS", 48 | "SDV_RS", 49 | "IBZ", 50 | "BEM", 51 | "NBD", 52 | "SN_L", 53 | "SN_R", 54 | "SN_K", 55 | "SN_V1", 56 | "SN_V2", 57 | "SN_G", 58 | "FK_S3", 59 | "NUTS", 60 | "RS_0", 61 | "AGS_0", 62 | "WSK", 63 | "destatis", 64 | ] 65 | for key in ls_del: 66 | del props[key] 67 | 68 | if props["id"] == "16056": 69 | del data["features"][i] 70 | print(i, entry) 71 | 72 | # lk_pop[int(props["id"])] = props["destatis"]["population"] 73 | 74 | print(data) 75 | # Write file 76 | with open("../data/minified_landkreise.geo.json", "w") as outfile: 77 | ujson.dump(data, outfile) 78 | 79 | # Write file 80 | with open("../data/population_landkreise.json", "w") as outfile: 81 | ujson.dump(lk_pop, outfile) 82 | -------------------------------------------------------------------------------- /assets/python/requirements.txt: -------------------------------------------------------------------------------- 1 | git+https://github.com/jdehning/covid19_data_retrieval.git 2 | ujson 3 | requests 4 | numpy==1.20.3 5 | pandas==2.0.0 6 | h5py 7 | xarray==0.21.1 -------------------------------------------------------------------------------- /assets/python/timeseries_data.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | import covid19_data_retrieval as cov19 3 | import numpy as np 4 | import json 5 | from datetime import date, timedelta 6 | 7 | 8 | # Load data with covid19inference module 9 | rki = cov19.RKI() 10 | rki.download_all_available_data() 11 | 12 | # Load population data 13 | population = pd.read_csv( 14 | "../data/population_rki_age_groups.csv", 15 | encoding="cp1252", 16 | ) 17 | population = population.dropna() 18 | population["ags"] = population["ags"].astype(int) 19 | pop_rki_aligned = population.set_index(["ags", "Region", "NUTS3"]) 20 | 21 | # Placeholder for unknown data, fyi: we are not using it 22 | pop_rki_aligned["unbekannt"] = pop_rki_aligned.sum(axis=1) * 0.01 # 1% not known 23 | pop_rki_aligned["total"] = pop_rki_aligned.sum(axis=1) 24 | 25 | 26 | # Get raw data from retriever 27 | data_rki = rki.data 28 | 29 | # Last date in dataset 30 | date = rki.data["date"].max() 31 | index = pd.date_range(rki.data["date"].min(), rki.data["date"].max()) 32 | 33 | data_rki = data_rki.set_index( 34 | [ 35 | "IdLandkreis", 36 | "Altersgruppe", 37 | "date", 38 | ] 39 | ) 40 | data_rki = data_rki.groupby( 41 | [ 42 | "IdLandkreis", 43 | "Altersgruppe", 44 | "date", 45 | ] 46 | )["confirmed"].sum() 47 | data_rki = data_rki.groupby(level=[0, 1]).apply( 48 | lambda x: x.reset_index(level=[0, 1], drop=True).reindex(index) 49 | ) 50 | data_rki.index = data_rki.index.set_names("date", level=-1) 51 | data_rki = data_rki.fillna(0) 52 | 53 | cases_7_day_sum = data_rki.rolling(7).sum() 54 | 55 | 56 | """ Some strange exceptions 57 | - Add all landkreise for berlin together 58 | - Add total cases columns 59 | """ 60 | berlin_ags = [ 61 | 11001, 62 | 11002, 63 | 11003, 64 | 11004, 65 | 11005, 66 | 11006, 67 | 11007, 68 | 11008, 69 | 11009, 70 | 11010, 71 | 11011, 72 | 11012, 73 | ] 74 | berlin = cases_7_day_sum.loc[berlin_ags, :, :].groupby(["date", "Altersgruppe"]).sum() 75 | berlin = berlin.reset_index() 76 | berlin["IdLandkreis"] = 11000 77 | berlin_total = berlin.groupby(["date", "IdLandkreis"]).sum().reset_index() 78 | berlin_total["Altersgruppe"] = "total" 79 | 80 | total = cases_7_day_sum.groupby(["date", "IdLandkreis"]).sum() 81 | total = total.reset_index() 82 | total["Altersgruppe"] = "total" 83 | total = pd.concat([total, berlin_total]) 84 | 85 | cases = cases_7_day_sum.reset_index() 86 | cases = pd.concat([cases, berlin, total]) 87 | 88 | for id in berlin_ags: 89 | cases = cases[cases["IdLandkreis"] != id] 90 | 91 | cases = cases.set_index(["date", "IdLandkreis", "Altersgruppe"]) 92 | cases = cases.sort_index() 93 | 94 | """ # Calculate age dependent incidence 95 | For efficiency reasons we use apply and groupby here, iterating all rows 96 | would take forever 97 | """ 98 | 99 | 100 | def map_func(a): 101 | # Get age group and landkreisid from index 102 | ags = a.index[0][1] 103 | age_group = a.index[0][2] 104 | if ags == 2000: 105 | ags = 2 106 | # calc incidence per 100000 107 | return a / pop_rki_aligned.xs(ags, level="ags")[age_group][0] * 100000 108 | 109 | 110 | data = cases.groupby(["IdLandkreis", "Altersgruppe"], group_keys=False).apply( 111 | func=map_func 112 | ) # Apply function onto each row 113 | 114 | data = data.rename(columns={"confirmed": "inzidenz"}) 115 | data["weekly_cases"] = cases["confirmed"] 116 | data = data.sort_index() 117 | 118 | """ Select last 16 weeks 119 | """ 120 | end = date.today() 121 | begin = end - timedelta(days=7 * 16) 122 | 123 | data = data.loc[begin:end, :, :] 124 | 125 | 126 | """ write as compressed hdf5 127 | """ 128 | import h5py 129 | 130 | data = data.reset_index() 131 | data["date"] = data.apply(lambda row: row["date"].timestamp(), axis=1) 132 | data["IdLandkreis"] = data.apply(lambda row: row["IdLandkreis"], axis=1) 133 | data["weekly_cases"] = data.apply(lambda row: int(row["weekly_cases"]), axis=1) 134 | 135 | index = { 136 | x: dict(zip(map(int, data[x].unique()), range(len(data[x].unique())))) 137 | for x in ("date", "IdLandkreis") 138 | } 139 | index["Altersgruppe"] = dict( 140 | zip( 141 | map(str, data["Altersgruppe"].unique()), 142 | range(len(data["Altersgruppe"].unique())), 143 | ) 144 | ) 145 | 146 | cases = np.full( 147 | (len(index["date"]), len(index["IdLandkreis"]), len(index["Altersgruppe"])), -1 148 | ) 149 | incidence = np.full( 150 | (len(index["date"]), len(index["IdLandkreis"]), len(index["Altersgruppe"])), -1.0 151 | ) 152 | 153 | 154 | def get_index(date, IdLandkreis, Altersgruppe): 155 | return ( 156 | index["date"][date], 157 | index["IdLandkreis"][IdLandkreis], 158 | index["Altersgruppe"][Altersgruppe], 159 | ) 160 | 161 | 162 | for r in data.iterrows(): 163 | row = r[1] 164 | idx = get_index(row["date"], row["IdLandkreis"], row["Altersgruppe"]) 165 | cases[idx] = row["weekly_cases"] 166 | incidence[idx] = row["inzidenz"] 167 | 168 | with h5py.File("../data/timeseries_nd.hdf5", "w") as f: 169 | f.create_dataset( 170 | f"data/incidence", data=incidence, compression="gzip", compression_opts=9 171 | ) 172 | f.create_dataset( 173 | f"data/weekly_cases", data=cases, compression="gzip", compression_opts=9 174 | ) 175 | 176 | with open("../data/array_index.json", "w") as f: 177 | f.write(json.dumps(index)) 178 | -------------------------------------------------------------------------------- /assets/python/update_data.py: -------------------------------------------------------------------------------- 1 | # ------------------------------------------------------------------------------ # 2 | # Creates the 3 | # @Author: Sebastian B. Mohr 4 | # @Email: 5 | # @Created: 2020-10-15 14:08:49 6 | # @Last Modified: 2021-06-01 10:46:29 7 | # ------------------------------------------------------------------------------ # 8 | import ujson 9 | import pandas as pd 10 | import covid19_data_retrieval as cov19 11 | import numpy as np 12 | 13 | """ # Load data 14 | """ 15 | # Load data with cov19npis module 16 | rki = cov19.RKI() 17 | rki.download_all_available_data(force_download=True) 18 | 19 | 20 | # Load population data 21 | population = pd.read_csv( 22 | "../data/population_rki_age_groups.csv", 23 | encoding="cp1252", 24 | ) 25 | population["ags"] = population["ags"].dropna().astype(int) 26 | 27 | # FORMAT BS Should not be neccesary anymore: 28 | """ 29 | population = population.dropna() 30 | population = population.drop(columns="date") 31 | # Convert ags col to string 32 | population["ags"] = population["ags"].apply( 33 | lambda x: "0" + str(int(x)) if len(str(int(x))) == 4 else str(int(x)), 34 | ) 35 | 36 | 37 | for col in population.columns: 38 | population[col] = population[col].map(lambda x: x.strip("+-")) 39 | population[col].replace("", np.nan, inplace=True) 40 | population = population.dropna() 41 | population[col] = population[col].astype(int) 42 | """ 43 | 44 | pop_rki_aligned = population.set_index(["ags", "Region", "NUTS3"]) 45 | 46 | # Raw geo_file 47 | with open("../data/population_landkreise.json") as json_file: 48 | population_landkreise = ujson.load(json_file) 49 | 50 | pop_rki_aligned["unbekannt"] = pop_rki_aligned.sum(axis=1) * 0.01 # 1% not known 51 | 52 | # New cases with rolling 7 day sum: 53 | data_rki = rki.data 54 | 55 | index = pd.date_range(rki.data["date"].min(), rki.data["date"].max()) 56 | 57 | data_rki = data_rki.set_index( 58 | [ 59 | "IdLandkreis", 60 | "Altersgruppe", 61 | "date", 62 | ] 63 | ) 64 | data_rki = data_rki.groupby( 65 | [ 66 | "IdLandkreis", 67 | "Altersgruppe", 68 | "date", 69 | ] 70 | )["confirmed"].sum() 71 | data_rki = data_rki.groupby(level=[0, 1]).apply( 72 | lambda x: x.reset_index(level=[0, 1], drop=True).reindex(index) 73 | ) 74 | data_rki.index = data_rki.index.set_names("date", level=-1) 75 | data_rki = data_rki.fillna(0) 76 | 77 | cases_7_day_sum = data_rki.rolling(7).sum() 78 | 79 | # We want to store the LAST number of weekly new cases 80 | date = rki.data["date"].max() 81 | data_cases = cases_7_day_sum.xs(date, level="date") 82 | 83 | 84 | """ # Create data dict 85 | [IDLandkreis, [cases,incidenc]] 86 | """ 87 | data = {} 88 | for lk_id in data_cases.index.get_level_values(level="IdLandkreis").unique(): 89 | data_lk = data_cases.xs(lk_id, level="IdLandkreis") 90 | 91 | if lk_id == 5354: 92 | continue 93 | 94 | if lk_id == 2000: 95 | lk_id_pop = 2 96 | elif lk_id == 11001: 97 | lk_id_pop = 11000 98 | else: 99 | lk_id_pop = lk_id 100 | 101 | # BERLIN 102 | berlin = [ 103 | 11002, 104 | 11003, 105 | 11004, 106 | 11005, 107 | 11006, 108 | 11007, 109 | 11008, 110 | 11009, 111 | 11010, 112 | 11011, 113 | 11012, 114 | ] 115 | if lk_id in berlin: 116 | continue 117 | 118 | if lk_id == 11001: 119 | data_lk = data_cases.xs(lk_id, level="IdLandkreis") 120 | for id_b in berlin: 121 | data_lk += ( 122 | data_cases.xs(id_b, level="IdLandkreis") 123 | .reindex(data_lk.index) 124 | .fillna(0) 125 | ) 126 | lk_id = 11000 127 | 128 | # Normal 129 | data[lk_id] = {} 130 | data[lk_id]["weekly_cases"] = data_lk.sum() 131 | try: 132 | pop_lk = pop_rki_aligned.xs(lk_id_pop, level="ags") 133 | except: 134 | print(f"{lk_id}, {lk_id_pop}") 135 | continue 136 | 137 | try: 138 | data[lk_id]["inzidenz"] = ( 139 | data[lk_id]["weekly_cases"] 140 | * 100000 141 | / population["Insgesamt"].xs(lk_id, level="ags").values[0] 142 | ) 143 | except: 144 | data[lk_id]["inzidenz"] = ( 145 | data[lk_id]["weekly_cases"] 146 | * 100000 147 | / (pop_lk.sum(axis=1).values[0] - pop_lk["unbekannt"].values[0]) 148 | ) 149 | 150 | # Age groups 151 | for ag in data_lk.index: 152 | data[lk_id][f"weekly_cases_{ag}"] = data_lk[ag] 153 | try: 154 | data[lk_id][f"inzidenz_{ag}"] = data_lk[ag] * 100000 / pop_lk[ag].values[0] 155 | except: 156 | data[lk_id][f"inzidenz_{ag}"] = data_lk[ag] * 100000 / pop_lk[ag].values[0] 157 | 158 | # Write file 159 | with open("../data/data_latest.json", "w") as outfile: 160 | ujson.dump(data, outfile) 161 | 162 | # Additionally write csv 163 | df = pd.read_json(open("../data/data_latest.json", "r")) 164 | df = df.T 165 | df.index.name = "Landreis ID" 166 | df.to_csv("../data/data_latest.csv") 167 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Risikogebiete Deutschland 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |
35 | 36 | 37 |
38 | 39 | 40 |
41 |
42 |
Altersgruppen
43 |
44 |
45 |
    46 |
  • Alle
  • 47 |
  • 48 |
  • 49 |
  • 50 |
  • 51 |
  • 52 |
  • 53 |
54 | 55 |
56 |
Datum
57 | 58 |
59 |
60 | Alte Website
61 | Source-code & Daten 62 |
63 |
64 | 65 |
66 |
67 |
Fälle/100.000 EW
in der jeweiligen
Altersgruppe
68 |
69 |
70 |
71 |
72 | 73 | 74 | 345 | 346 | -------------------------------------------------------------------------------- /legacy.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Risikogebiete Deutschland 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 |
26 |
27 | 28 |
29 |
30 |
Altersgruppen
31 |
32 |
33 |
    34 |
  • Alle
  • 35 |
  • 36 |
  • 37 |
  • 38 |
  • 39 |
  • 40 |
  • 41 |
42 |
43 | 44 |
45 |
Aktualisiert am
Daten und Sourcecode sind hier verfügbar. 46 |
47 |
48 |
49 | 50 | 51 | 53 | 54 | 55 | 56 | 57 | 58 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 108 | 109 | 110 | --------------------------------------------------------------------------------