{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "In the preprocessing section, we extracted the raw location records and stored them into MongoDB. Further, we removed outlier, and applied segmentation and interpolation to cater for the GPS outage and unavailability. We can now use these filtered location records for our first application of *Automatic bus-stop detection*. The bus-stop detection uses an unsupervised clustering based algorithm to detect stoppages on a route. We firstly describe the algorithm and then describe it's application for bus-stop detection." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## DBSCAN algorithm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Density-Based Spatial Clustering of Applications with Noise (DBSCAN) [1] is the data clustering algorithm which can detect clusters of arbitrary shapes in the data-set. \n", "\n", "### Steps to find the cluster in a data-set\n", "\n", "1. Find the points in the **{$\\varepsilon$} (eps)** neighborhood of every point\n", "2. Mark core points if more than **minPts** \n", "3. Identify connected neighbor points with the core points\n", "4. If the point is not in the neighborhood of core point mark it as a noise\n", "5. Repeat step 1-4 for unvisited data point" ] }, { "attachments": { "DBSCAN_Algo.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "![/home/pruthvish/JRF/GitVersionICDCN/Images/DBSCAN_Algo.png](attachment:DBSCAN_Algo.png)
DBSCAN clustring algorithm [2]
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# DBCAN based bus-stop detection\n", "The idea behind using the DBSCAN based clustering algorithm is as follows: A bus follows a ***stop-and-go*** pattern during its trip. When a bus is in motion, the periodic data points are separated from one another by a certain distance. For example, in a typical urban scenario, during peak hours the average movement speed of a bus is 12-15 km/hr [3] in metropolitan cities of India. At this speed, the successive data points (published by the bus module) would be separated by 3-4 meters. When a bus is stopped at a bus-stop or a junction (due to red signal or congestion), the periodic location data points (published by bus module) are clustered at the same location. \n", "\n", "We have set the value of $eps = \\bar{ac} + 2 \\times \\sigma_{ac}$. The bus module application sends the location update every second. Hence, if we consider the condition of normality on our filtered location records (>30 location records), then 95% of location record would have an accuracy within the range of *eps*. Thus when a bus is *stopped* a location record of a bus would be in the *eps* periphery of the point. \n", "\n", "Now, varying ***minPts*** would led us to obtain different types of stoppages. For instance, by setting $minPts=4$ would lead us to extract all the stoppages on a route including stoppages due to speed breaker or pothole. In the following, we would execute the interactive code for detecting bus-stops on a route using filtered location records. The interactive nature of the bus-stop detector enables the readers to change the value of $minPts$ in run-time and observe its impact on a bus-stop detector." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will extract the filtered trip records of morning trip from MongoDB database by querying *TripInfo* for status `filteredLocationRecord:True` and `TripStartHour':'07'`. Subsequently, we will utilize the `meanAccuracy` and `stdAccuracy` computed using `Preprocessing.ApplyFiltering` in the section of *Preprocessing* for calculating *eps* value." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "'''Imports '''\n", "from __future__ import print_function\n", "from ipywidgets import interact, interactive, fixed, interact_manual, GridBox, Layout\n", "import ipywidgets as widgets\n", "\n", "from pymongo import MongoClient\n", "import pprint\n", "import numpy as np\n", "import sys\n", "import os\n", "from sklearn.cluster import DBSCAN\n", "import folium" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "'''Project specific library'''\n", "#sys.path.append(\"/\".join(os.getcwd().split('/')) +'/Codes/LibCodes')\n", "sys.path.append(\"/\".join(os.getcwd().split('/')) +'/LibCode')\n", "import StoppageDetection" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'\\nimport importlib\\nimportlib.reload(StoppageDetection)\\n'" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'''For updating the lib changes effects'''\n", "'''\n", "import importlib\n", "importlib.reload(StoppageDetection)\n", "'''" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "'''Initialize MongoClient'''\n", "con = MongoClient()\n", "\n", "RouteName='Git_ISCON_PDPU'" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'\\nProjectDataUsed = True\\nUsedPreTrained = True\\nUseMongoDB = False\\n'" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#'''\n", "ProjectDataUsed = True\n", "UsedPreTrained = False\n", "UseMongoDB = True\n", "#'''\n", "'''\n", "ProjectDataUsed = True\n", "UsedPreTrained = True\n", "UseMongoDB = False\n", "'''" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['22_12_2017__07_38_21', '26_12_2017__07_32_35', '20_12_2017__07_38_14', '21_12_2017__07_52_59', '08_01_2018__07_41_43', '09_01_2018__07_40_01', '18_01_2018__07_38_10', '19_01_2018__07_38_47', '22_01_2018__07_41_04', '27_12_2017__07_55_48', '29_12_2017__07_37_27', '01_01_2018__07_38_27', '05_04_2018__07_38_07', '14_02_2018__07_41_04', '22_02_2018__07_42_45', '16_02_2018__07_45_41', '19_02_2018__07_46_19', '20_02_2018__07_41_48', '21_02_2018__07_42_42', '13_03_2018__07_29_52', '14_03_2018__07_35_46', '20_03_2018__07_28_45', '15_02_2018__07_45_52', '03_04_2018__07_38_31', '21_03_2018__07_32_39', '22_03_2018__07_38_43', '12_02_2018__07_40_14', '30_01_2018__07_42_30', '01_02_2018__07_39_12', '02_02_2018__07_38_50', '29_01_2018__07_39_47']\n" ] } ], "source": [ "from pathlib import Path\n", "\n", "'''For directory management'''\n", "\n", "path = Path(os.getcwd())\n", "\n", "OneLevelUpPath = path.parents[0]\n", "NpPathDir = os.path.join(str(OneLevelUpPath), 'data','NpData')\n", "\n", "ResultPathDir = os.path.join(str(OneLevelUpPath), 'results','BusStopDetection','')\n", "\n", "if os.path.exists(ResultPathDir) == False:\n", " os.mkdir(ResultPathDir)\n", "\n", "\n", "if UseMongoDB == True:\n", " SingleTripsInfo = [rec['SingleTripInfo'] for rec in con[RouteName]['TripInfo'].find({'$and': \n", " [ {'filteredLocationRecord':True}, \n", " {'TripStartHour':'07'} ] })]\n", "else:\n", " SingleTripsInfo = np.load(f'{NpPathDir}/{RouteName}/TripInfo.npy',allow_pickle=True)\n", " SingleTripsInfo = [rec['SingleTripInfo'] for rec in SingleTripsInfo \n", " if rec['filteredLocationRecord']==True and rec['TripStartHour']=='07'] \n", "\n", " \n", "'''List down the trips extracted from the above query'''\n", "print([rec for rec in SingleTripsInfo])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, before applying *DBSCAN based Stoppage detection*, we mark the stoppages observed by the data collection volunteers during their trips for comparison with the stoppages detected using the bus-stop detector algorithm. Kindly note that these are the comprehensive list of observed stoppages and might not include the stoppages where the bus would have occasionally slowed down and started moving. These stoppages would have been detected using the bus-stop detector algorithm. Secondly, for some trips, the bus would not have stopped at junction or crossroads due to lesser traffic and in such a scenario, the bus-stop detector algorithm would not detect the crossroad as stoppage. Concretely, the list of observed stoppages gives us the intuition whether the bus-stop detector algorithm is working properly or not and the bus-stop detector could detect more stoppages than marked on the list or lesser stoppages based on the bus movement on that day and the parameters selected for the bus-stop detector algorithm." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def MarkActualStoppages(map_osm, AcutualBusStops, AcutualCrossRoad):\n", " '''\n", " input: The map object, list of bus-stops and crossroads\n", " output: The map object with the stoppages\n", " function: Mark actual bus-stop on a route for comparison with the detected stoppage\n", " '''\n", " StoppageList = [{'Location': [23.0281012, 72.5073624], 'id': 0,'Type':'BusStop', 'Name':'ISCON'}, #ISCON\n", " {'Location': [23.03870415090908, 72.51184797090909], 'id': 1, 'Type':'BusStop', 'Name':'Pakwaan'}, #Pakwaan\n", " {'Location': [23.046436509895834, 72.5153306670573], 'id': 2, 'Type':'BusStop', 'Name': 'GuruDwara' },\n", " {'Location': [23.05023487142857, 72.517192015625], 'id': 3, 'Type':'BusStop', 'Name': 'Thaltej'}, #Thaltej\n", " {'Location': [23.058987780666662, 72.51988011433333], 'id': 4, 'Type':'BusStop', 'Name': 'Zydus' }, #Zydus\n", " {'Location': [23.077070729310343, 72.52525763017242], 'id': 5, 'Type':'BusStop', 'Name': 'Kargil'}, #Kargil\n", " {'Location': [23.086530150000005, 72.52805168333333], 'id': 6,'Type':'BusStop', 'Name':'Sola'}, #Sola\n", " {'Location': [23.0991167, 72.5316183], 'id':7,'Type':'CrossRoad', 'Name':'Gota'}, #Gota\n", " {'Location': [23.136835, 72.54286], 'id':8,'Type':'CrossRoad', 'Name':'Vaishnodevi'}, #Vaishnodevi\n", " {'Location': [23.1607333,72.5569467], 'id':9,'Type':'CrossRoad', 'Name':'Khoraj'}, #Khoraj\n", " {'Location': [23.17621,72.5843483], 'id':10,'Type':'CrossRoad', 'Name':'Adalaj-Uvarsad'}, #Adalaj-Uvarsad\n", " {'Location': [23.1927733, 72.6151667], 'id':11,'Type':'CrossRoad', 'Name':'Sargasan'}, #Sargasan\n", " {'Location': [23.185605, 72.637985], 'id':12,'Type':'CrossRoad', 'Name': 'Raksha-shakti circle'}, #Raksha-shakti circle\n", " {'Location': [23.1605217, 72.63598], 'id':13,'Type':'CrossRoad', 'Name': 'Bhaijipura'}, #Bhaijipura\n", " {'Location': [23.15448, 72.66474], 'id': 14, 'Type':'BusStop', 'Name': 'PDPU'} #PDPU\n", " ]\n", " map_osm = StoppageDetection.MarkActualBusStopOnAMap(StoppageList, map_osm, AcutualBusStops, AcutualCrossRoad)\n", " return(map_osm)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def PerformDBSCAN(TripIndex, minPts, AcutualBusStops, AcutualCrossRoad, ResultPathDir):\n", " '''\n", " input: The trip index for selection of one of the trips, DBSCAN parameter minPts, \n", " list of observed bus-stop stoppages and other stoppages\n", " output: Map with detected and observed bus-stop based on selected minPts\n", " function: Peform the DBSCAN based bus-stop detection algorithm on a selected trip and \n", " update the detected stoppages and observed stoppages on a map\n", " '''\n", " \n", " if UseMongoDB == True:\n", " \n", " LocationRecord = [rec for rec in con [RouteName] [SingleTripsInfo[TripIndex]\n", " +'.Filtered'].find().sort([('epoch',1)]) ]\n", "\n", " meanAccuracy = [rec['meanAccuracy'] for\n", " rec in con[RouteName]['TripInfo'].find({'SingleTripInfo':SingleTripsInfo[TripIndex] })][0]\n", "\n", " stdAccuracy = [rec['stdAccuracy'] for\n", " rec in con[RouteName]['TripInfo'].find({'SingleTripInfo':SingleTripsInfo[TripIndex]})][0]\n", " \n", " else:\n", " \n", " SingleTripInfo = SingleTripsInfo[TripIndex]\n", " LocationRecord = np.load(f'{NpPathDir}/{RouteName}/{SingleTripInfo}.Filtered.npy',allow_pickle=True)\n", " \n", " TripsInfo = np.load(f'{NpPathDir}/{RouteName}/TripInfo.npy',allow_pickle=True)\n", " TripInfo = [rec for rec in TripsInfo if rec['SingleTripInfo']==SingleTripInfo][0]\n", " \n", " #meanAccuracy, stdAccuracy = TripInfo['meanAccuracy'], TripInfo['stdAccuracy']\n", " meanAccuracy = TripInfo['meanAccuracy']\n", " stdAccuracy = TripInfo['stdAccuracy']\n", " \n", " \n", " epsForDetection = meanAccuracy + 2 * stdAccuracy\n", " \n", " map_osm = StoppageDetection.InitializeMap(LocationRecord)\n", " \n", " LocationTupleList = np.asarray([(rec['Latitude'],rec['Longitude']) \n", " for rec in LocationRecord])\n", " \n", " model = DBSCAN(eps=epsForDetection, min_samples=minPts, metric=StoppageDetection.mydistance).fit(LocationTupleList) \n", " \n", " clusters=np.amax(model.labels_)+1\n", " \n", " map_osm = StoppageDetection.MarkDetectedBusStopOnAMap(LocationTupleList, model, clusters, \n", " LocationRecord, map_osm, ResultPathDir)\n", " \n", " '''Mark actual bus-stop on a route for comparison'''\n", " map_osm = MarkActualStoppages(map_osm, AcutualBusStops, AcutualCrossRoad)\n", " \n", "\n", " return(map_osm)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will now use one of the trips from `SingleTripsInfo` for an interactive demo of DBCSCAN based bus-stop detection. Let say we choose first trip `29_01_2018__07_39_47` i.e the trip with index 0. One can choose any of the trips and change the value of *minPts* and observe the output of the DBSCAN based bus-stop detection algorithm on a map.\n", "\n", "The stoppages detected using the bus-stop detector algorithm are marked with a *blue* marker, and the observed bus-stops are marked with a *green* marker whereas the observed crossroad and junctions are marked with a *red* marker. Moreover, the route of the trip is marked with a *red* color." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": false }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "0b6be2f0716e44738e5a58286e4eb625", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(Dropdown(description='Select trip', options=(('22_12_2017__07_38_21', 0), ('26_12_2017__…" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'''Display interactive stoppage detector on a map'''\n", "index = widgets.Dropdown(options =[(SingleTripInfo,index) for index,SingleTripInfo in enumerate(SingleTripsInfo)],\n", " value=0, \n", " description = 'Select trip' )\n", "\n", "minPts = widgets.IntSlider (min=1, max=15, value=4, description='minPts')\n", "\n", "AcutualBusStops = widgets.Checkbox(value=False, description='Display acutal bus-stop', disabled=False)\n", "AcutualCrossRoad = widgets.Checkbox(value=False, description='Display observed crossroad', disabled=False)\n", "\n", "interact(PerformDBSCAN, TripIndex = index, minPts = minPts, AcutualBusStops = AcutualBusStops, \n", " AcutualCrossRoad = AcutualCrossRoad, ResultPathDir = ResultPathDir)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we will save the list of observed bus-stops and other stoppages for the *ISCON to PDPU route (i.e. North bound)* in MongoDB with a collection named *BusStops.NorthBound*. Likewise, we will store the list of observed bus-stops and other stoppages for the *PDPU to ISCON route (i.e. South bound)* in MongoDB with a collection named *BusStops.SouthBound*." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "StoppageListNorthBound = [{'Location': [23.0281012, 72.5073624], 'id': 0,'Type':'BusStop', 'Name':'ISCON'}, #ISCON\n", " {'Location': [23.03870415090908, 72.51184797090909], 'id': 1, 'Type':'BusStop', 'Name':'Pakwaan'}, #Pakwaan\n", " {'Location': [23.046436509895834, 72.5153306670573], 'id': 2, 'Type':'BusStop', 'Name': 'GuruDwara' },\n", " {'Location': [23.05023487142857, 72.517192015625], 'id': 3, 'Type':'BusStop', 'Name': 'Thaltej'}, #Thaltej\n", " {'Location': [23.058987780666662, 72.51988011433333], 'id': 4, 'Type':'BusStop', 'Name': 'Zydus' }, #Zydus\n", " {'Location': [23.077070729310343, 72.52525763017242], 'id': 5, 'Type':'BusStop', 'Name': 'Kargil'}, #Kargil\n", " {'Location': [23.086530150000005, 72.52805168333333], 'id': 6,'Type':'BusStop', 'Name':'Sola'}, #Sola\n", " {'Location': [23.0991167, 72.5316183], 'id':7, 'Type':'CrossRoad', 'Name':'Gota'}, #Gota\n", " {'Location': [23.136835, 72.54286], 'id':8, 'Type':'CrossRoad', 'Name':'Vaishnodevi'}, #Vaishnodevi\n", " {'Location': [23.1607333,72.5569467], 'id':9, 'Type':'CrossRoad', 'Name':'Khoraj'}, #Khoraj\n", " {'Location': [23.17621,72.5843483], 'id':10, 'Type':'CrossRoad', 'Name':'Adalaj-Uvarsad'}, #Adalaj-Uvarsad\n", " {'Location': [23.1927733, 72.6151667], 'id':11, 'Type':'CrossRoad', 'Name':'Sargasan'}, #Sargasan\n", " {'Location': [23.185605, 72.637985], 'id':12, 'Type':'CrossRoad', 'Name': 'Raksha-shakti circle'}, #Raksha-shakti circle\n", " {'Location': [23.1605217, 72.63598], 'id':13, 'Type':'CrossRoad', 'Name': 'Bhaijipura'}, #Bhaijipura\n", " {'Location': [23.15448, 72.66474], 'id': 14, 'Type':'BusStop', 'Name': 'PDPU'} #PDPU\n", " ]\n", "if UseMongoDB==True:\n", " con[RouteName]['BusStops.NorthBound'].insert_many(StoppageListNorthBound)\n", "\n", "StoppageListSouthBound = [{'Location': [23.0279711, 72.5078451], 'id': 0, 'Type': 'BusStop', 'Name': 'ISCON'}, #ISCON\n", " {'Location': [23.038713706, 72.511958278], 'id': 1, 'Type': 'BusStop', 'Name': 'Pakwaan'}, #Pakwaan\n", " {'Location': [23.046480342276425, 72.51585688109755], 'id': 2, 'Type': 'BusStop', 'Name': 'Gurudwara'}, #Gurudwara\n", " {'Location': [23.0498, 72.5174528], 'id': 3, 'Type': 'BusStop', 'Name': 'Thaltej'}, #Thaltej\n", " {'Location': [23.0582231, 72.5201619], 'id': 4, 'Type': 'BusStop', 'Name': 'Zydus'}, #Zydus\n", " {'Location': [23.076668105241932, 72.5253161935484], 'id': 5, 'Type': 'BusStop', 'Name': 'Kargil'}, #Kargil\n", " {'Location': [23.086980111684788, 72.5283425548913], 'id': 6, 'Type': 'BusStop', 'Name': 'Sola'}, #Sola\n", " {'Location': [23.0991004, 72.5319368], 'id': 7, 'Type':'CrossRoad', 'Name': 'Gota'}, #Gota m1\n", " {'Location': [23.1372724, 72.5430607], 'id': 8, 'Type':'CrossRoad', 'Name': 'Vaishnodevi'}, #Vaishnodevi m2\n", " {'Location': [23.1607333,72.5569467], 'id': 9, 'Type':'CrossRoad', 'Name': 'Khoraj'}, #Khoraj m3\n", " {'Location': [23.1776699 , 72.5869957], 'id': 10, 'Type':'CrossRoad', 'Name': 'Adalaj-uvarsad'}, #Adalaj-uvarsad m4\n", " {'Location': [23.1926012, 72.6154206], 'id': 11, 'Type':'CrossRoad','Name': 'Sargasan'}, #Sargasan m5\n", " {'Location': [23.1852905, 72.6386404], 'id': 12, 'Type':'CrossRoad', 'Name': 'RakshaShakti'}, #RakshaShakti m6\n", " {'Location': [23.1604408, 72.635821], 'id': 13, 'Type':'CrossRoad', 'Name': 'Bhaijipura'}, #Bhaijipura m7\n", " {'Location': [23.15448, 72.66474], 'id': 14,'Type': 'BusStop', 'Name': 'PDPU'} #PDPU b8\n", "]\n", "if UseMongoDB==True:\n", " con[RouteName]['BusStops.SouthBound'].insert_many(StoppageListSouthBound)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# References:\n", "* [1] Martin Ester, Hans-Peter Kriegel, Jorg Sander, and Xiaowei Xu. August, 1996. A density-based algorithm for discovering clusters a density-based algorithm for discovering clusters in large spatial databases with noise. 2nd ACM conference on International Conference on Knowledge Discovery and Data Mining (KDD) (August, 1996), 226–231.\n", "* [2] W. Commons”, “”file:dbscan-density-data.svg — wikimedia commons, the free media repository”,” ”2011”, ”[Online;\n", "accessed 30-April-2019]”\n", "* [3] 2011. Bangalore Mobility Indicators 2010-11. Urban Mass Transit Company Limited (UMTC) (2011)\n", " " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6.9" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "0073a321f73d46cbb0665edeb731ef9e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_d10a1ec811c94d8f8904d22dc3fbc598", "IPY_MODEL_110f739498244e30907b8588055a34f8", "IPY_MODEL_b331aa19159740a8a18e2ca8390da9b8" ], "layout": "IPY_MODEL_8895e8e722eb44df82cafb16b0287f3d" } }, "00e496b03e194e03aa2398d00d8439dd": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_3cde2a4097b64dfe84ba85bccf62cb67", "IPY_MODEL_5fa5d453f5f848f7b001b72da37709d5", "IPY_MODEL_91953dc818bf4dd5b482df8ea563fbd6", "IPY_MODEL_aa44490b6970487ab58e8a0ac1b6d3ae", "IPY_MODEL_9997fb8980ab4a4aa40105fb69f32126" ], "layout": "IPY_MODEL_0625a4dd23194f23b9f80e56f7924084" } }, "00eb4985b24e4e4ab9627eeb904f674e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "015328b4c612450297cd12ed945dfa61": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_692eafcd779c4faa940dcda1cff22bc3" } }, "0373b0dc860141cda5f67d5218ef8619": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "0625845385d84fac8f5307c3aca83718": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "0625a4dd23194f23b9f80e56f7924084": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "0aa113689b7e4810b53624b274c6591c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DropdownModel", "state": { "_options_labels": [ "29_01_2018__07_39_47", "30_01_2018__07_42_30", "01_02_2018__07_39_12", "02_02_2018__07_38_50", "18_01_2018__07_38_10", "19_01_2018__07_38_47", "22_01_2018__07_41_04", "22_12_2017__07_38_21", "26_12_2017__07_32_35", "20_12_2017__07_38_14", "21_12_2017__07_52_59", "08_01_2018__07_41_43", "09_01_2018__07_40_01", "27_12_2017__07_55_48", "29_12_2017__07_37_27", "01_01_2018__07_38_27", "12_02_2018__07_40_14", "15_02_2018__07_45_52", "16_02_2018__07_45_41", "19_02_2018__07_46_19", "20_02_2018__07_41_48", "21_02_2018__07_42_42", "13_03_2018__07_29_52", "14_03_2018__07_35_46", "20_03_2018__07_28_45", "21_03_2018__07_32_39", "22_03_2018__07_38_43", "14_02_2018__07_41_04", "22_02_2018__07_42_45", "12_02_2018__07_40_14", "15_02_2018__07_45_52", "16_02_2018__07_45_41", "19_02_2018__07_46_19", "20_02_2018__07_41_48", "21_02_2018__07_42_42", "13_03_2018__07_29_52", "14_03_2018__07_35_46", "20_03_2018__07_28_45", "21_03_2018__07_32_39", "22_03_2018__07_38_43", "14_02_2018__07_41_04", "22_02_2018__07_42_45" ], "description": "Select trip", "index": 0, "layout": "IPY_MODEL_fc1147e00f534b63b3995ef97fc24d95", "style": "IPY_MODEL_7cca86ac16d74b6694eb2bc125db2df3" } }, "0d7b6522f64f44f8addc0730676583ec": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_95d89c31ef614e92a87f185f169d3194", "outputs": [ { "data": { "text/html": "
", "text/plain": "" }, "metadata": {}, "output_type": "display_data" } ] } }, "0da1ed9c95694e97a44dcb50aefaa20e": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "100bdf6ec889413ab3eab611d1718a49": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "110f739498244e30907b8588055a34f8": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "IntSliderModel", "state": { "description": "minPts", "layout": "IPY_MODEL_0373b0dc860141cda5f67d5218ef8619", "max": 15, "min": 1, "style": "IPY_MODEL_3a49673c46d64c34b0aded666fbf26dc", "value": 6 } }, "112357fe43dc4bc19f141c02e0959584": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "12a7f7b570c24a2cbc524764e658aebf": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "13966caa273a493c9c2675e58fab2a9e": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_168868003e244480b61171cdd47640d8", "outputs": [ { "data": { "text/html": "
", "text/plain": "" }, "metadata": {}, "output_type": "display_data" } ] } }, "13c1754eb4ab450a8806db1ec82c1133": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_bb4e7b4a0591497d928a3b15da8376c5" } }, "1546dff30d554ef09f62aa7c3e697264": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "168868003e244480b61171cdd47640d8": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "17e59704dd4f42e3ae4fb945e01a31b3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_2520a979a2254890bb775d22496836c3", "IPY_MODEL_e6b7011ea12e4ab2b6453eeede8d45af", "IPY_MODEL_daebfebcaf8c462aacc9746f215d3381", "IPY_MODEL_658af26d2cdc46eeaa00280a28371798", "IPY_MODEL_f97c3c70fc7d490cac2924de3b1f6b85" ], "layout": "IPY_MODEL_ceed3bb6b533400f9ee83721c32ee711" } }, "18035ff830304522919a30e07584f08d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "CheckboxModel", "state": { "description": "Display observed crossroad", "disabled": false, "layout": "IPY_MODEL_5d53750b084b48a79c245fe97ecec997", "style": "IPY_MODEL_332478350c364d2ebd360f5203db0245", "value": false } }, "1935f8d997bc4c64aad69a5aff383aa9": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_45840e72a5b74353999d5a5a3a37d0d5", "outputs": [ { "name": "stdout", "output_type": "stream", "text": "29_01_2018__07_39_47 5\n6.740349989996618 \n" }, { "ename": "TypeError", "evalue": "MarkActualStoppages() missing 2 required positional arguments: 'AcutualBusStops' and 'AcutualCrossRoad'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m~/.local/lib/python3.6/site-packages/ipywidgets/widgets/interaction.py\u001b[0m in \u001b[0;36mupdate\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 249\u001b[0m \u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mwidget\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_interact_value\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 250\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mwidget\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_kwarg\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 251\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 252\u001b[0m \u001b[0mshow_inline_matplotlib_plots\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 253\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mauto_display\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresult\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m\u001b[0m in \u001b[0;36mPerformDBSCAN\u001b[0;34m(TripIndex, minPts)\u001b[0m\n\u001b[1;32m 31\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 32\u001b[0m \u001b[0;34m'''Mark actual bus-stop on a route for comparison'''\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 33\u001b[0;31m \u001b[0mmap_osm\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mMarkActualStoppages\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmap_osm\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 34\u001b[0m \u001b[0;32mreturn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmap_osm\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mTypeError\u001b[0m: MarkActualStoppages() missing 2 required positional arguments: 'AcutualBusStops' and 'AcutualCrossRoad'" ] } ] } }, "19645efd501048ca872a6b14a110f645": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "1c95e4cd82cc4876aed5163e21ea3f14": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "1e3ab0ed53444b45ab5ac1c67cd3250f": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "1f4b545613ab4f4a816045bd7d461f21": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "SliderStyleModel", "state": { "description_width": "" } }, "20b8e74157e2475fa61c0f58fd0804e7": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "2135a01b23a2432fbf27acab6624e9f2": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_0da1ed9c95694e97a44dcb50aefaa20e" } }, "240be13072a74ad89dc2be9a3196b5dc": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_ff8e0d526aba48939743d6c0d94ce326", "outputs": [ { "name": "stdout", "output_type": "stream", "text": "29_01_2018__07_39_47 5\n6.740349989996618 \n" }, { "ename": "TypeError", "evalue": "MarkActualStoppages() missing 2 required positional arguments: 'AcutualBusStops' and 'AcutualCrossRoad'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m~/.local/lib/python3.6/site-packages/ipywidgets/widgets/interaction.py\u001b[0m in \u001b[0;36mupdate\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 249\u001b[0m \u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mwidget\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_interact_value\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 250\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mwidget\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_kwarg\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 251\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 252\u001b[0m \u001b[0mshow_inline_matplotlib_plots\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 253\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mauto_display\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresult\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m\u001b[0m in \u001b[0;36mPerformDBSCAN\u001b[0;34m(TripIndex, minPts)\u001b[0m\n\u001b[1;32m 31\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 32\u001b[0m \u001b[0;34m'''Mark actual bus-stop on a route for comparison'''\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 33\u001b[0;31m \u001b[0mmap_osm\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mMarkActualStoppages\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmap_osm\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 34\u001b[0m \u001b[0;32mreturn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmap_osm\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mTypeError\u001b[0m: MarkActualStoppages() missing 2 required positional arguments: 'AcutualBusStops' and 'AcutualCrossRoad'" ] } ] } }, "2520a979a2254890bb775d22496836c3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DropdownModel", "state": { "_options_labels": [ "29_01_2018__07_39_47", "30_01_2018__07_42_30", "01_02_2018__07_39_12", "02_02_2018__07_38_50", "18_01_2018__07_38_10", "19_01_2018__07_38_47", "22_01_2018__07_41_04", "22_12_2017__07_38_21", "26_12_2017__07_32_35", "20_12_2017__07_38_14", "21_12_2017__07_52_59", "08_01_2018__07_41_43", "09_01_2018__07_40_01", "27_12_2017__07_55_48", "29_12_2017__07_37_27", "01_01_2018__07_38_27", "12_02_2018__07_40_14", "15_02_2018__07_45_52", "16_02_2018__07_45_41", "19_02_2018__07_46_19", "20_02_2018__07_41_48", "21_02_2018__07_42_42", "13_03_2018__07_29_52", "14_03_2018__07_35_46", "20_03_2018__07_28_45", "21_03_2018__07_32_39", "22_03_2018__07_38_43", "14_02_2018__07_41_04", "22_02_2018__07_42_45", "12_02_2018__07_40_14", "15_02_2018__07_45_52", "16_02_2018__07_45_41", "19_02_2018__07_46_19", "20_02_2018__07_41_48", "21_02_2018__07_42_42", "13_03_2018__07_29_52", "14_03_2018__07_35_46", "20_03_2018__07_28_45", "21_03_2018__07_32_39", "22_03_2018__07_38_43", "14_02_2018__07_41_04", "22_02_2018__07_42_45" ], "description": "Select trip", "index": 0, "layout": "IPY_MODEL_d5a816321a8c4eb3aded5e51f1ea230a", "style": "IPY_MODEL_919fff6135484a88b954283ac5d50366" } }, "2a7b0716d6fd455aa5dfc49bedc7c67a": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "2c9ca33c873746949f221bcd729eec21": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "2fb74f4d354e4df4a0d3a26aeede21b4": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_e08978feac4e40a78acbedf79780583b", "outputs": [ { "data": { "text/html": "
", "text/plain": "" }, "metadata": {}, "output_type": "display_data" } ] } }, "2fe242d4ccc74d71a82a1171114f4611": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "310d05f0adfc481e9da899e8deff6faa": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_2520a979a2254890bb775d22496836c3", "IPY_MODEL_e6b7011ea12e4ab2b6453eeede8d45af", "IPY_MODEL_9b993beda0a84243ad4478e589ed7684", "IPY_MODEL_66cfbce83a964d19b3376a33278c0942", "IPY_MODEL_13966caa273a493c9c2675e58fab2a9e" ], "layout": "IPY_MODEL_c0d00a10db7546c2bc9a159d47748b86" } }, "32889183c68b4b4780a29fedd52e19cd": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "CheckboxModel", "state": { "description": "Display acutal bus-stop", "disabled": false, "layout": "IPY_MODEL_1e3ab0ed53444b45ab5ac1c67cd3250f", "style": "IPY_MODEL_1546dff30d554ef09f62aa7c3e697264", "value": false } }, "329a6fdd1b8b4bcfa90b9a48829380a8": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "CheckboxModel", "state": { "description": "Display observed crossroad", "disabled": false, "layout": "IPY_MODEL_aca4806c2ec94237a7a002e1f1649e40", "style": "IPY_MODEL_c2f7a5caff81469eb441917bf17ed958", "value": false } }, "332478350c364d2ebd360f5203db0245": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "36c6d1ec05b14cbe89442b46e77a349d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_2520a979a2254890bb775d22496836c3", "IPY_MODEL_e6b7011ea12e4ab2b6453eeede8d45af", "IPY_MODEL_240be13072a74ad89dc2be9a3196b5dc" ], "layout": "IPY_MODEL_19645efd501048ca872a6b14a110f645" } }, "383643e9d31341b281e1766cb255a626": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_a9898b8b452943138a0adc9f1a4fbd7e", "outputs": [ { "name": "stdout", "output_type": "stream", "text": "29_01_2018__07_39_47 5\n6.740349989996618 \n" }, { "data": { "text/html": "
", "text/plain": "" }, "metadata": {}, "output_type": "display_data" } ] } }, "3a49673c46d64c34b0aded666fbf26dc": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "SliderStyleModel", "state": { "description_width": "" } }, "3c0983bd6d274d3e9393f0104c76e7a0": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "3cde2a4097b64dfe84ba85bccf62cb67": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DropdownModel", "state": { "_options_labels": [ "29_01_2018__07_39_47", "30_01_2018__07_42_30", "01_02_2018__07_39_12", "02_02_2018__07_38_50", "18_01_2018__07_38_10", "19_01_2018__07_38_47", "22_01_2018__07_41_04", "22_12_2017__07_38_21", "26_12_2017__07_32_35", "20_12_2017__07_38_14", "21_12_2017__07_52_59", "08_01_2018__07_41_43", "09_01_2018__07_40_01", "27_12_2017__07_55_48", "29_12_2017__07_37_27", "01_01_2018__07_38_27", "12_02_2018__07_40_14", "15_02_2018__07_45_52", "16_02_2018__07_45_41", "19_02_2018__07_46_19", "20_02_2018__07_41_48", "21_02_2018__07_42_42", "13_03_2018__07_29_52", "14_03_2018__07_35_46", "20_03_2018__07_28_45", "21_03_2018__07_32_39", "22_03_2018__07_38_43", "14_02_2018__07_41_04", "22_02_2018__07_42_45", "12_02_2018__07_40_14", "15_02_2018__07_45_52", "16_02_2018__07_45_41", "19_02_2018__07_46_19", "20_02_2018__07_41_48", "21_02_2018__07_42_42", "13_03_2018__07_29_52", "14_03_2018__07_35_46", "20_03_2018__07_28_45", "21_03_2018__07_32_39", "22_03_2018__07_38_43", "14_02_2018__07_41_04", "22_02_2018__07_42_45" ], "description": "Select trip", "index": 0, "layout": "IPY_MODEL_1c95e4cd82cc4876aed5163e21ea3f14", "style": "IPY_MODEL_ae42c5b43e124a5183c2ac4aa5408a78" } }, "4060c9bd67d843489df8f25f967d49fd": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "45840e72a5b74353999d5a5a3a37d0d5": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "47c89f615d7d48f481c71f2e6772b9e6": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "IntSliderModel", "state": { "description": "minPts", "layout": "IPY_MODEL_7273fac2ce664a8eb00786fe1ae3fb0b", "max": 15, "min": 1, "style": "IPY_MODEL_9f4d6fcefeac409bbba7d3f6289d1261", "value": 4 } }, "47d152db139947a28d36d81f2759b5ac": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "CheckboxModel", "state": { "description": "Display acutal bus-stop", "disabled": false, "layout": "IPY_MODEL_9505a929d269488bb031aadddaa0645d", "style": "IPY_MODEL_112357fe43dc4bc19f141c02e0959584", "value": false } }, "4899aa828078471fb7504b71040c6a6b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_2520a979a2254890bb775d22496836c3", "IPY_MODEL_e6b7011ea12e4ab2b6453eeede8d45af", "IPY_MODEL_5be01c626e1f4989b3c758b39e4a71a5" ], "layout": "IPY_MODEL_ad6f20e22a144788ae54178915d5a6e5" } }, "4b932b0f0aea4fbfb0b38b239eeebc10": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "4ef1db82b42a469e9bba14c959740b9c": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "524ad029529d4ccaa8460ca1030f88ac": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "535177894c514ab48992966002568b3b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "5538be9d951d4ff2b2a9547d8d36c0dd": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_d10a1ec811c94d8f8904d22dc3fbc598", "IPY_MODEL_110f739498244e30907b8588055a34f8", "IPY_MODEL_e0f91b224aef4121978cc2ca21e184ff" ], "layout": "IPY_MODEL_ecd7ec747ebe4cb58b4d455dfa531428" } }, "5b7826faa3c945efabe19b6235b7945c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "GridBoxModel", "state": { "children": [ "IPY_MODEL_2520a979a2254890bb775d22496836c3", "IPY_MODEL_e6b7011ea12e4ab2b6453eeede8d45af", "IPY_MODEL_9b993beda0a84243ad4478e589ed7684", "IPY_MODEL_66cfbce83a964d19b3376a33278c0942" ], "layout": "IPY_MODEL_a4a02ee058bf4183b0c0ca00668720a0" } }, "5be01c626e1f4989b3c758b39e4a71a5": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_b5bcaa40ee5f43c89b54db0f3e34e73f", "outputs": [ { "name": "stdout", "output_type": "stream", "text": "29_01_2018__07_39_47 5\n6.740349989996618 \n" }, { "data": { "text/html": "
", "text/plain": "" }, "metadata": {}, "output_type": "display_data" } ] } }, "5cb93f4ddd9a4bffa4c61660e47e95af": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "5d53750b084b48a79c245fe97ecec997": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "5d551cd1b6db4e4596926bb59e5262e1": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_2520a979a2254890bb775d22496836c3", "IPY_MODEL_e6b7011ea12e4ab2b6453eeede8d45af", "IPY_MODEL_1935f8d997bc4c64aad69a5aff383aa9" ], "layout": "IPY_MODEL_4b932b0f0aea4fbfb0b38b239eeebc10" } }, "5e1e79db701e48f695cf8cd1d6977787": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": { "grid_template_areas": "\n \"header header header header\"\n \"main main . sidebar \"\n \"footer footer footer footer\"\n ", "grid_template_columns": "25% 25% 25% 25%", "grid_template_rows": "auto auto auto", "width": "50%" } }, "5e4f4ea2e037486b9bef65d655776c23": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "SliderStyleModel", "state": { "description_width": "" } }, "5ea33b71eb524b47a278f024192c53aa": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "5ee78f123e9a4007850d7669a45df23e": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_ee8b20c1c15e45299684135f3d667ab9", "outputs": [ { "data": { "text/html": "
", "text/plain": "" }, "metadata": {}, "output_type": "display_data" } ] } }, "5fa5d453f5f848f7b001b72da37709d5": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "IntSliderModel", "state": { "description": "minPts", "layout": "IPY_MODEL_ae01bcd7837e4810a1a9dbb26e9e9fc5", "max": 15, "min": 1, "style": "IPY_MODEL_1f4b545613ab4f4a816045bd7d461f21", "value": 4 } }, "6239a9513ccb414a91a987c1ed21417d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_81fed2ac5f0040df950fe48f00dc4387", "IPY_MODEL_88dfbc4a63c04ee1b46b877b7131ef49", "IPY_MODEL_47d152db139947a28d36d81f2759b5ac", "IPY_MODEL_aeb0126e7aab441ba8428f426451e4b7", "IPY_MODEL_a8d9f953d98544adba1c6bbc64e67587" ], "layout": "IPY_MODEL_0625845385d84fac8f5307c3aca83718" } }, "634ad2f6b426457fa1b6fbb9830c3274": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "658af26d2cdc46eeaa00280a28371798": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "CheckboxModel", "state": { "description": "Check me", "disabled": false, "layout": "IPY_MODEL_813e9b942e684014862b5c20cfc9da71", "style": "IPY_MODEL_e0d715ed32c7479ebe61099d5c3c8a63", "value": false } }, "65cab27285df4162b079e7c0104b2222": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_88244fd4b078478cbb294e8527444c87", "IPY_MODEL_b6565e9f52774535a5156c8f4f76e133", "IPY_MODEL_708c750788894f5da08c2b09cb630a4b", "IPY_MODEL_329a6fdd1b8b4bcfa90b9a48829380a8", "IPY_MODEL_dabca5b725ff48c59144f9d0214c0f05" ], "layout": "IPY_MODEL_7112ef0824f4488298d9e38eb0fc26e7" } }, "65e229ad134c468ba6ba7d6e9bf9d4b0": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "66cfbce83a964d19b3376a33278c0942": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "CheckboxModel", "state": { "description": "Display observed crossroad", "disabled": false, "layout": "IPY_MODEL_e3b3ec5ef91d4c71b4e811eb28c8731c", "style": "IPY_MODEL_524ad029529d4ccaa8460ca1030f88ac", "value": false } }, "692eafcd779c4faa940dcda1cff22bc3": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "7071bc4894704d6398775c54928e7aba": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "708c750788894f5da08c2b09cb630a4b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "CheckboxModel", "state": { "description": "Display acutal bus-stop", "disabled": false, "layout": "IPY_MODEL_80746cc1afa940d58031dda3afa237a8", "style": "IPY_MODEL_535177894c514ab48992966002568b3b", "value": false } }, "7112ef0824f4488298d9e38eb0fc26e7": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "7160d540789c4f358ffc5916ae4e0f9c": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "724fc80f587d44ae94942020c23c7a79": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_2520a979a2254890bb775d22496836c3", "IPY_MODEL_e6b7011ea12e4ab2b6453eeede8d45af", "IPY_MODEL_9b993beda0a84243ad4478e589ed7684", "IPY_MODEL_66cfbce83a964d19b3376a33278c0942", "IPY_MODEL_2fb74f4d354e4df4a0d3a26aeede21b4" ], "layout": "IPY_MODEL_b71129eb395a4f0b8f487acfbbe51fda" } }, "7273fac2ce664a8eb00786fe1ae3fb0b": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "768b54a3f49c4710a0243e6e324bcc63": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "771930d952a74741b562637e2cef6978": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "SliderStyleModel", "state": { "description_width": "" } }, "78222368a573493eba82cf22ff4cca00": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "7b27a6bc0d6041ddaad3135bfbb73831": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_2520a979a2254890bb775d22496836c3", "IPY_MODEL_e6b7011ea12e4ab2b6453eeede8d45af", "IPY_MODEL_9b993beda0a84243ad4478e589ed7684", "IPY_MODEL_66cfbce83a964d19b3376a33278c0942", "IPY_MODEL_383643e9d31341b281e1766cb255a626" ], "layout": "IPY_MODEL_e1476545bf144fee99ccc742ad3df45e" } }, "7c36343f38b6424faee820622bf53d87": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "7cca86ac16d74b6694eb2bc125db2df3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "80746cc1afa940d58031dda3afa237a8": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "813e9b942e684014862b5c20cfc9da71": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "81fed2ac5f0040df950fe48f00dc4387": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DropdownModel", "state": { "_options_labels": [ "29_01_2018__07_39_47", "30_01_2018__07_42_30", "01_02_2018__07_39_12", "02_02_2018__07_38_50", "18_01_2018__07_38_10", "19_01_2018__07_38_47", "22_01_2018__07_41_04", "22_12_2017__07_38_21", "26_12_2017__07_32_35", "20_12_2017__07_38_14", "21_12_2017__07_52_59", "08_01_2018__07_41_43", "09_01_2018__07_40_01", "27_12_2017__07_55_48", "29_12_2017__07_37_27", "01_01_2018__07_38_27", "12_02_2018__07_40_14", "15_02_2018__07_45_52", "16_02_2018__07_45_41", "19_02_2018__07_46_19", "20_02_2018__07_41_48", "21_02_2018__07_42_42", "13_03_2018__07_29_52", "14_03_2018__07_35_46", "20_03_2018__07_28_45", "21_03_2018__07_32_39", "22_03_2018__07_38_43", "14_02_2018__07_41_04", "22_02_2018__07_42_45", "12_02_2018__07_40_14", "15_02_2018__07_45_52", "16_02_2018__07_45_41", "19_02_2018__07_46_19", "20_02_2018__07_41_48", "21_02_2018__07_42_42", "13_03_2018__07_29_52", "14_03_2018__07_35_46", "20_03_2018__07_28_45", "21_03_2018__07_32_39", "22_03_2018__07_38_43", "14_02_2018__07_41_04", "22_02_2018__07_42_45" ], "description": "Select trip", "index": 0, "layout": "IPY_MODEL_4060c9bd67d843489df8f25f967d49fd", "style": "IPY_MODEL_838ab72b1cea44ba87624f39b0d000ba" } }, "838ab72b1cea44ba87624f39b0d000ba": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "84cb8eadfc8b4b78a932a37c2ce35380": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "86aa7b346b2c457a88cfc6ae68581bc0": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "87120b5166de4ac5b14d2fe2a9836107": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "IntSliderModel", "state": { "description": "minPts", "layout": "IPY_MODEL_a7ca4fb8f7ea4103b5d3e59e4e50bf99", "max": 15, "min": 1, "style": "IPY_MODEL_c588a4e5a0854ddb90b13efa862b770e", "value": 5 } }, "88244fd4b078478cbb294e8527444c87": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DropdownModel", "state": { "_options_labels": [ "29_01_2018__07_39_47", "30_01_2018__07_42_30", "01_02_2018__07_39_12", "02_02_2018__07_38_50", "18_01_2018__07_38_10", "19_01_2018__07_38_47", "22_01_2018__07_41_04", "22_12_2017__07_38_21", "26_12_2017__07_32_35", "20_12_2017__07_38_14", "21_12_2017__07_52_59", "08_01_2018__07_41_43", "09_01_2018__07_40_01", "27_12_2017__07_55_48", "29_12_2017__07_37_27", "01_01_2018__07_38_27", "12_02_2018__07_40_14", "15_02_2018__07_45_52", "16_02_2018__07_45_41", "19_02_2018__07_46_19", "20_02_2018__07_41_48", "21_02_2018__07_42_42", "13_03_2018__07_29_52", "14_03_2018__07_35_46", "20_03_2018__07_28_45", "21_03_2018__07_32_39", "22_03_2018__07_38_43", "14_02_2018__07_41_04", "22_02_2018__07_42_45", "12_02_2018__07_40_14", "15_02_2018__07_45_52", "16_02_2018__07_45_41", "19_02_2018__07_46_19", "20_02_2018__07_41_48", "21_02_2018__07_42_42", "13_03_2018__07_29_52", "14_03_2018__07_35_46", "20_03_2018__07_28_45", "21_03_2018__07_32_39", "22_03_2018__07_38_43", "14_02_2018__07_41_04", "22_02_2018__07_42_45" ], "description": "Select trip", "index": 0, "layout": "IPY_MODEL_7071bc4894704d6398775c54928e7aba", "style": "IPY_MODEL_00eb4985b24e4e4ab9627eeb904f674e" } }, "8895e8e722eb44df82cafb16b0287f3d": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "88dfbc4a63c04ee1b46b877b7131ef49": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "IntSliderModel", "state": { "description": "minPts", "layout": "IPY_MODEL_e4041e4c58894890bbbe7d38a383b44c", "max": 15, "min": 1, "style": "IPY_MODEL_771930d952a74741b562637e2cef6978", "value": 4 } }, "89f27ddc7c6141d7b0698a9845670a0f": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "8a2dbffc9d604923b7959947a1bb26a7": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "904a2aa0a0d744c4b75c3a0020f9c858": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "CheckboxModel", "state": { "description": "Display observed crossroad", "disabled": false, "layout": "IPY_MODEL_8a2dbffc9d604923b7959947a1bb26a7", "style": "IPY_MODEL_86aa7b346b2c457a88cfc6ae68581bc0", "value": false } }, "91953dc818bf4dd5b482df8ea563fbd6": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "CheckboxModel", "state": { "description": "Display acutal bus-stop", "disabled": false, "layout": "IPY_MODEL_89f27ddc7c6141d7b0698a9845670a0f", "style": "IPY_MODEL_634ad2f6b426457fa1b6fbb9830c3274", "value": false } }, "919fff6135484a88b954283ac5d50366": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "92960eba49b4419c882583bd52e56667": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_2520a979a2254890bb775d22496836c3", "IPY_MODEL_e6b7011ea12e4ab2b6453eeede8d45af", "IPY_MODEL_b45f46d72615468ab5e17e693bf64152" ], "layout": "IPY_MODEL_c23ba1545b1b469db08dcc764980c52b" } }, "939b561a59014b0191d0fba39e4f2968": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "9505a929d269488bb031aadddaa0645d": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "95d89c31ef614e92a87f185f169d3194": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "9997fb8980ab4a4aa40105fb69f32126": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_939b561a59014b0191d0fba39e4f2968", "outputs": [ { "data": { "text/html": "
", "text/plain": "" }, "metadata": {}, "output_type": "display_data" } ] } }, "99b8cb5355ed43158e3ff69bdbcf5bbb": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "9b88e0afe77f4bc19460fbf1a1b6c080": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "9b993beda0a84243ad4478e589ed7684": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "CheckboxModel", "state": { "description": "Display acutal bus-stop", "disabled": false, "layout": "IPY_MODEL_e3c353052df8492688c1a957617a9205", "style": "IPY_MODEL_3c0983bd6d274d3e9393f0104c76e7a0", "value": false } }, "9f4d6fcefeac409bbba7d3f6289d1261": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "SliderStyleModel", "state": { "description_width": "" } }, "a4a02ee058bf4183b0c0ca00668720a0": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": { "grid_template_areas": "\n \"header header header header\"\n \"main main . sidebar \"\n \"footer footer footer footer\"\n ", "grid_template_columns": "25% 25% 25% 25%", "grid_template_rows": "auto auto auto", "width": "50%" } }, "a7ca4fb8f7ea4103b5d3e59e4e50bf99": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "a8d9f953d98544adba1c6bbc64e67587": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_dc655306d7694492a03531f3190d3462" } }, "a9898b8b452943138a0adc9f1a4fbd7e": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "aa44490b6970487ab58e8a0ac1b6d3ae": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "CheckboxModel", "state": { "description": "Display observed crossroad", "disabled": false, "layout": "IPY_MODEL_b55bd6499f2a4166929f38179c932aaf", "style": "IPY_MODEL_2fe242d4ccc74d71a82a1171114f4611", "value": false } }, "aca4806c2ec94237a7a002e1f1649e40": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "ad6f20e22a144788ae54178915d5a6e5": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "adb4b6aa7048436e936010b5e7e4b540": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "ae01bcd7837e4810a1a9dbb26e9e9fc5": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "ae42c5b43e124a5183c2ac4aa5408a78": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "aeb0126e7aab441ba8428f426451e4b7": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "CheckboxModel", "state": { "description": "Display observed crossroad", "disabled": false, "layout": "IPY_MODEL_5cb93f4ddd9a4bffa4c61660e47e95af", "style": "IPY_MODEL_d74ac2faf93e48bead29fde3f992ffd8", "value": false } }, "b331aa19159740a8a18e2ca8390da9b8": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_78222368a573493eba82cf22ff4cca00", "outputs": [ { "name": "stdout", "output_type": "stream", "text": "29_01_2018__07_39_47 6\n6.740349989996618 \n" } ] } }, "b45f46d72615468ab5e17e693bf64152": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_9b88e0afe77f4bc19460fbf1a1b6c080", "outputs": [ { "name": "stdout", "output_type": "stream", "text": "29_01_2018__07_39_47 5\n6.740349989996618 \n" }, { "data": { "text/html": "
", "text/plain": "" }, "metadata": {}, "output_type": "display_data" } ] } }, "b4ce8f18e3a14d0981ced29cd766bbb2": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "GridBoxModel", "state": { "children": [ "IPY_MODEL_2520a979a2254890bb775d22496836c3", "IPY_MODEL_e6b7011ea12e4ab2b6453eeede8d45af", "IPY_MODEL_9b993beda0a84243ad4478e589ed7684", "IPY_MODEL_66cfbce83a964d19b3376a33278c0942" ], "layout": "IPY_MODEL_5e1e79db701e48f695cf8cd1d6977787" } }, "b55bd6499f2a4166929f38179c932aaf": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "b5bc767d8d654bb58d7edf570b135a7e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "CheckboxModel", "state": { "description": "Display acutal bus-stop", "disabled": false, "layout": "IPY_MODEL_7160d540789c4f358ffc5916ae4e0f9c", "style": "IPY_MODEL_b84ce7e07fe24191a1a79c2d6816145f", "value": false } }, "b5bcaa40ee5f43c89b54db0f3e34e73f": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "b6565e9f52774535a5156c8f4f76e133": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "IntSliderModel", "state": { "description": "minPts", "layout": "IPY_MODEL_100bdf6ec889413ab3eab611d1718a49", "max": 15, "min": 1, "style": "IPY_MODEL_5e4f4ea2e037486b9bef65d655776c23", "value": 4 } }, "b6780f2d77064aa3a0793d42235d661d": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_20b8e74157e2475fa61c0f58fd0804e7" } }, "b71129eb395a4f0b8f487acfbbe51fda": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "b84ce7e07fe24191a1a79c2d6816145f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "baf26dfcbaa54f25a79475145855b61d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_bcd60214b10d45eab8201f085fb7bd0f", "IPY_MODEL_87120b5166de4ac5b14d2fe2a9836107", "IPY_MODEL_32889183c68b4b4780a29fedd52e19cd", "IPY_MODEL_18035ff830304522919a30e07584f08d", "IPY_MODEL_5ee78f123e9a4007850d7669a45df23e" ], "layout": "IPY_MODEL_2c9ca33c873746949f221bcd729eec21" } }, "bb4e7b4a0591497d928a3b15da8376c5": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "bcd60214b10d45eab8201f085fb7bd0f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DropdownModel", "state": { "_options_labels": [ "29_01_2018__07_39_47", "30_01_2018__07_42_30", "01_02_2018__07_39_12", "02_02_2018__07_38_50", "18_01_2018__07_38_10", "19_01_2018__07_38_47", "22_01_2018__07_41_04", "22_12_2017__07_38_21", "26_12_2017__07_32_35", "20_12_2017__07_38_14", "21_12_2017__07_52_59", "08_01_2018__07_41_43", "09_01_2018__07_40_01", "27_12_2017__07_55_48", "29_12_2017__07_37_27", "01_01_2018__07_38_27", "12_02_2018__07_40_14", "15_02_2018__07_45_52", "16_02_2018__07_45_41", "19_02_2018__07_46_19", "20_02_2018__07_41_48", "21_02_2018__07_42_42", "13_03_2018__07_29_52", "14_03_2018__07_35_46", "20_03_2018__07_28_45", "21_03_2018__07_32_39", "22_03_2018__07_38_43", "14_02_2018__07_41_04", "22_02_2018__07_42_45", "12_02_2018__07_40_14", "15_02_2018__07_45_52", "16_02_2018__07_45_41", "19_02_2018__07_46_19", "20_02_2018__07_41_48", "21_02_2018__07_42_42", "13_03_2018__07_29_52", "14_03_2018__07_35_46", "20_03_2018__07_28_45", "21_03_2018__07_32_39", "22_03_2018__07_38_43", "14_02_2018__07_41_04", "22_02_2018__07_42_45" ], "description": "Select trip", "index": 0, "layout": "IPY_MODEL_f71c96f7050340928c4224a0c6500887", "style": "IPY_MODEL_99b8cb5355ed43158e3ff69bdbcf5bbb" } }, "c0d00a10db7546c2bc9a159d47748b86": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "c148c54d900b4cada066d75ed6a9a7b5": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "c23ba1545b1b469db08dcc764980c52b": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "c2f7a5caff81469eb441917bf17ed958": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "c588a4e5a0854ddb90b13efa862b770e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "SliderStyleModel", "state": { "description_width": "" } }, "c5d3b9774da240539b89a5055de3a7ce": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "layout": "IPY_MODEL_84cb8eadfc8b4b78a932a37c2ce35380" } }, "c84d6766eef34d4da530667743e36e84": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "c91bb2f88a94411c8232c4c98b47d322": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "ceed3bb6b533400f9ee83721c32ee711": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "ceed7aad8f774092bbe0ab70c28012b5": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "HBoxModel", "state": { "children": [ "IPY_MODEL_bcd60214b10d45eab8201f085fb7bd0f", "IPY_MODEL_87120b5166de4ac5b14d2fe2a9836107", "IPY_MODEL_32889183c68b4b4780a29fedd52e19cd", "IPY_MODEL_18035ff830304522919a30e07584f08d" ], "layout": "IPY_MODEL_c148c54d900b4cada066d75ed6a9a7b5" } }, "d10a1ec811c94d8f8904d22dc3fbc598": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DropdownModel", "state": { "_options_labels": [ "29_01_2018__07_39_47", "30_01_2018__07_42_30", "01_02_2018__07_39_12", "02_02_2018__07_38_50", "18_01_2018__07_38_10", "19_01_2018__07_38_47", "22_01_2018__07_41_04", "22_12_2017__07_38_21", "26_12_2017__07_32_35", "20_12_2017__07_38_14", "21_12_2017__07_52_59", "08_01_2018__07_41_43", "09_01_2018__07_40_01", "27_12_2017__07_55_48", "29_12_2017__07_37_27", "01_01_2018__07_38_27", "12_02_2018__07_40_14", "15_02_2018__07_45_52", "16_02_2018__07_45_41", "19_02_2018__07_46_19", "20_02_2018__07_41_48", "21_02_2018__07_42_42", "13_03_2018__07_29_52", "14_03_2018__07_35_46", "20_03_2018__07_28_45", "21_03_2018__07_32_39", "22_03_2018__07_38_43", "14_02_2018__07_41_04", "22_02_2018__07_42_45", "12_02_2018__07_40_14", "15_02_2018__07_45_52", "16_02_2018__07_45_41", "19_02_2018__07_46_19", "20_02_2018__07_41_48", "21_02_2018__07_42_42", "13_03_2018__07_29_52", "14_03_2018__07_35_46", "20_03_2018__07_28_45", "21_03_2018__07_32_39", "22_03_2018__07_38_43", "14_02_2018__07_41_04", "22_02_2018__07_42_45" ], "description": "Select trip", "index": 0, "layout": "IPY_MODEL_f25509bcc5c042048bbe0ac634333bc4", "style": "IPY_MODEL_c91bb2f88a94411c8232c4c98b47d322" } }, "d5a816321a8c4eb3aded5e51f1ea230a": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "d74ac2faf93e48bead29fde3f992ffd8": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "d802eaf8301d483f8d51a81c568dbc85": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_c84d6766eef34d4da530667743e36e84", "outputs": [ { "name": "stdout", "output_type": "stream", "text": "29_01_2018__07_39_47 6\n6.740349989996618 \n" } ] } }, "d8ddc83942544523b2dd68efaec8ff0e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_d10a1ec811c94d8f8904d22dc3fbc598", "IPY_MODEL_110f739498244e30907b8588055a34f8", "IPY_MODEL_d802eaf8301d483f8d51a81c568dbc85" ], "layout": "IPY_MODEL_f3a6cadd7fd849b89e950e4e08546c7c" } }, "da13592376e947deafab764a601f1e47": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "HBoxModel", "state": { "children": [ "IPY_MODEL_0aa113689b7e4810b53624b274c6591c", "IPY_MODEL_47c89f615d7d48f481c71f2e6772b9e6", "IPY_MODEL_b5bc767d8d654bb58d7edf570b135a7e", "IPY_MODEL_904a2aa0a0d744c4b75c3a0020f9c858" ], "layout": "IPY_MODEL_768b54a3f49c4710a0243e6e324bcc63" } }, "dabca5b725ff48c59144f9d0214c0f05": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_65e229ad134c468ba6ba7d6e9bf9d4b0", "outputs": [ { "data": { "text/html": "
", "text/plain": "" }, "metadata": {}, "output_type": "display_data" } ] } }, "daebfebcaf8c462aacc9746f215d3381": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "CheckboxModel", "state": { "description": "Check me", "disabled": false, "layout": "IPY_MODEL_7c36343f38b6424faee820622bf53d87", "style": "IPY_MODEL_adb4b6aa7048436e936010b5e7e4b540", "value": false } }, "dc655306d7694492a03531f3190d3462": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "e08978feac4e40a78acbedf79780583b": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "e0d715ed32c7479ebe61099d5c3c8a63": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "e0f91b224aef4121978cc2ca21e184ff": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_2a7b0716d6fd455aa5dfc49bedc7c67a", "outputs": [ { "name": "stdout", "output_type": "stream", "text": "29_01_2018__07_39_47 6\n6.740349989996618 \n" } ] } }, "e1476545bf144fee99ccc742ad3df45e": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "e3b3ec5ef91d4c71b4e811eb28c8731c": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "e3c353052df8492688c1a957617a9205": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "e4041e4c58894890bbbe7d38a383b44c": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "e5b0aee7a0124eef9c0b5db84bcd6487": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "e6b7011ea12e4ab2b6453eeede8d45af": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "IntSliderModel", "state": { "description": "minPts", "layout": "IPY_MODEL_12a7f7b570c24a2cbc524764e658aebf", "max": 15, "min": 1, "style": "IPY_MODEL_f0890cec67574d268e50061be3f67f9e", "value": 5 } }, "e932e25dc5ec40c59bdadf3aad9c9811": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_2520a979a2254890bb775d22496836c3", "IPY_MODEL_e6b7011ea12e4ab2b6453eeede8d45af", "IPY_MODEL_9b993beda0a84243ad4478e589ed7684", "IPY_MODEL_66cfbce83a964d19b3376a33278c0942", "IPY_MODEL_0d7b6522f64f44f8addc0730676583ec" ], "layout": "IPY_MODEL_e5b0aee7a0124eef9c0b5db84bcd6487" } }, "ecd7ec747ebe4cb58b4d455dfa531428": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "ee8b20c1c15e45299684135f3d667ab9": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "f0890cec67574d268e50061be3f67f9e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "SliderStyleModel", "state": { "description_width": "" } }, "f25509bcc5c042048bbe0ac634333bc4": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "f3a6cadd7fd849b89e950e4e08546c7c": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "f71c96f7050340928c4224a0c6500887": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "f83e361f772e4d769bfd28caed84736c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "HBoxModel", "state": { "children": [ "IPY_MODEL_2520a979a2254890bb775d22496836c3", "IPY_MODEL_e6b7011ea12e4ab2b6453eeede8d45af", "IPY_MODEL_9b993beda0a84243ad4478e589ed7684", "IPY_MODEL_66cfbce83a964d19b3376a33278c0942" ], "layout": "IPY_MODEL_5ea33b71eb524b47a278f024192c53aa" } }, "f97c3c70fc7d490cac2924de3b1f6b85": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_4ef1db82b42a469e9bba14c959740b9c", "outputs": [ { "name": "stdout", "output_type": "stream", "text": "29_01_2018__07_39_47 5\n6.740349989996618 \n" }, { "data": { "text/html": "
", "text/plain": "" }, "metadata": {}, "output_type": "display_data" } ] } }, "fc1147e00f534b63b3995ef97fc24d95": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} }, "ff8e0d526aba48939743d6c0d94ce326": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": {} } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 2 }