From 54096321f4238d2bb2a9344e1f535831fe924942 Mon Sep 17 00:00:00 2001 From: Vinzenz Schroeter Date: Tue, 26 Aug 2025 18:28:58 +0200 Subject: [PATCH] refactor for multiple series --- foo.py | 103 ++++ notebook.ipynb | 13 +- notebook2.ipynb | 1271 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1381 insertions(+), 6 deletions(-) create mode 100644 foo.py create mode 100644 notebook2.ipynb diff --git a/foo.py b/foo.py new file mode 100644 index 0000000..9159e16 --- /dev/null +++ b/foo.py @@ -0,0 +1,103 @@ +import typing + +import pandas +from dataclasses import dataclass +from math import floor +from datetime import datetime + +def load_score_log(path: str) -> pandas.DataFrame: + return pandas.read_csv(path, sep=',', + dtype={'score': int, 'sourcename': str, 'name': str, 'mapx': int, 'mapy': int}, + parse_dates=['when'], date_format='%d/%m/%Y %H:%M') + +def generate_station_stats(score_log: pandas.DataFrame) -> pandas.DataFrame: + # every station in the score log should have a first visit, so create summary based on that + summary = score_log[score_log['sourcename'] == 'First Visit'][['name', 'mapx', 'mapy', 'when']] + summary.rename(columns={'when': 'first_visit'}, inplace=True) + + # add total score + summary = pandas.merge(summary, score_log[['name', 'score']].groupby('name').sum(), on='name', validate='1:1') + summary.rename(columns={'score': 'total_score'}, inplace=True) + + boosts = score_log[score_log['sourcename'] == 'Output Boost'][['name', 'score']].groupby('name') + + # add total boosts + total_boosts = boosts.sum() + total_boosts['totalboostduration'] = total_boosts['score'].apply(lambda x: 10 * x) + total_boosts.rename(columns={'score': 'totalboostscore'}, inplace=True) + summary = pandas.merge(summary, total_boosts, on='name') + + # add max boosts + max_boosts = boosts.max() + max_boosts['maxboostduration'] = max_boosts['score'].apply(lambda x: 10 * x) + max_boosts.rename(columns={'score': 'maxboostscore'}, inplace=True) + summary = pandas.merge(summary, max_boosts, on='name') + + visits = score_log[(score_log['sourcename'] == 'Visit') | (score_log['sourcename'] == 'First Visit')][['name', 'score']].groupby('name') + + # add total visits (count) + summary = pandas.merge(summary, visits.count(), on='name', validate='1:1') + summary.rename(columns={'score': 'totalvisits'}, inplace=True) + + captures = score_log[score_log['sourcename'] == 'Capture'][['name', 'score']].groupby('name') + + # add captures (count) + summary = pandas.merge(summary, captures.count(), on='name', validate='1:1') + summary.rename(columns={'score': 'captures'}, inplace=True) + + # add max held duration (max capture score) + summary = pandas.merge(summary, captures.max(), on='name', validate='1:1') + summary.rename(columns={'score': 'maxheldduration'}, inplace=True) + + # add total held duration (sum capture score) + summary = pandas.merge(summary, captures.sum(), on='name', validate='1:1') + summary.rename(columns={'score': 'totalheldduration'}, inplace=True) + + return summary + +def generate_score_per_second(score_log: pandas.DataFrame) -> pandas.DataFrame: + @dataclass + class ScoreSecond: + name: str + sourcename: str + when: datetime + score: float + once: bool + mapx: int + mapy: int + + def row_to_scoreseconds(row, score_per) -> typing.Iterator[ScoreSecond]: + seconds = int(floor(row.score / score_per)) + assert row.score % score_per < 0.1 + when = int(floor(row.when.timestamp())) + for elapsed in range(0, seconds): + timestamp = pandas.Timestamp(when - elapsed, unit='s') + yield ScoreSecond(name=row.name, sourcename=row.sourcename, mapx=row.mapx, mapy=row.mapy, when=timestamp, + score=score_per, once=False) + + def gen_scoreseconds() -> typing.Iterator[ScoreSecond]: + for row in score_log.itertuples(): + if row.sourcename == "Capture": + yield from row_to_scoreseconds(row, 1.0) + elif row.sourcename == "Output Boost": + yield from row_to_scoreseconds(row, 0.1) + else: # one-off + yield ScoreSecond(name=row.name, sourcename=row.sourcename, mapx=row.mapx, mapy=row.mapy, when=row.when, + score=row.score, once=True) + + scoreseconds = pandas.DataFrame(gen_scoreseconds()) + scoreseconds.sort_values(by=['when'], inplace=True) + scoreseconds.reset_index(drop=True, inplace=True) + + acc_col = pandas.Series([0.0]).repeat(len(scoreseconds)).reset_index(drop=True) + + acc = 0.0 + for i, row in enumerate(scoreseconds.itertuples()): + acc += row.score + acc_col[i] = acc + + scoreseconds['accumulated_score'] = acc_col + del acc + del acc_col + + return scoreseconds diff --git a/notebook.ipynb b/notebook.ipynb index 1bf7b81..05e40ee 100644 --- a/notebook.ipynb +++ b/notebook.ipynb @@ -8,18 +8,20 @@ "languageId": "plaintext" }, "ExecuteTime": { - "end_time": "2025-08-19T23:39:53.836251Z", - "start_time": "2025-08-19T23:39:53.832994Z" + "end_time": "2025-08-26T15:15:40.301728Z", + "start_time": "2025-08-26T15:15:40.138900Z" } }, "source": [ "from datetime import datetime\n", "\n", "import pandas\n", - "import matplotlib.pyplot as plt" + "import matplotlib.pyplot as plt\n", + "\n", + "from foo import *" ], "outputs": [], - "execution_count": 25 + "execution_count": 43 }, { "cell_type": "code", @@ -1471,8 +1473,7 @@ "# 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", "\n", "@dataclass\n", "class ScoreSecond:\n", diff --git a/notebook2.ipynb b/notebook2.ipynb new file mode 100644 index 0000000..4bdc840 --- /dev/null +++ b/notebook2.ipynb @@ -0,0 +1,1271 @@ +{ + "cells": [ + { + "cell_type": "code", + "id": "initial_id", + "metadata": { + "collapsed": true, + "ExecuteTime": { + "end_time": "2025-08-26T16:05:16.645275Z", + "start_time": "2025-08-26T16:05:16.170814Z" + } + }, + "source": [ + "from datetime import datetime\n", + "\n", + "import pandas\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from foo import *" + ], + "outputs": [], + "execution_count": 1 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-08-26T16:05:16.700303Z", + "start_time": "2025-08-26T16:05:16.659896Z" + } + }, + "cell_type": "code", + "source": [ + "vinzenz_score_log = load_score_log('PolyGenStats-vinzenz-scorelog.csv')\n", + "vinzenz_summary = generate_station_stats(vinzenz_score_log)\n", + "\n", + "vinzenz_summary" + ], + "id": "bf523274efb801dd", + "outputs": [ + { + "data": { + "text/plain": [ + " name mapx mapy first_visit total_score \\\n", + "0 Info Desk 216 505 2025-08-08 20:14:00 17026 \n", + "1 Main Bar 190 570 2025-08-08 20:22:00 36884 \n", + "2 Badge Tent 328 607 2025-08-08 20:23:00 32599 \n", + "3 CoderDojo Belgium 34 523 2025-08-08 21:39:00 44374 \n", + "4 Heaven 183 227 2025-08-08 21:46:00 10057 \n", + "5 Karaoke Bar 292 446 2025-08-08 21:55:00 45272 \n", + "6 Cold North 305 402 2025-08-08 21:56:00 50757 \n", + "7 Entrance Arch 240 916 2025-08-08 22:10:00 41486 \n", + "8 Site Sign 207 874 2025-08-08 22:12:00 63688 \n", + "9 Maker Days Eindhoven 115 749 2025-08-08 22:28:00 62440 \n", + "10 Adyen 120 637 2025-08-08 22:34:00 8281 \n", + "11 Chaos Mauldasch 164 635 2025-08-08 22:37:00 8564 \n", + "12 Party Bar 67 289 2025-08-08 22:54:00 13340 \n", + "13 Geraffel 188 166 2025-08-08 23:03:00 6899 \n", + "14 FALSE 163 425 2025-08-08 23:17:00 3863 \n", + "15 Bridge over troubled waters 251 553 2025-08-09 02:28:00 29550 \n", + "16 Milliways 95 498 2025-08-09 17:07:00 11003 \n", + "17 PolyGen Home Base 322 591 2025-08-09 17:52:00 14376 \n", + "18 Food Hacking Base 119 571 2025-08-10 18:31:00 5308 \n", + "19 BornHack 82 337 2025-08-10 19:51:00 17711 \n", + "20 Matrix 164 731 2025-08-11 15:33:00 2696 \n", + "\n", + " totalboostscore totalboostduration maxboostscore maxboostduration \\\n", + "0 2341 23410 2262 22620 \n", + "1 735 7350 537 5370 \n", + "2 47 470 28 280 \n", + "3 101 1010 101 1010 \n", + "4 277 2770 125 1250 \n", + "5 103 1030 47 470 \n", + "6 267 2670 142 1420 \n", + "7 70 700 70 700 \n", + "8 681 6810 199 1990 \n", + "9 696 6960 284 2840 \n", + "10 24 240 15 150 \n", + "11 38 380 38 380 \n", + "12 3439 34390 3350 33500 \n", + "13 1113 11130 902 9020 \n", + "14 665 6650 651 6510 \n", + "15 110 1100 76 760 \n", + "16 40 400 35 350 \n", + "17 738 7380 190 1900 \n", + "18 31 310 28 280 \n", + "19 842 8420 324 3240 \n", + "20 45 450 45 450 \n", + "\n", + " totalvisits captures maxheldduration totalheldduration \n", + "0 19 23 3304 13685 \n", + "1 42 67 16913 33999 \n", + "2 21 21 18329 31452 \n", + "3 15 13 23237 42973 \n", + "4 15 9 3756 8980 \n", + "5 19 16 23180 44169 \n", + "6 17 20 22971 49590 \n", + "7 19 18 28498 40416 \n", + "8 15 21 46380 61707 \n", + "9 13 10 44313 61044 \n", + "10 24 22 3483 7007 \n", + "11 21 30 1394 7426 \n", + "12 12 11 7694 9251 \n", + "13 9 6 1782 5286 \n", + "14 7 5 1969 2798 \n", + "15 28 28 18829 27990 \n", + "16 23 47 3386 9763 \n", + "17 18 17 5316 12688 \n", + "18 16 13 993 4427 \n", + "19 8 5 7753 16419 \n", + "20 7 6 1096 2251 " + ], + "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", + "
namemapxmapyfirst_visittotal_scoretotalboostscoretotalboostdurationmaxboostscoremaxboostdurationtotalvisitscapturesmaxhelddurationtotalheldduration
0Info Desk2165052025-08-08 20:14:00170262341234102262226201923330413685
1Main Bar1905702025-08-08 20:22:00368847357350537537042671691333999
2Badge Tent3286072025-08-08 20:23:0032599474702828021211832931452
3CoderDojo Belgium345232025-08-08 21:39:00443741011010101101015132323742973
4Heaven1832272025-08-08 21:46:00100572772770125125015937568980
5Karaoke Bar2924462025-08-08 21:55:004527210310304747019162318044169
6Cold North3054022025-08-08 21:56:00507572672670142142017202297149590
7Entrance Arch2409162025-08-08 22:10:0041486707007070019182849840416
8Site Sign2078742025-08-08 22:12:00636886816810199199015214638061707
9Maker Days Eindhoven1157492025-08-08 22:28:00624406966960284284013104431361044
10Adyen1206372025-08-08 22:34:0082812424015150242234837007
11Chaos Mauldasch1646352025-08-08 22:37:0085643838038380213013947426
12Party Bar672892025-08-08 22:54:0013340343934390335033500121176949251
13Geraffel1881662025-08-08 23:03:00689911131113090290209617825286
14FALSE1634252025-08-08 23:17:003863665665065165107519692798
15Bridge over troubled waters2515532025-08-09 02:28:002955011011007676028281882927990
16Milliways954982025-08-09 17:07:00110034040035350234733869763
17PolyGen Home Base3225912025-08-09 17:52:0014376738738019019001817531612688
18Food Hacking Base1195712025-08-10 18:31:005308313102828016139934427
19BornHack823372025-08-10 19:51:00177118428420324324085775316419
20Matrix1647312025-08-11 15:33:00269645450454507610962251
\n", + "
" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 2 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-08-26T16:05:33.992153Z", + "start_time": "2025-08-26T16:05:33.930260Z" + } + }, + "cell_type": "code", + "source": [ + "fiebertrauma_score_log = load_score_log('PolyGenStats-Fiebertrauma-scorelog.csv')\n", + "fiebertrauma_summary = generate_station_stats(fiebertrauma_score_log)\n", + "\n", + "fiebertrauma_summary" + ], + "id": "884dbf7b0c963d4c", + "outputs": [ + { + "data": { + "text/plain": [ + " name mapx mapy first_visit total_score \\\n", + "0 Info Desk 216 505 2025-08-08 20:58:00 14979 \n", + "1 Karaoke Bar 292 446 2025-08-08 21:04:00 19072 \n", + "2 Entrance Arch 240 916 2025-08-08 21:19:00 10129 \n", + "3 Maker Days Eindhoven 115 749 2025-08-08 21:24:00 76211 \n", + "4 Chaos Mauldasch 164 635 2025-08-08 21:27:00 50810 \n", + "5 Food Hacking Base 119 571 2025-08-08 21:30:00 40506 \n", + "6 Badge Tent 328 607 2025-08-08 21:31:00 17778 \n", + "7 CoderDojo Belgium 34 523 2025-08-08 21:40:00 25204 \n", + "8 Main Bar 190 570 2025-08-08 21:48:00 18423 \n", + "9 Adyen 120 637 2025-08-08 21:57:00 37656 \n", + "10 Bridge over troubled waters 251 553 2025-08-09 09:15:00 9613 \n", + "11 Site Sign 207 874 2025-08-09 12:54:00 19919 \n", + "12 Tilde Industries 361 468 2025-08-09 13:41:00 17253 \n", + "13 Geraffel 188 166 2025-08-09 13:50:00 16274 \n", + "14 Party Bar 67 289 2025-08-09 13:54:00 19808 \n", + "15 Milliways 95 498 2025-08-09 14:00:00 20054 \n", + "16 Heaven 183 227 2025-08-09 14:49:00 9453 \n", + "17 Matrix 164 731 2025-08-09 15:02:00 17031 \n", + "18 Pixelbar 379 602 2025-08-09 15:54:00 12251 \n", + "19 PolyGen Home Base 322 591 2025-08-09 16:01:00 20739 \n", + "20 Cold North 305 402 2025-08-09 19:31:00 9667 \n", + "21 BornHack 82 337 2025-08-09 21:19:00 40950 \n", + "22 FALSE 163 425 2025-08-10 08:40:00 9157 \n", + "\n", + " totalboostscore totalboostduration maxboostscore maxboostduration \\\n", + "0 315 3150 117 1170 \n", + "1 14 140 9 90 \n", + "2 49 490 29 290 \n", + "3 372 3720 301 3010 \n", + "4 206 2060 75 750 \n", + "5 967 9670 847 8470 \n", + "6 85 850 71 710 \n", + "7 1225 12250 867 8670 \n", + "8 98 980 87 870 \n", + "9 94 940 59 590 \n", + "10 72 720 43 430 \n", + "11 427 4270 339 3390 \n", + "12 260 2600 126 1260 \n", + "13 232 2320 138 1380 \n", + "14 366 3660 189 1890 \n", + "15 373 3730 338 3380 \n", + "16 1017 10170 466 4660 \n", + "17 101 1010 66 660 \n", + "18 33 330 33 330 \n", + "19 140 1400 65 650 \n", + "20 205 2050 174 1740 \n", + "21 1692 16920 875 8750 \n", + "22 262 2620 132 1320 \n", + "\n", + " totalvisits captures maxheldduration totalheldduration \n", + "0 29 30 2421 13164 \n", + "1 23 20 5596 17358 \n", + "2 16 18 1732 8730 \n", + "3 28 26 23696 74389 \n", + "4 47 76 11972 48204 \n", + "5 51 45 8523 36439 \n", + "6 24 21 7378 16443 \n", + "7 18 12 5111 23029 \n", + "8 40 38 2832 16275 \n", + "9 73 73 3997 33862 \n", + "10 24 18 1565 8291 \n", + "11 17 18 5881 18592 \n", + "12 21 18 3148 15893 \n", + "13 13 9 7724 15342 \n", + "14 17 13 10347 18542 \n", + "15 22 21 5235 18531 \n", + "16 24 17 1302 7186 \n", + "17 30 26 3369 15380 \n", + "18 22 20 2223 11068 \n", + "19 25 26 3256 19299 \n", + "20 14 12 2236 8712 \n", + "21 14 10 13775 38508 \n", + "22 20 12 2611 7845 " + ], + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namemapxmapyfirst_visittotal_scoretotalboostscoretotalboostdurationmaxboostscoremaxboostdurationtotalvisitscapturesmaxhelddurationtotalheldduration
0Info Desk2165052025-08-08 20:58:0014979315315011711702930242113164
1Karaoke Bar2924462025-08-08 21:04:0019072141409902320559617358
2Entrance Arch2409162025-08-08 21:19:00101294949029290161817328730
3Maker Days Eindhoven1157492025-08-08 21:24:00762113723720301301028262369674389
4Chaos Mauldasch1646352025-08-08 21:27:005081020620607575047761197248204
5Food Hacking Base1195712025-08-08 21:30:0040506967967084784705145852336439
6Badge Tent3286072025-08-08 21:31:001777885850717102421737816443
7CoderDojo Belgium345232025-08-08 21:40:002520412251225086786701812511123029
8Main Bar1905702025-08-08 21:48:001842398980878704038283216275
9Adyen1206372025-08-08 21:57:003765694940595907373399733862
10Bridge over troubled waters2515532025-08-09 09:15:0096137272043430241815658291
11Site Sign2078742025-08-09 12:54:0019919427427033933901718588118592
12Tilde Industries3614682025-08-09 13:41:0017253260260012612602118314815893
13Geraffel1881662025-08-09 13:50:001627423223201381380139772415342
14Party Bar672892025-08-09 13:54:00198083663660189189017131034718542
15Milliways954982025-08-09 14:00:0020054373373033833802221523518531
16Heaven1832272025-08-09 14:49:0094531017101704664660241713027186
17Matrix1647312025-08-09 15:02:00170311011010666603026336915380
18Pixelbar3796022025-08-09 15:54:001225133330333302220222311068
19PolyGen Home Base3225912025-08-09 16:01:00207391401400656502526325619299
20Cold North3054022025-08-09 19:31:00966720520501741740141222368712
21BornHack823372025-08-09 21:19:0040950169216920875875014101377538508
22FALSE1634252025-08-10 08:40:00915726226201321320201226117845
\n", + "
" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 4 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-08-26T16:06:00.347754Z", + "start_time": "2025-08-26T16:05:36.926533Z" + } + }, + "cell_type": "code", + "source": [ + "vinzenz_seconds = generate_score_per_second(vinzenz_score_log)\n", + "fiebertrauma_seconds = generate_score_per_second(fiebertrauma_score_log)\n", + "fiebertrauma_seconds" + ], + "id": "8ae2f950e617a433", + "outputs": [ + { + "data": { + "text/plain": [ + " name sourcename when score once \\\n", + "0 Info Desk First Visit 2025-08-08 20:58:00 100.0 True \n", + "1 Info Desk Capture 2025-08-08 20:58:30 1.0 False \n", + "2 Info Desk Capture 2025-08-08 20:58:31 1.0 False \n", + "3 Info Desk Capture 2025-08-08 20:58:32 1.0 False \n", + "4 Info Desk Capture 2025-08-08 20:58:33 1.0 False \n", + "... ... ... ... ... ... \n", + "595503 CoderDojo Belgium Capture 2025-08-12 14:00:00 1.0 False \n", + "595504 Entrance Arch Capture 2025-08-12 14:00:00 1.0 False \n", + "595505 0E Capture 2025-08-12 14:00:00 1.0 False \n", + "595506 Tilde Industries Capture 2025-08-12 14:00:00 1.0 False \n", + "595507 BornHack 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", + "595503 34 523 551529.899999 \n", + "595504 240 916 551530.899999 \n", + "595505 0 0 551531.899999 \n", + "595506 361 468 551532.899999 \n", + "595507 82 337 551532.999999 \n", + "\n", + "[595508 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:58:00100.0True216505100.000000
1Info DeskCapture2025-08-08 20:58:301.0False216505101.000000
2Info DeskCapture2025-08-08 20:58:311.0False216505102.000000
3Info DeskCapture2025-08-08 20:58:321.0False216505103.000000
4Info DeskCapture2025-08-08 20:58:331.0False216505104.000000
...........................
595503CoderDojo BelgiumCapture2025-08-12 14:00:001.0False34523551529.899999
595504Entrance ArchCapture2025-08-12 14:00:001.0False240916551530.899999
5955050ECapture2025-08-12 14:00:001.0False00551531.899999
595506Tilde IndustriesCapture2025-08-12 14:00:001.0False361468551532.899999
595507BornHackOutput Boost2025-08-12 14:00:000.1False82337551532.999999
\n", + "

595508 rows × 8 columns

\n", + "
" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 5 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-08-26T16:06:01.725686Z", + "start_time": "2025-08-26T16:06:00.489050Z" + } + }, + "cell_type": "code", + "source": [ + "from matplotlib import dates\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.plot('when', 'accumulated_score', data=vinzenz_seconds, label='vinzenz')\n", + "ax.plot('when', 'accumulated_score', data=fiebertrauma_seconds, label='Fiebertrauma')\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.legend()\n", + "plt.show()" + ], + "id": "526448f50cefdb2d", + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAHDCAYAAADIo3XgAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjUsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvWftoOwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAewhJREFUeJzt3Xd8FHX+x/HXbpJNJQmBFCCFKr13FRVFIoKKYkNUELvoT8WCnAU5C4h3FhTLead4iiLYBYRDEGmhGIp06T0JLZXU3e/vjyUrS00gMCnv5+OxzO7Md2c+u5tk38x8vzM2Y4xBREREpAqyW12AiIiIiFUUhERERKTKUhASERGRKktBSERERKosBSERERGpshSEREREpMpSEBIREZEqS0FIREREqiwFIREREamyFIREpNK47LLLuOyyy6wuw8v48eOx2Wxs27bN6lJE5AQUhEQqkffeew+bzUbnzp2tLqVCOXz4MC+++CJz5syxtI758+fTq1cv6tSpQ0BAAPHx8VxzzTV88cUXltYlUpkpCIlUIhMmTKBu3bosWbKETZs2WV1OhXH48GFGjhxpaRCaPHkyl1xyCampqTz66KO888473H777Rw6dIiPPvrIsrpEKjtfqwsQkbKxdetWFi5cyLfffsv999/PhAkTGDFihNVlSQm9+OKLNGvWjEWLFuFwOLyWpaWlnbc6jDHk5eURGBh43rYpYiXtERKpJCZMmED16tXp3bs3N954IxMmTDhhu/T0dB5//HHq1q2Lv78/sbGx3Hnnnezfv9/TJi8vjxdffJELLriAgIAAatWqxQ033MDmzZsBmDNnDjab7bg9KNu2bcNmszF+/HjPvEGDBhESEsKOHTvo06cPISEh1KlTh3HjxgGwatUqLr/8coKDg0lISDjuMNCLL76IzWY77nWUpO9NQUEBL7zwAu3btycsLIzg4GC6devGr7/+6lVzZGQkACNHjsRms2Gz2XjxxRc9bdavX8+NN95IREQEAQEBdOjQgR9//PG47a1Zs4bLL7+cwMBAYmNjefnll3G5XCet72ibN2+mY8eOx4UggKioKK/HLpeLt99+m5YtWxIQEEBkZCRXXXUVv//+u6dNUVERL730Eg0aNMDf35+6devyt7/9jfz8fK911a1blz59+jBjxgw6dOhAYGAgH374IeD+WXnssceIi4vD39+fhg0b8tprr5X4NYlUBNojJFJJTJgwgRtuuAGHw0H//v15//33Wbp0KR07dvS0yc7Oplu3bqxbt47BgwfTrl079u/fz48//siuXbuoWbMmTqeTPn36MGvWLG699VYeffRRsrKymDlzJqtXr6ZBgwalrs3pdNKrVy8uueQSxowZw4QJE3j44YcJDg7m2WefZcCAAdxwww188MEH3HnnnXTt2pV69eqd9XuSmZnJv//9b/r378+9995LVlYW//nPf0hMTGTJkiW0adOGyMhI3n//fR588EGuv/56brjhBgBatWoFuMPNRRddRJ06dXjmmWcIDg5m0qRJ9O3bl2+++Ybrr78egJSUFLp3705RUZGn3b/+9a8S71lJSEhg1qxZ7Nq1i9jY2FO2vfvuuxk/fjy9evXinnvuoaioiHnz5rFo0SI6dOgAwD333MOnn37KjTfeyBNPPMHixYsZNWoU69at47vvvvNa34YNG+jfvz/3338/9957L40bN+bw4cNceuml7N69m/vvv5/4+HgWLlzI8OHD2bt3L2+99VZpPgqR8suISIX3+++/G8DMnDnTGGOMy+UysbGx5tFHH/Vq98ILLxjAfPvtt8etw+VyGWOM+fjjjw1g3njjjZO2+fXXXw1gfv31V6/lW7duNYD55JNPPPMGDhxoAPPqq6965h06dMgEBgYam81mJk6c6Jm/fv16A5gRI0Z45o0YMcKc6E/VJ598YgCzdetWz7xLL73UXHrppZ7HRUVFJj8/3+t5hw4dMtHR0Wbw4MGeefv27Ttuu8WuuOIK07JlS5OXl+f1Plx44YWmUaNGnnmPPfaYAczixYs989LS0kxYWNhxdZ7If/7zHwMYh8Nhunfvbp5//nkzb94843Q6vdrNnj3bAOb//u//jltH8eezYsUKA5h77rnHa/mTTz5pADN79mzPvISEBAOY6dOne7V96aWXTHBwsPnzzz+95j/zzDPGx8fH7Nix45SvR6Si0KExkUpgwoQJREdH0717dwBsNhu33HILEydOxOl0etp98803tG7d2rMX42jFh5+++eYbatasySOPPHLSNmfinnvu8dwPDw+ncePGBAcHc/PNN3vmN27cmPDwcLZs2XLG2zmaj4+P51CTy+Xi4MGDFBUV0aFDB5YtW3ba5x88eJDZs2dz8803k5WVxf79+9m/fz8HDhwgMTGRjRs3snv3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t97KggULAJg3bx533nknY8eOpVu3bmzevJn77rsPgBEjRni29eKLLzJ69GjeeustfHx8uPbaa+nXrx8bNmwgNDSUwMBAT9tPP/2UBx980LMNALvdztixY6lXrx5btmzhoYce4umnn+a9994r1WuePXs2sbGxzJ07lwULFnD33XezcOFCLrnkEhYvXsxXX33F/fffz5VXXklsrHtXdLVq1Rg/fjy1a9dm1apV3HvvvVSrVo2nn376zN54EZHTmLZqL+mHC6kTHsjVLWtZXc6Z+WUEuAohMAICwiwrQ3uEqqgpU6YQEhLiud10001ey3fs2MEnn3zC5MmT6datGw0aNODJJ5/k4osv9tojUlhYyLvvvkvXrl1p3749n376KQsXLmTJkiUAjBw5kmeeeYaBAwdSv359rrzySl566SU+/PBDr+3ddttt3HXXXdSvX5+EhAQiIiIAiIqKIiYmhrCwv35JGjVqxJgxY2jcuDGNGzcG4LHHHqN79+7UrVuXyy+/nJdffplJkyaV+n2JiIhg7NixNG7cmMGDB9O4cWMOHz7M3/72Nxo1asTw4cNxOBzMnz/f85znnnuOCy+8kLp163LNNdfw5JNPntG2RURK6qeVewC4pWMcPvYKuDdo51JY9xNgg8RXwMI9WtojVJb8gtx7Zqzadil0796d999/3/M4ODiY/v37ex6vWrUKp9PJBRdc4PW8/Px8atSo4Xns6+tLx44dPY+bNGlCeHg469ato1OnTqxcuZIFCxbwyiuveNo4nU7y8vI4fPgwQUHuujt06FDi2tu3b3/cvF9++YVRo0axfv16MjMzKSoqOm4bJdG8eXPsRx2rjo6OpkWLFp7HPj4+1KhRg7S0NM+8r776irFjx7J582ays7MpKioiNLSCHq8XkXLP6TL8vu0QAJc3ibK4mjNQmAs/Puy+37o/RDW1tBwFobJks5X54alzJTg4mIYNG550eXZ2Nj4+PiQnJx/XgTokJKTE28nOzmbkyJHccMMNxy0LCAjwqqekjm27bds2+vTpw4MPPsgrr7xCREQE8+fP5+6776agoICgoCDsdjvmmH5UJ+rH4+fn5/XYZrOdcJ7L5QIgKSmJAQMGMHLkSBITEwkLC2PixIn885//LPHrEREpjbV7MsnKLyLE35emtSrYf7qMge8egH3rIaime2+QxRSE5ITatm2L0+kk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Kz99xpWbPt/zzxhDVlYWtWvXxm4/dS8g7RE6BbvdTmxsrNVllFhoaKh+ySoxfb6Vnz7jyk2f7/l1uj1BxdRZWkRERKosBSERERGpshSEKgF/f39GjBiBv7+/1aXIOaDPt/LTZ1y56fMt39RZWkRERKos7RESERGRKktBSERERKosBSERERGpshSEREREpMpSEBIREZEqS0FIREREqiwFIREREamyFIRERESkylIQEhERkSpLQUhERESqLAUhERERqbIUhERERKTKUhASERGRKktBSERERKosBSERERGpshSEREREpMpSEBIREZEqS0FIREREqiwFIREREamyFIRERESkylIQEhERkSpLQegMjBs3jrp16xIQEEDnzp1ZsmSJZ9nmzZu5/vrriYyMJDQ0lJtvvpnU1NTTrnPHjh307t2boKAgoqKieOqppygqKvJqM2HCBFq3bk1QUBC1atVi8ODBHDhw4JTrHTVqFB07dqRatWpERUXRt29fNmzY4NUmLy+PIUOGUKNGDUJCQujXr59XzStXrqR///7ExcURGBhI06ZNefvtt73WMWfOHGw223G3lJSU07728mTu3Llcc8011K5dG5vNxvfff++13BjDCy+8QK1atQgMDKRHjx5s3LjxtOvV51s+nO7z/fbbb+nZsyc1atTAZrOxYsWKEq334MGDDBgwgNDQUMLDw7n77rvJzs72ajNjxgy6dOlCtWrViIyMpF+/fmzbtu2U6/3oo4/o1q0b1atXp3r16vTo0cPr7w2c/mdy27Zt3H333dSrV4/AwEAaNGjAiBEjKCgo8Gpzos930aJFJXr95cmpPuPCwkKGDRtGy5YtCQ4Opnbt2tx5553s2bPntOvV73AlZqRUJk6caBwOh/n444/NmjVrzL333mvCw8NNamqqyc7ONvXr1zfXX3+9+eOPP8wff/xhrrvuOtOxY0fjdDpPus6ioiLTokUL06NHD7N8+XIzbdo0U7NmTTN8+HBPm/nz5xu73W7efvtts2XLFjNv3jzTvHlzc/3115+y3sTERPPJJ5+Y1atXmxUrVpirr77axMfHm+zsbE+bBx54wMTFxZlZs2aZ33//3XTp0sVceOGFnuX/+c9/zP/93/+ZOXPmmM2bN5vPPvvMBAYGmnfeecfT5tdffzWA2bBhg9m7d6/ndqrXXR5NmzbNPPvss+bbb781gPnuu++8lo8ePdqEhYWZ77//3qxcudJce+21pl69eiY3N/ek69TnW36c7vP973//a0aOHGk++ugjA5jly5eXaL1XXXWVad26tVm0aJGZN2+eadiwoenfv79n+ZYtW4y/v78ZPny42bRpk0lOTjaXXHKJadu27SnXe9ttt5lx48aZ5cuXm3Xr1plBgwaZsLAws2vXLk+b0/1M/vzzz2bQoEFmxowZZvPmzeaHH34wUVFR5oknnvCsY+vWrQYwv/zyi9fnW1BQUKLXX56c6jNOT083PXr0MF999ZVZv369SUpKMp06dTLt27c/5Tr1O1y5KQiVUqdOncyQIUM8j51Op6ldu7YZNWqUmTFjhrHb7SYjI8OzPD093dhsNjNz5syTrnPatGnGbreblJQUz7z333/fhIaGmvz8fGOMMa+//rqpX7++1/PGjh1r6tSpU6r609LSDGB+++03T31+fn5m8uTJnjbr1q0zgElKSjrpeh566CHTvXt3z+PiX7JDhw6Vqp7y7Ng/oi6Xy8TExJjXX3/dMy89Pd34+/ubL7/88qTr0edbPp0oCBUrDgYlCUJr1641gFm6dKln3s8//2xsNpvZvXu3McaYyZMnG19fX68vnR9//NHYbLZShY2ioiJTrVo18+mnnxpjzvxncsyYMaZevXpn9HorklN9xsWWLFliALN9+/aTttHvcOWmQ2OlUFBQQHJyMj169PDMs9vt9OjRg6SkJPLz87HZbPj7+3uWBwQEYLfbmT9//knXm5SURMuWLYmOjvbMS0xMJDMzkzVr1gDQtWtXdu7cybRp0zDGkJqaytdff83VV19dqteQkZEBQEREBADJyckUFhZ6vaYmTZoQHx9PUlLSKddTvI6jtWnThlq1anHllVeyYMGCUtVW3m3dupWUlBSv9yosLIzOnTuf8r3S51u5JSUlER4eTocOHTzzevTogd1uZ/HixQC0b98eu93OJ598gtPpJCMjg88++4wePXrg5+dX4m0dPnyYwsJCz2dzpj+TJ/t8r732WqKiorj44ov58ccfS1xXRZaRkYHNZiM8PPykbfQ7XLkpCJXC/v37cTqdXr8MANHR0aSkpNClSxeCg4MZNmwYhw8fJicnhyeffBKn08nevXtPut6UlJQTrrN4GcBFF13EhAkTuOWWW3A4HMTExBAWFsa4ceNKXL/L5eKxxx7joosuokWLFp71OxyO4/4IFL+mE1m4cCFfffUV9913n2derVq1+OCDD/jmm2/45ptviIuL47LLLmPZsmUlrq+8K34/Tvb5n+p5+nwrr5SUFKKiorzm+fr6EhER4XmP69Wrx//+9z/+9re/4e/vT3h4OLt27WLSpEml2tawYcOoXbu250vxTH4mN23axDvvvMP999/vmRcSEsI///lPJk+ezNSpU7n44ovp27dvpQ9DeXl5DBs2jP79+xMaGnrSdvodrtwUhMpQZGQkkydP5qeffiIkJISwsDDS09Np164ddrv7re7VqxchISGEhITQvHnzEq977dq1PProo7zwwgskJyczffp0tm3bxgMPPADAvHnzPOsNCQlhwoQJx61jyJAhrF69mokTJ57xa1y9ejXXXXcdI0aMoGfPnp75jRs35v7776d9+/ZceOGFfPzxx1x44YW8+eabZ7ytikifb+X2wAMPeH0OJZWSksK9997LwIEDWbp0Kb/99hsOh4Mbb7wRYww7duzwWu+rr7563DpGjx7NxIkT+e677wgICDij+nfv3s1VV13FTTfdxL333uuZX7NmTYYOHUrnzp3p2LEjo0eP5vbbb+f1118/o+1UBIWFhdx8880YY3j//fc98/U7XPX4Wl1ARVKzZk18fHyOGwWWmppKTEwMAD179mTz5s3s378fX19fwsPDiYmJoX79+gD8+9//Jjc3F8CzSzwmJua4kSDF2yhe76hRo7jooot46qmnAGjVqhXBwcF069aNl19+mQ4dOniNcDn2fy8PP/wwU6ZMYe7cucTGxnrmx8TEUFBQQHp6utf/OI5+TcXWrl3LFVdcwX333cdzzz132verU6dOpzwkWNEUvx+pqanUqlXLMz81NZU2bdoA+nwru7///e88+eSTXvNiYmJIS0vzmldUVMTBgwc97/G4ceMICwtjzJgxnjaff/45cXFxLF68+LjP99hDGv/4xz8YPXo0v/zyC61atfLaNpz6Z7LYnj176N69OxdeeCH/+te/TvtaO3fuzMyZM0/briIqDkHbt29n9uzZXnuD9DtcBVnaQ6kC6tSpk3n44Yc9j51Op6lTp44ZNWrUCdvPmjXL2Gw2s379+pOus7gjXmpqqmfehx9+aEJDQ01eXp4xxpgbbrjB3HzzzV7PW7hwoQE8HTJPxOVymSFDhpjatWubP//887jlxR3xvv76a8+89evXH9cRb/Xq1SYqKso89dRTJ93WsXr06HHaERPlGSfpLP2Pf/zDMy8jI6PEnaX1+ZYvx36+RzuTztK///67Z96MGTO8OksPHTrUdOrUyet5e/bsMYBZsGDBKdf/2muvmdDQ0BN2jC3pz+SuXbtMo0aNzK233mqKiopO+5qMMeaee+457ai28u5En3FBQYHp27evad68uUlLSyvRevQ7XLkpCJXSxIkTjb+/vxk/frxZu3atue+++0x4eLhnNMHHH39skpKSzKZNm8xnn31mIiIizNChQ0+5zuKhmT179jQrVqww06dPN5GRkV5DMz/55BPj6+tr3nvvPbN582Yzf/5806FDh+P+uB7rwQcfNGFhYWbOnDleQyYPHz7safPAAw+Y+Ph4M3v2bPP777+brl27mq5du3qWr1q1ykRGRprbb7/dax1H/xF58803zffff282btxoVq1aZR599FFjt9vNL7/8Uqr312pZWVlm+fLlZvny5QYwb7zxhlm+fLlnRMno0aNNeHi4+eGHHzynRyjp8Hl9vtY73ed74MABs3z5cjN16lQDmIkTJ5rly5ebvXv3nnK9V111lWnbtq1ZvHixmT9/vmnUqJHX8Pni/xCNHDnS/PnnnyY5OdkkJiaahIQEr8/qWKNHjzYOh8N8/fXXXp9NVlaWV5tT/Uzu2rXLNGzY0FxxxRVm165dXuspNn78ePPFF1+YdevWmXXr1plXXnnF2O128/HHH5/R+2ylU33GBQUF5tprrzWxsbFmxYoVXu9F8eivE9HvcOWmIHQG3nnnHRMfH28cDofp1KmTWbRokWfZsGHDTHR0tPHz8zONGjUy//znP43L5TrtOrdt22Z69eplAgMDTc2aNc0TTzxhCgsLvdqMHTvWNGvWzAQGBppatWqZAQMGeJ1P5ESAE94++eQTT5vc3Fzz0EMPmerVq5ugoCBz/fXXe/2RHDFixAnXkZCQ4Gnz2muvmQYNGpiAgAATERFhLrvsMjN79uzTvu7ypniI6bG3gQMHGmPc/3t7/vnnTXR0tPH39zdXXHGF2bBhw2nXq8+3fDjd5/vJJ5+ccPmIESNOud4DBw6Y/v37m5CQEBMaGmruuusur7BijDFffvmladu2rQkODjaRkZHm2muvNevWrTvlehMSEk5bz+l+Jk/2mo4+IDB+/HjTtGlTExQUZEJDQ02nTp28hmtXJKf6jIv39J3o9uuvv55yvfodrrxsxhhTmkNpIiIiIpWFRo2JiIhIlaUgJCIiIlWWgpCIiIhUWQpCIiIiUmUpCImIiEiVpSAkIiIiVZaCkIiIiFRZCkIiIiJSZSkIiYiISJWlICQiIiJVloKQiIiIVFn/D3Z738yw99+2AAAAAElFTkSuQmCC" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 6 + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}