{ "cells": [ { "cell_type": "code", "id": "b1623679", "metadata": { "vscode": { "languageId": "plaintext" }, "ExecuteTime": { "end_time": "2025-08-19T23:39:53.836251Z", "start_time": "2025-08-19T23:39:53.832994Z" } }, "source": [ "from datetime import datetime\n", "\n", "import pandas\n", "import matplotlib.pyplot as plt" ], "outputs": [], "execution_count": 25 }, { "cell_type": "code", "id": "388b7c16-61c3-4ddc-ac85-bf2094cbfda0", "metadata": { "ExecuteTime": { "end_time": "2025-08-19T23:40:17.840982Z", "start_time": "2025-08-19T23:40:17.825194Z" } }, "source": [ "scorelog = pandas.read_csv('PolyGenStats-vinzenz-scorelog.csv', sep=',', dtype={'score': int, 'sourcename': str, 'name': str, 'mapx': int, 'mapy': int}, parse_dates=['when'], date_format='%d/%m/%Y %H:%M')\n", "scorelog" ], "outputs": [ { "data": { "text/plain": [ " when score sourcename name mapx mapy\n", "0 2025-08-08 20:14:00 100 First Visit Info Desk 216 505\n", "1 2025-08-08 20:19:00 282 Capture Info Desk 216 505\n", "2 2025-08-08 20:20:00 58 Capture Info Desk 216 505\n", "3 2025-08-08 20:22:00 100 First Visit Main Bar 190 570\n", "4 2025-08-08 20:23:00 100 First Visit Badge Tent 328 607\n", ".. ... ... ... ... ... ...\n", "896 2025-08-12 13:34:00 91 Capture 0E 0 0\n", "897 2025-08-12 13:39:00 50 Visit Pixelbar 379 602\n", "898 2025-08-12 13:42:00 164 Output Boost Site Sign 207 874\n", "899 2025-08-12 13:50:00 694 Capture Pixelbar 379 602\n", "900 2025-08-12 14:00:00 284 Output Boost Maker Days Eindhoven 115 749\n", "\n", "[901 rows x 6 columns]" ], "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
whenscoresourcenamenamemapxmapy
02025-08-08 20:14:00100First VisitInfo Desk216505
12025-08-08 20:19:00282CaptureInfo Desk216505
22025-08-08 20:20:0058CaptureInfo Desk216505
32025-08-08 20:22:00100First VisitMain Bar190570
42025-08-08 20:23:00100First VisitBadge Tent328607
.....................
8962025-08-12 13:34:0091Capture0E00
8972025-08-12 13:39:0050VisitPixelbar379602
8982025-08-12 13:42:00164Output BoostSite Sign207874
8992025-08-12 13:50:00694CapturePixelbar379602
9002025-08-12 14:00:00284Output BoostMaker Days Eindhoven115749
\n", "

901 rows × 6 columns

\n", "
" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 36 }, { "cell_type": "code", "id": "e8888706-1439-4b73-97cc-06dd416d9e23", "metadata": { "ExecuteTime": { "end_time": "2025-08-19T23:39:54.083367Z", "start_time": "2025-08-19T23:39:54.071862Z" } }, "source": [ "summary = pandas.read_csv('PolyGenStats-vinzenz-summary.csv', sep=',', dtype={'name': str, 'totalvisits': int, 'captures': int, 'totalheldduration': int, 'maxheldduration': int})\n", "summary" ], "outputs": [ { "data": { "text/plain": [ " name totalvisits captures totalheldduration \\\n", "0 Site Sign 15 21 61707 \n", "1 Maker Days Eindhoven 13 10 61044 \n", "2 Pixelbar 18 17 51151 \n", "3 Cold North 17 20 49590 \n", "4 Karaoke Bar 19 16 44169 \n", "5 CoderDojo Belgium 15 13 42973 \n", "6 Entrance Arch 19 18 40416 \n", "7 Main Bar 42 67 33999 \n", "8 Badge Tent 21 21 31452 \n", "9 Bridge over troubled waters 28 28 27990 \n", "10 BornHack 8 5 16419 \n", "11 Info Desk 19 23 13685 \n", "12 PolyGen Home Base 18 17 12688 \n", "13 Milliways 23 47 9763 \n", "14 Party Bar 12 11 9251 \n", "15 Heaven 15 9 8980 \n", "16 Chaos Mauldasch 21 30 7426 \n", "17 Adyen 24 22 7007 \n", "18 Tilde Industries 5 4 6215 \n", "19 Geraffel 9 6 5286 \n", "20 Food Hacking Base 16 13 4427 \n", "21 Rose Island Italian Embassy 9 7 3667 \n", "22 FALSE 7 5 2798 \n", "23 Matrix 7 6 2251 \n", "24 0E 1 1 91 \n", "\n", " maxheldduration \n", "0 46380 \n", "1 44313 \n", "2 36261 \n", "3 22971 \n", "4 23180 \n", "5 23237 \n", "6 28498 \n", "7 16913 \n", "8 18329 \n", "9 18829 \n", "10 7753 \n", "11 3304 \n", "12 5316 \n", "13 3386 \n", "14 7694 \n", "15 3756 \n", "16 1394 \n", "17 3483 \n", "18 3365 \n", "19 1782 \n", "20 993 \n", "21 1258 \n", "22 1969 \n", "23 1096 \n", "24 91 " ], "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nametotalvisitscapturestotalhelddurationmaxheldduration
0Site Sign15216170746380
1Maker Days Eindhoven13106104444313
2Pixelbar18175115136261
3Cold North17204959022971
4Karaoke Bar19164416923180
5CoderDojo Belgium15134297323237
6Entrance Arch19184041628498
7Main Bar42673399916913
8Badge Tent21213145218329
9Bridge over troubled waters28282799018829
10BornHack85164197753
11Info Desk1923136853304
12PolyGen Home Base1817126885316
13Milliways234797633386
14Party Bar121192517694
15Heaven15989803756
16Chaos Mauldasch213074261394
17Adyen242270073483
18Tilde Industries5462153365
19Geraffel9652861782
20Food Hacking Base16134427993
21Rose Island Italian Embassy9736671258
22FALSE7527981969
23Matrix7622511096
240E119191
\n", "
" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 27 }, { "cell_type": "code", "id": "3c3ca9ba-b545-4f10-a34d-4c35323363fc", "metadata": { "ExecuteTime": { "end_time": "2025-08-19T23:39:54.465235Z", "start_time": "2025-08-19T23:39:54.440411Z" } }, "source": [ "summary = pandas.merge(summary, scorelog[scorelog['sourcename'] == 'First Visit'][['name', 'mapx', 'mapy', 'when']], on='name')\n", "summary = pandas.merge(summary, scorelog[['name', 'score']].groupby('name').sum(), on='name', validate='1:1')\n", "summary.rename(columns={'when': 'first_visit', 'score': 'total_score'}, inplace=True)\n", "\n", "summary" ], "outputs": [ { "data": { "text/plain": [ " name totalvisits captures totalheldduration \\\n", "0 Site Sign 15 21 61707 \n", "1 Maker Days Eindhoven 13 10 61044 \n", "2 Pixelbar 18 17 51151 \n", "3 Cold North 17 20 49590 \n", "4 Karaoke Bar 19 16 44169 \n", "5 CoderDojo Belgium 15 13 42973 \n", "6 Entrance Arch 19 18 40416 \n", "7 Main Bar 42 67 33999 \n", "8 Badge Tent 21 21 31452 \n", "9 Bridge over troubled waters 28 28 27990 \n", "10 BornHack 8 5 16419 \n", "11 Info Desk 19 23 13685 \n", "12 PolyGen Home Base 18 17 12688 \n", "13 Milliways 23 47 9763 \n", "14 Party Bar 12 11 9251 \n", "15 Heaven 15 9 8980 \n", "16 Chaos Mauldasch 21 30 7426 \n", "17 Adyen 24 22 7007 \n", "18 Tilde Industries 5 4 6215 \n", "19 Geraffel 9 6 5286 \n", "20 Food Hacking Base 16 13 4427 \n", "21 Rose Island Italian Embassy 9 7 3667 \n", "22 FALSE 7 5 2798 \n", "23 Matrix 7 6 2251 \n", "24 0E 1 1 91 \n", "\n", " maxheldduration mapx mapy first_visit score \n", "0 46380 207 874 2025-08-08 22:12:00 63688 \n", "1 44313 115 749 2025-08-08 22:28:00 62440 \n", "2 36261 379 602 2025-08-09 00:42:00 52601 \n", "3 22971 305 402 2025-08-08 21:56:00 50757 \n", "4 23180 292 446 2025-08-08 21:55:00 45272 \n", "5 23237 34 523 2025-08-08 21:39:00 44374 \n", "6 28498 240 916 2025-08-08 22:10:00 41486 \n", "7 16913 190 570 2025-08-08 20:22:00 36884 \n", "8 18329 328 607 2025-08-08 20:23:00 32599 \n", "9 18829 251 553 2025-08-09 02:28:00 29550 \n", "10 7753 82 337 2025-08-10 19:51:00 17711 \n", "11 3304 216 505 2025-08-08 20:14:00 17026 \n", "12 5316 322 591 2025-08-09 17:52:00 14376 \n", "13 3386 95 498 2025-08-09 17:07:00 11003 \n", "14 7694 67 289 2025-08-08 22:54:00 13340 \n", "15 3756 183 227 2025-08-08 21:46:00 10057 \n", "16 1394 164 635 2025-08-08 22:37:00 8564 \n", "17 3483 120 637 2025-08-08 22:34:00 8281 \n", "18 3365 361 468 2025-08-11 17:42:00 6515 \n", "19 1782 188 166 2025-08-08 23:03:00 6899 \n", "20 993 119 571 2025-08-10 18:31:00 5308 \n", "21 1258 41 475 2025-08-10 04:12:00 4167 \n", "22 1969 163 425 2025-08-08 23:17:00 3863 \n", "23 1096 164 731 2025-08-11 15:33:00 2696 \n", "24 91 0 0 2025-08-12 13:32:00 191 " ], "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nametotalvisitscapturestotalhelddurationmaxhelddurationmapxmapyfirst_visitscore
0Site Sign152161707463802078742025-08-08 22:12:0063688
1Maker Days Eindhoven131061044443131157492025-08-08 22:28:0062440
2Pixelbar181751151362613796022025-08-09 00:42:0052601
3Cold North172049590229713054022025-08-08 21:56:0050757
4Karaoke Bar191644169231802924462025-08-08 21:55:0045272
5CoderDojo Belgium15134297323237345232025-08-08 21:39:0044374
6Entrance Arch191840416284982409162025-08-08 22:10:0041486
7Main Bar426733999169131905702025-08-08 20:22:0036884
8Badge Tent212131452183293286072025-08-08 20:23:0032599
9Bridge over troubled waters282827990188292515532025-08-09 02:28:0029550
10BornHack85164197753823372025-08-10 19:51:0017711
11Info Desk19231368533042165052025-08-08 20:14:0017026
12PolyGen Home Base18171268853163225912025-08-09 17:52:0014376
13Milliways234797633386954982025-08-09 17:07:0011003
14Party Bar121192517694672892025-08-08 22:54:0013340
15Heaven159898037561832272025-08-08 21:46:0010057
16Chaos Mauldasch2130742613941646352025-08-08 22:37:008564
17Adyen2422700734831206372025-08-08 22:34:008281
18Tilde Industries54621533653614682025-08-11 17:42:006515
19Geraffel96528617821881662025-08-08 23:03:006899
20Food Hacking Base161344279931195712025-08-10 18:31:005308
21Rose Island Italian Embassy9736671258414752025-08-10 04:12:004167
22FALSE75279819691634252025-08-08 23:17:003863
23Matrix76225110961647312025-08-11 15:33:002696
240E119191002025-08-12 13:32:00191
\n", "
" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 28 }, { "cell_type": "code", "id": "9f15abc665d134d7", "metadata": { "ExecuteTime": { "end_time": "2025-08-19T23:39:55.025235Z", "start_time": "2025-08-19T23:39:55.004437Z" } }, "source": [ "boosts = scorelog[scorelog['sourcename'] == 'Output Boost'][['name', 'score']].groupby('name')\n", "\n", "total_boosts = boosts.sum()\n", "total_boosts['totalboostduration'] = total_boosts['score'].apply(lambda x: 10 * x)\n", "total_boosts.rename(columns={'score': 'totalboostscore'}, inplace=True)\n", "summary = pandas.merge(summary, total_boosts, on='name')\n", "del total_boosts\n", "\n", "max_boosts = boosts.max()\n", "max_boosts['maxboostduration'] = max_boosts['score'].apply(lambda x: 10 * x)\n", "max_boosts.rename(columns={'score': 'maxboostscore'}, inplace=True)\n", "summary = pandas.merge(summary, max_boosts, on='name')\n", "del max_boosts\n", "\n", "del boosts\n", "summary" ], "outputs": [ { "data": { "text/plain": [ " name totalvisits captures totalheldduration \\\n", "0 Site Sign 15 21 61707 \n", "1 Maker Days Eindhoven 13 10 61044 \n", "2 Cold North 17 20 49590 \n", "3 Karaoke Bar 19 16 44169 \n", "4 CoderDojo Belgium 15 13 42973 \n", "5 Entrance Arch 19 18 40416 \n", "6 Main Bar 42 67 33999 \n", "7 Badge Tent 21 21 31452 \n", "8 Bridge over troubled waters 28 28 27990 \n", "9 BornHack 8 5 16419 \n", "10 Info Desk 19 23 13685 \n", "11 PolyGen Home Base 18 17 12688 \n", "12 Milliways 23 47 9763 \n", "13 Party Bar 12 11 9251 \n", "14 Heaven 15 9 8980 \n", "15 Chaos Mauldasch 21 30 7426 \n", "16 Adyen 24 22 7007 \n", "17 Geraffel 9 6 5286 \n", "18 Food Hacking Base 16 13 4427 \n", "19 FALSE 7 5 2798 \n", "20 Matrix 7 6 2251 \n", "\n", " maxheldduration mapx mapy first_visit score totalboostscore \\\n", "0 46380 207 874 2025-08-08 22:12:00 63688 681 \n", "1 44313 115 749 2025-08-08 22:28:00 62440 696 \n", "2 22971 305 402 2025-08-08 21:56:00 50757 267 \n", "3 23180 292 446 2025-08-08 21:55:00 45272 103 \n", "4 23237 34 523 2025-08-08 21:39:00 44374 101 \n", "5 28498 240 916 2025-08-08 22:10:00 41486 70 \n", "6 16913 190 570 2025-08-08 20:22:00 36884 735 \n", "7 18329 328 607 2025-08-08 20:23:00 32599 47 \n", "8 18829 251 553 2025-08-09 02:28:00 29550 110 \n", "9 7753 82 337 2025-08-10 19:51:00 17711 842 \n", "10 3304 216 505 2025-08-08 20:14:00 17026 2341 \n", "11 5316 322 591 2025-08-09 17:52:00 14376 738 \n", "12 3386 95 498 2025-08-09 17:07:00 11003 40 \n", "13 7694 67 289 2025-08-08 22:54:00 13340 3439 \n", "14 3756 183 227 2025-08-08 21:46:00 10057 277 \n", "15 1394 164 635 2025-08-08 22:37:00 8564 38 \n", "16 3483 120 637 2025-08-08 22:34:00 8281 24 \n", "17 1782 188 166 2025-08-08 23:03:00 6899 1113 \n", "18 993 119 571 2025-08-10 18:31:00 5308 31 \n", "19 1969 163 425 2025-08-08 23:17:00 3863 665 \n", "20 1096 164 731 2025-08-11 15:33:00 2696 45 \n", "\n", " totalboostduration maxboostscore maxboostduration \n", "0 6810 199 1990 \n", "1 6960 284 2840 \n", "2 2670 142 1420 \n", "3 1030 47 470 \n", "4 1010 101 1010 \n", "5 700 70 700 \n", "6 7350 537 5370 \n", "7 470 28 280 \n", "8 1100 76 760 \n", "9 8420 324 3240 \n", "10 23410 2262 22620 \n", "11 7380 190 1900 \n", "12 400 35 350 \n", "13 34390 3350 33500 \n", "14 2770 125 1250 \n", "15 380 38 380 \n", "16 240 15 150 \n", "17 11130 902 9020 \n", "18 310 28 280 \n", "19 6650 651 6510 \n", "20 450 45 450 " ], "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nametotalvisitscapturestotalhelddurationmaxhelddurationmapxmapyfirst_visitscoretotalboostscoretotalboostdurationmaxboostscoremaxboostduration
0Site Sign152161707463802078742025-08-08 22:12:006368868168101991990
1Maker Days Eindhoven131061044443131157492025-08-08 22:28:006244069669602842840
2Cold North172049590229713054022025-08-08 21:56:005075726726701421420
3Karaoke Bar191644169231802924462025-08-08 21:55:0045272103103047470
4CoderDojo Belgium15134297323237345232025-08-08 21:39:004437410110101011010
5Entrance Arch191840416284982409162025-08-08 22:10:00414867070070700
6Main Bar426733999169131905702025-08-08 20:22:003688473573505375370
7Badge Tent212131452183293286072025-08-08 20:23:00325994747028280
8Bridge over troubled waters282827990188292515532025-08-09 02:28:0029550110110076760
9BornHack85164197753823372025-08-10 19:51:001771184284203243240
10Info Desk19231368533042165052025-08-08 20:14:0017026234123410226222620
11PolyGen Home Base18171268853163225912025-08-09 17:52:001437673873801901900
12Milliways234797633386954982025-08-09 17:07:00110034040035350
13Party Bar121192517694672892025-08-08 22:54:0013340343934390335033500
14Heaven159898037561832272025-08-08 21:46:001005727727701251250
15Chaos Mauldasch2130742613941646352025-08-08 22:37:0085643838038380
16Adyen2422700734831206372025-08-08 22:34:0082812424015150
17Geraffel96528617821881662025-08-08 23:03:0068991113111309029020
18Food Hacking Base161344279931195712025-08-10 18:31:0053083131028280
19FALSE75279819691634252025-08-08 23:17:00386366566506516510
20Matrix76225110961647312025-08-11 15:33:0026964545045450
\n", "
" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 29 }, { "cell_type": "code", "id": "583c3529-d482-4891-84fa-880920f631b6", "metadata": { "ExecuteTime": { "end_time": "2025-08-19T23:39:55.305636Z", "start_time": "2025-08-19T23:39:55.152953Z" } }, "source": [ "plt.scatter(summary['mapx'], summary['mapy'])\n", "plt.title('Map positions of reactors')\n", "plt.show()" ], "outputs": [ { "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGzCAYAAAAFROyYAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjUsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvWftoOwAAAAlwSFlzAAAPYQAAD2EBqD+naQAARQZJREFUeJzt3X1cVHXe//H3gALeMEOgMJA3kbkqYZaUOq3dSoKRWyvWpWmReeVvDdvVyi33Ks1u1rK2NtvSvemhbWZttpWrV2KkaetKat5s3pRrLokGA6Uxgxqg8P394cWsIyiMInOA1/PxOI9Hc853Zj7nO4Pz7pzz/R6bMcYIAADAQkKCXQAAAMDJCCgAAMByCCgAAMByCCgAAMByCCgAAMByCCgAAMByCCgAAMByCCgAAMByCCgAAMByCCgAfK699lpde+21DWp711136YILLjin9TSF3bt3a+jQoXI4HLLZbHr//feDXRIAEVDQSi1YsEA2m002m01r166ttd0Yo65du8pms+mmm24KQoXWUFhYqMcee0xbt24NdinnTFZWlrZt26annnpKr7/+ui6//PJgl9QgreGzQevWJtgFAMEUERGhRYsWafDgwX7r16xZo/379ys8PDxIlQXHhx9+6Pe4sLBQM2fO1AUXXKBLL73Ub9sf//hHVVdXN2F1je+HH35QXl6e/ud//keTJk0KdjkBOd1nA7QEHEFBq3bjjTdq8eLFOnbsmN/6RYsWKSUlRU6nM0iVBUdYWJjCwsIa1LZt27bNPsB9++23kqSoqKgzen55eXmzD2knO3z4cLBLACQRUNDKjR49WgcOHFBubq5vXWVlpd555x3dfvvtdT7nueee05VXXqmYmBi1a9dOKSkpeuedd2q1s9lsmjRpkt544w316tVLERERSklJ0SeffFJvXatXr5bNZtNf/vIX/epXv5LT6VSHDh30k5/8RPv27avVfvHixUpJSVG7du3UqVMnjR07Vt98841fG7fbrXHjxqlLly4KDw9XfHy8br75Zn399de+Nideg7J69WpdccUVkqRx48b5ToktWLBAUt3XoBw+fFgPPPCAunbtqvDwcPXq1UvPPfecTr5pek3fvP/++0pOTlZ4eLguvvhi5eTk+LUrKyvT5MmTdcEFFyg8PFyxsbG64YYbtHnz5nr7cMuWLRo2bJjsdrs6duyoIUOG6NNPP/Vtf+yxx9S9e3dJ0tSpU2Wz2U57TU3NZ/LWW2/pkUce0fnnn6/27dvL6/VKktavX6/09HQ5HA61b99e11xzjf7xj3/4vcbevXt17733qlevXmrXrp1iYmJ06623+n0GNUpLSzVlyhTfvnfp0kV33nmnvvvuu3o/G6lh34m77rpLHTt21J49e3TjjTcqMjJSY8aMkXT82pzMzEw5nU5FRESoS5cuGjVqlDweT719DzQGTvGgVbvgggvkcrn05ptvatiwYZKk5cuXy+PxaNSoUZozZ06t57z44ov6yU9+ojFjxqiyslJvvfWWbr31Vi1btkwZGRl+bdesWaO//OUv+vnPf67w8HC98sorSk9P14YNG5ScnFxvfU899ZRsNpseeughlZSU6Le//a1SU1O1detWtWvXTtLx62nGjRunK664QrNmzVJxcbFefPFF/eMf/9CWLVt8RwcyMzO1Y8cO3XfffbrgggtUUlKi3NxcFRQU1PnD3KdPHz3++OOaPn26JkyYoKuuukqSdOWVV9ZZqzFGP/nJT/Txxx9r/PjxuvTSS7VixQpNnTpV33zzjV544QW/9mvXrtW7776re++9V5GRkZozZ44yMzNVUFCgmJgYSdLPfvYzvfPOO5o0aZKSkpJ04MABrV27Vl988YX69+9/yn7bsWOHrrrqKtntdv3yl79U27Zt9fvf/17XXnut1qxZo4EDB2rEiBGKiorSlClTNHr0aN14443q2LFjvZ/JE088obCwMD344IOqqKhQWFiYVq1apWHDhiklJUUzZsxQSEiI5s+fr+uvv15///vfNWDAAEnSxo0btW7dOo0aNUpdunTR119/rblz5+raa6/Vzp071b59e0nSoUOHdNVVV+mLL77Q3Xffrf79++u7777T3/72N+3fv7/ez6ah3wlJOnbsmNLS0jR48GA999xzat++vSorK5WWlqaKigrdd999cjqd+uabb7Rs2TKVlpbK4XDU20/AWTNAKzR//nwjyWzcuNH87ne/M5GRkebIkSPGGGNuvfVWc9111xljjOnevbvJyMjwe25NuxqVlZUmOTnZXH/99X7rJRlJ5rPPPvOt27t3r4mIiDA//elPT1vfxx9/bCSZ888/33i9Xt/6t99+20gyL774ou+9Y2NjTXJysvnhhx987ZYtW2YkmenTpxtjjPn++++NJPPss8+e9n2vueYac8011/geb9y40Ugy8+fPr9U2KyvLdO/e3ff4/fffN5LMk08+6ddu5MiRxmazma+++sq3TpIJCwvzW/fPf/7TSDIvvfSSb53D4TDZ2dmnrbkut9xyiwkLCzN79uzxrSssLDSRkZHm6quv9q3Lz89vUL8Y85/P5MILL/T7DlRXV5uePXuatLQ0U11d7Vt/5MgRk5iYaG644Qa/dSfLy8szksyf//xn37rp06cbSebdd9+t1b7mPU712TT0O2HM8c9Qknn44Yf9XmPLli1Gklm8eHF93QKcM5ziQat322236YcfftCyZctUVlamZcuWnfL0jiTfkQtJ+v777+XxeHTVVVfVedrB5XIpJSXF97hbt266+eabtWLFClVVVdVb25133qnIyEjf45EjRyo+Pl4ffPCBJOmzzz5TSUmJ7r33XkVERPjaZWRkqHfv3vrf//1fX81hYWFavXq1vv/++3rf90x88MEHCg0N1c9//nO/9Q888ICMMVq+fLnf+tTUVPXo0cP3+JJLLpHdbte///1v37qoqCitX79ehYWFDa6jqqpKH374oW655RZdeOGFvvXx8fG6/fbbtXbtWt9pmTORlZXl9x3YunWrdu/erdtvv10HDhzQd999p++++06HDx/WkCFD9Mknn/iuUznxeUePHtWBAwd00UUXKSoqyu/789e//lX9+vXTT3/601rvb7PZTltfQ78TJ5o4caLf45ojJCtWrNCRI0dO+37AuUJAQavXuXNnpaamatGiRXr33XdVVVWlkSNHnrL9smXLNGjQIEVERCg6OlqdO3fW3Llz6zw337Nnz1rrfvSjH+nIkSO+CzRP5+Tn22w2XXTRRb5rFvbu3StJ6tWrV63n9u7d27c9PDxczzzzjJYvX664uDhdffXVmj17ttxud701NNTevXuVkJDgF6ik46eKTqy1Rrdu3Wq9xnnnnecXoGbPnq3t27era9euGjBggB577DG/AFOXb7/9VkeOHKmzT/r06aPq6uo6r+NpqMTERL/Hu3fvlnQ8uHTu3Nlv+dOf/qSKigrfd+OHH37Q9OnTfdfodOrUSZ07d1Zpaanf92fPnj0NOgVYl4Z+J2q0adNGXbp0qbWP999/v/70pz+pU6dOSktL08svv8z1J2hSBBRA0u23367ly5dr3rx5GjZs2ClHdfz973/XT37yE0VEROiVV17RBx98oNzcXN1+++21LgS1msmTJ+tf//qXZs2apYiICD366KPq06ePtmzZEpR6QkND61x/Yj/edttt+ve//62XXnpJCQkJevbZZ3XxxRfXOhrTlE48CiLJd3Tk2WefVW5ubp1LzbUt9913n5566inddtttevvtt/Xhhx8qNzdXMTExQRsNFB4erpCQ2j8Fv/nNb/T555/rV7/6lX744Qf9/Oc/18UXX6z9+/cHoUq0RgQUQNJPf/pThYSE6NNPPz3t6Z2//vWvioiI0IoVK3T33Xdr2LBhSk1NPWX7mv+7PtG//vUvtW/fXp07d663rpOfb4zRV1995buotWYUyq5du2o9d9euXb7tNXr06KEHHnhAH374obZv367Kykr95je/OeX713c64UTdu3dXYWGhysrK/NZ/+eWXfrUGKj4+Xvfee6/ef/995efnKyYmRk899dQp23fu3Fnt27evs0++/PJLhYSEqGvXrmdUS11qTlPZ7XalpqbWubRt21aS9M477ygrK0u/+c1vNHLkSN1www0aPHiwSktLa73m9u3bT/u+p/psAv1OnE7fvn31yCOP6JNPPtHf//53ffPNN5o3b16Dnw+cDQIKIKljx46aO3euHnvsMQ0fPvyU7UJDQ2Wz2fyuH/n6669POT16Xl6e37UF+/bt05IlSzR06NBTHkE40Z///Ge/H/x33nlHRUVFvhFHl19+uWJjYzVv3jxVVFT42i1fvlxffPGFb1TRkSNHVF5e7vfaPXr0UGRkpN/zTtahQwdJqvUDWpcbb7xRVVVV+t3vfue3/oUXXpDNZvPV3FBVVVW1TinExsYqISHhtDWHhoZq6NChWrJkid/w3eLiYt+kfHa7PaBaTiclJUU9evTQc889p0OHDtXafuKpvNDQ0FpH2l566aVa1yNlZmbqn//8p957771ar1fz/FN9Ng39TpyO1+utNTdQ3759FRISctq+BxoTw4yB/5OVlVVvm4yMDD3//PNKT0/X7bffrpKSEr388su66KKL9Pnnn9dqn5ycrLS0NL9hxpI0c+bMBtUUHR2twYMHa9y4cSouLtZvf/tbXXTRRbrnnnskHZ8s7ZlnntG4ceN0zTXXaPTo0b4hpRdccIGmTJki6fhRmyFDhui2225TUlKS2rRpo/fee0/FxcUaNWrUKd+/R48eioqK0rx58xQZGakOHTpo4MCBta7DkKThw4fruuuu0//8z//o66+/Vr9+/fThhx9qyZIlmjx5st8FsQ1RVlamLl26aOTIkerXr586duyojz76SBs3bjztUR9JevLJJ5Wbm6vBgwfr3nvvVZs2bfT73/9eFRUVmj17dkB11CckJER/+tOfNGzYMF188cUaN26czj//fH3zzTf6+OOPZbfbtXTpUknSTTfdpNdff10Oh0NJSUnKy8vTRx995BtWXWPq1Kl65513dOutt+ruu+9WSkqKDh48qL/97W+aN2+e+vXrd9rPpiHfidNZtWqVJk2apFtvvVU/+tGPdOzYMb3++usKDQ1VZmZmo/YfcErBHEIEBMuJw4xPp65hxq+++qrp2bOnCQ8PN7179zbz5883M2bMMCf/OUky2dnZZuHChb72l112mfn444/rra9mSOubb75ppk2bZmJjY027du1MRkaG2bt3b632f/nLX8xll11mwsPDTXR0tBkzZozZv3+/b/t3331nsrOzTe/evU2HDh2Mw+EwAwcONG+//bbf65w8zNgYY5YsWWKSkpJMmzZt/Ia1njzM2BhjysrKzJQpU0xCQoJp27at6dmzp3n22Wf9ht+e2Dcn6969u8nKyjLGGFNRUWGmTp1q+vXrZyIjI02HDh1Mv379zCuvvFJv/xljzObNm01aWprp2LGjad++vbnuuuvMunXr/NqcyTDjUw293bJlixkxYoSJiYkx4eHhpnv37ua2224zK1eu9LX5/vvvzbhx40ynTp1Mx44dTVpamvnyyy/99rvGgQMHzKRJk8z5559vwsLCTJcuXUxWVpb57rvvfG1O9dkYU/93wpjjn2GHDh1q7cu///1vc/fdd5sePXqYiIgIEx0dba677jrz0Ucf1dtPQGOxGWPxK/uAZspmsyk7O7vWKY+GWL16ta677jotXrz4tCOKAKCl4hoUAABgOQQUAABgOQQUAABgOVyDAgAALIcjKAAAwHIIKAAAwHKa5URt1dXVKiwsVGRkZEBTcQMAgOAxxqisrEwJCQl13gPqRM0yoBQWFjbqvTQAAEDT2bdvX627aJ+sWQaUmtu579u3r1HvqQEAAM4dr9errl27+n7HT6dZBpSa0zp2u52AAgBAM9OQyzO4SBYAAFgOAQUAAFgOAQUAAFgOAQUAAFgOAQUAAFgOAQUAAFgOAQUAAFgOAQUAAFhOs5yo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XW5urux2u5KSkppmR5pQfX1Wl61bt0qS3/esNfVZXaqrq1VRUcF37GwF+yrdluiBBx4wq1evNvn5+eYf//iHSU1NNZ06dTIlJSXGGGN+9rOfmW7duplVq1aZzz77zLhcLuNyuYJcddMqKyszW7ZsMVu2bDGSzPPPP2+2bNli9u7da4wx5umnnzZRUVFmyZIl5vPPPzc333yzSUxMND/88IPvNdLT081ll11m1q9fb9auXWt69uxpRo8eHaxdOudO12dlZWXmwQcfNHl5eSY/P9989NFHpn///qZnz56mvLzc9xqtqc8mTpxoHA6HWb16tSkqKvItR44c8bWp72/x2LFjJjk52QwdOtRs3brV5OTkmM6dO5tp06YFY5fOufr67KuvvjKPP/64+eyzz0x+fr5ZsmSJufDCC83VV1/te43W1mcPP/ywWbNmjcnPzzeff/65efjhh43NZjMffvihMYbv2NkgoJwD//Vf/2Xi4+NNWFiYOf/8881//dd/ma+++sq3/YcffjD33nuvOe+880z79u3NT3/6U1NUVBTEipvexx9/bCTVWrKysowxx4caP/rooyYuLs6Eh4ebIUOGmF27dvm9xoEDB8zo0aNNx44djd1uN+PGjTNlZWVB2Jumcbo+O3LkiBk6dKjp3Lmzadu2renevbu55557/IYuGtO6+qyuvpJk5s+f72vTkL/Fr7/+2gwbNsy0a9fOdOrUyTzwwAPm6NGjTbw3TaO+PisoKDBXX321iY6ONuHh4eaiiy4yU6dONR6Px+91WlOf3X333aZ79+4mLCzMdO7c2QwZMsQXTozhO3Y2bMYY03THawAAAOrHNSgAAMByCCgAAMByCCgAAMByCCgAAMByCCgAAMByCCgAAMByCCgAAMByCCgAAMByCCgAAMByCCgAAMByCCgAAMBy/j/DQcMmz7HH4AAAAABJRU5ErkJggg==" }, "metadata": {}, "output_type": "display_data" } ], "execution_count": 30 }, { "cell_type": "code", "id": "1b54986e-4f48-4208-96ad-61203e74c38c", "metadata": { "ExecuteTime": { "end_time": "2025-08-19T23:39:55.512773Z", "start_time": "2025-08-19T23:39:55.405984Z" } }, "source": [ "plt.hist2d(scorelog['mapx'], scorelog['mapy'], weights=scorelog['score'], density=False, bins=50)\n", "plt.show()" ], "outputs": [ { "data": { "text/plain": [ "
" ], "image/png": "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GKPCwkItX75ca9euVVZWVtD+UL4H3G63tmzZEhRra9askcPhCFwat9mJ1qAlmzdvlqSgcyGa1+DbNDU1qba29ow4D75N8xq0JOrPg0h/Sre1li1bZpKTk83ixYvN9u3bzeTJk01aWlrQp5JjyfTp0826devM7t27zbvvvmtyc3NN9+7dTXV1tTHm37fW9erVy6xdu9Zs3LjRuN1u43a7IzzrU3PgwAGzadMms2nTJiPJzJs3z2zatMl89tlnxph/32aclpZmVqxYYT766CNzzTXXtHib8UUXXWTKysrMO++8Y/r27RtVt9cac/x1OHDggLnzzjuNx+Mxu3fvNn//+9/NxRdfbPr27WuOHDkS+DuifR2mTJliUlNTzbp164JunTx8+HBgzIm+B5pvrRw5cqTZvHmzWb16tenRo4e1t1Ye7URrsGvXLnP//febjRs3mt27d5sVK1aYc845x1x++eWBvyPa18AYY2bOnGlKS0vN7t27zUcffWRmzpxp4uLizBtvvGGMif3zwJjjr0EsngdRFyjGGPP444+bXr16maSkJDN06FCzfv36SE8pbK677jqTkZFhkpKSzHe+8x1z3XXXmV27dgX2f/PNN+bWW281Xbp0MR06dDA/+tGPzJdffhnBGZ+6N99800g65jVhwgRjzL9vNZ41a5ZxOp0mOTnZjBgxwlRUVAT9HV9//bW5/vrrTadOnYzD4TA33XSTOXDgQASO5uQdbx0OHz5sRo4caXr06GESExNN7969zaRJk44J9Whfh5aOX5JZtGhRYEwo3wP//Oc/zejRo01KSorp3r27mT59uqmvr2/jozk5J1qDyspKc/nll5uuXbua5ORk06dPHzNjxoyg518YE91rYIwxN998s+ndu7dJSkoyPXr0MCNGjAjEiTGxfx4Yc/w1iMXzIM4YY9rueg0AAMCJRdVnUAAAwJmBQAEAANYhUAAAgHUIFAAAYB0CBQAAWIdAAQAA1iFQAACAdQgUAABgHQIFAABYh0ABAADWIVAAAIB1CBQAAGCd/w+5dDrXCFZMUwAAAABJRU5ErkJggg==" }, "metadata": {}, "output_type": "display_data" } ], "execution_count": 31 }, { "cell_type": "code", "id": "1371456d-5f15-4eb3-bd01-82a2bc60607a", "metadata": { "ExecuteTime": { "end_time": "2025-08-19T23:40:03.763273Z", "start_time": "2025-08-19T23:39:55.581104Z" } }, "source": [ "# one entry per second per point captured\n", "\n", "import numpy as np\n", "from dataclasses import dataclass\n", "from math import floor\n", "\n", "@dataclass\n", "class ScoreSecond:\n", " name: str\n", " sourcename: str\n", " when: datetime\n", " score: float\n", " once: bool\n", " mapx: int\n", " mapy: int\n", "\n", "def row_to_scoreseconds(row, score_per):\n", " seconds = int(floor(row.score / score_per))\n", " assert row.score % score_per < 0.1\n", " when = int(floor(row.when.timestamp()))\n", " for elapsed in range(0, seconds):\n", " timestamp = pandas.Timestamp(when - elapsed, unit='s')\n", " yield ScoreSecond(name=row.name, sourcename=row.sourcename, mapx=row.mapx, mapy=row.mapy, when=timestamp, score=score_per, once=False)\n", "\n", "def gen_scoreseconds():\n", " for row in scorelog.itertuples():\n", " if row.sourcename == \"Capture\":\n", " yield from row_to_scoreseconds(row, 1.0)\n", " elif row.sourcename == \"Output Boost\":\n", " yield from row_to_scoreseconds(row, 0.1)\n", " else: # one-off\n", " yield ScoreSecond(name=row.name, sourcename=row.sourcename, mapx=row.mapx, mapy=row.mapy, when=row.when, score=row.score, once=True)\n", "\n", "scoreseconds = pandas.DataFrame(gen_scoreseconds())\n", "scoreseconds.sort_values(by=['when'], inplace=True)\n", "scoreseconds.reset_index(drop=True, inplace=True)\n", "scoreseconds" ], "outputs": [ { "data": { "text/plain": [ " name sourcename when score once \\\n", "0 Info Desk First Visit 2025-08-08 20:14:00 100.0 True \n", "1 Info Desk Capture 2025-08-08 20:14:19 1.0 False \n", "2 Info Desk Capture 2025-08-08 20:14:20 1.0 False \n", "3 Info Desk Capture 2025-08-08 20:14:21 1.0 False \n", "4 Info Desk Capture 2025-08-08 20:14:22 1.0 False \n", "... ... ... ... ... ... \n", "678874 Maker Days Eindhoven Output Boost 2025-08-12 13:59:56 0.1 False \n", "678875 Maker Days Eindhoven Output Boost 2025-08-12 13:59:57 0.1 False \n", "678876 Maker Days Eindhoven Output Boost 2025-08-12 13:59:58 0.1 False \n", "678877 Maker Days Eindhoven Output Boost 2025-08-12 13:59:59 0.1 False \n", "678878 Maker Days Eindhoven Output Boost 2025-08-12 14:00:00 0.1 False \n", "\n", " mapx mapy \n", "0 216 505 \n", "1 216 505 \n", "2 216 505 \n", "3 216 505 \n", "4 216 505 \n", "... ... ... \n", "678874 115 749 \n", "678875 115 749 \n", "678876 115 749 \n", "678877 115 749 \n", "678878 115 749 \n", "\n", "[678879 rows x 7 columns]" ], "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namesourcenamewhenscoreoncemapxmapy
0Info DeskFirst Visit2025-08-08 20:14:00100.0True216505
1Info DeskCapture2025-08-08 20:14:191.0False216505
2Info DeskCapture2025-08-08 20:14:201.0False216505
3Info DeskCapture2025-08-08 20:14:211.0False216505
4Info DeskCapture2025-08-08 20:14:221.0False216505
........................
678874Maker Days EindhovenOutput Boost2025-08-12 13:59:560.1False115749
678875Maker Days EindhovenOutput Boost2025-08-12 13:59:570.1False115749
678876Maker Days EindhovenOutput Boost2025-08-12 13:59:580.1False115749
678877Maker Days EindhovenOutput Boost2025-08-12 13:59:590.1False115749
678878Maker Days EindhovenOutput Boost2025-08-12 14:00:000.1False115749
\n", "

678879 rows × 7 columns

\n", "
" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 32 }, { "cell_type": "code", "id": "24ead54a-01ce-4ab2-9b4e-ffeeaa7191c9", "metadata": { "ExecuteTime": { "end_time": "2025-08-19T23:40:08.295387Z", "start_time": "2025-08-19T23:40:04.343690Z" } }, "source": [ "acc_col = pandas.Series([0.0]).repeat(len(scoreseconds)).reset_index(drop=True)\n", "\n", "acc = 0.0\n", "for i, row in enumerate(scoreseconds.itertuples()):\n", " acc += row.score\n", " acc_col[i] = acc\n", "\n", "scoreseconds['accumulated_score'] = acc_col\n", "del acc\n", "del acc_col\n", "\n", "scoreseconds" ], "outputs": [ { "data": { "text/plain": [ " name sourcename when score once \\\n", "0 Info Desk First Visit 2025-08-08 20:14:00 100.0 True \n", "1 Info Desk Capture 2025-08-08 20:14:19 1.0 False \n", "2 Info Desk Capture 2025-08-08 20:14:20 1.0 False \n", "3 Info Desk Capture 2025-08-08 20:14:21 1.0 False \n", "4 Info Desk Capture 2025-08-08 20:14:22 1.0 False \n", "... ... ... ... ... ... \n", "678874 Maker Days Eindhoven Output Boost 2025-08-12 13:59:56 0.1 False \n", "678875 Maker Days Eindhoven Output Boost 2025-08-12 13:59:57 0.1 False \n", "678876 Maker Days Eindhoven Output Boost 2025-08-12 13:59:58 0.1 False \n", "678877 Maker Days Eindhoven Output Boost 2025-08-12 13:59:59 0.1 False \n", "678878 Maker Days Eindhoven Output Boost 2025-08-12 14:00:00 0.1 False \n", "\n", " mapx mapy accumulated_score \n", "0 216 505 100.000000 \n", "1 216 505 101.000000 \n", "2 216 505 102.000000 \n", "3 216 505 103.000000 \n", "4 216 505 104.000000 \n", "... ... ... ... \n", "678874 115 749 589647.599999 \n", "678875 115 749 589647.699999 \n", "678876 115 749 589647.799999 \n", "678877 115 749 589647.899999 \n", "678878 115 749 589647.999999 \n", "\n", "[678879 rows x 8 columns]" ], "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namesourcenamewhenscoreoncemapxmapyaccumulated_score
0Info DeskFirst Visit2025-08-08 20:14:00100.0True216505100.000000
1Info DeskCapture2025-08-08 20:14:191.0False216505101.000000
2Info DeskCapture2025-08-08 20:14:201.0False216505102.000000
3Info DeskCapture2025-08-08 20:14:211.0False216505103.000000
4Info DeskCapture2025-08-08 20:14:221.0False216505104.000000
...........................
678874Maker Days EindhovenOutput Boost2025-08-12 13:59:560.1False115749589647.599999
678875Maker Days EindhovenOutput Boost2025-08-12 13:59:570.1False115749589647.699999
678876Maker Days EindhovenOutput Boost2025-08-12 13:59:580.1False115749589647.799999
678877Maker Days EindhovenOutput Boost2025-08-12 13:59:590.1False115749589647.899999
678878Maker Days EindhovenOutput Boost2025-08-12 14:00:000.1False115749589647.999999
\n", "

678879 rows × 8 columns

\n", "
" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 33 }, { "metadata": { "ExecuteTime": { "end_time": "2025-08-19T23:45:26.737903Z", "start_time": "2025-08-19T23:45:26.511905Z" } }, "cell_type": "code", "source": [ "from matplotlib import dates\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot('when', 'accumulated_score', data=scoreseconds, )\n", "ax.xaxis.set_major_locator(dates.DayLocator(interval=1)) # every day\n", "ax.xaxis.set_major_formatter(dates.DateFormatter('\\n%d-%m-%Y'))\n", "plt.title('Accumulated Score')\n", "plt.show()" ], "id": "6e0a9a80c70d3bb0", "outputs": [ { "data": { "text/plain": [ "
" ], "image/png": "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eecdAEBCQkKD/TzwwANISUnB2rVra60rKCiA0WhscAwiW8AtQkQ2bPny5SgqKsI999xT5/r+/fvDz88PixYtwujRozF16lR89913uP/++zF+/HhERkbiwoULWL58OebPn49evXrhkUcewf/93/9hypQpSE1NxaBBg1BSUoJffvkFTz/9NO69917o9Xrcf//9+OCDD6BSqdC+fXusWLHiuswbGTJkCMLCwjBhwgRMnToVTk5O+OKLL+Dn54fMzMx6Hzts2DD88MMPGDFiBBISEpCRkYH58+eja9euKC4uVurc3NzQtWtXLFmyBDfddBN8fHzQvXt3dO/eHfPmzcPAgQPRo0cPPPHEE2jXrh1ycnKQkpKCU6dO4ffffwcAvPTSS/jqq69w55134tlnn1UOnw8PD8eePXsafJ333nsvIiIicPfdd6N9+/bKe/7zzz+jX79+uPvuuwEAgwcPxsMPP4z3338fR44cwZ133gmz2Yxff/0VgwcPxuTJk9GrVy+MGzcOn376KQoKCnDrrbciNTUVCxcuxPDhw5VJ9fWZOnUqli9fjmHDhuHRRx9FZGQkSkpKsHfvXnz33Xc4ceIEfH19GxyHqMWz4hFrRHSN7r77bnF1dZWSkpIr1jz66KPi4uIieXl5IiJy/vx5mTx5sgQHB4tGo5GQkBAZN26csl5E5OLFi/LKK69IRESEuLi4SGBgoNx3331y7NgxpebcuXMyatQocXd3F29vb5k4caLs27evzsPnPTw8avV16623Srdu3WotDw8Pl4SEBItlaWlpEhMTIxqNRsLCwuSdd95p1OHzZrNZ3nzzTQkPDxetVit9+vSRFStWyLhx4yQ8PNziObZs2SKRkZGi0WhqHUp/7NgxeeSRRyQwMFBcXFwkODhYhg0bJt99953FGHv27JFbb71VXF1dJTg4WP7+978rh8U3dPj8t99+Kw8++KC0b99e3NzcxNXVVbp27SqvvPKKFBYWWtQajUZ5++23pXPnzqLRaMTPz0+GDh0qaWlpSk1lZaW8/vrrymcYGhoq06dPtzgNwJXe72pFRUUyffp06dChg2g0GvH19ZWbb75Z/vnPf0pFRUW9r4fIVqhEamwzJiIiInIgnCNEREREDotBiIiIiBwWgxARERE5LAYhIiIiclgMQkREROSweB6hepjNZpw5cwatWrW6potNEhER0Y0j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" }, "metadata": {}, "output_type": "display_data" } ], "execution_count": 42 } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.11" } }, "nbformat": 4, "nbformat_minor": 5 }