Prediction error for last bus-stop

[1]:
'''
Import libraries
'''
from pymongo import     MongoClient
import math
import pprint
#import geocoder
import pprint
import matplotlib.pyplot as plt

from pydoc import help
from scipy.stats.stats import pearsonr
import os
import numpy as np
[2]:
def PredictionErrorAtIDSouth (id_value,TripStartTime,Bound, NpPathDir, ResultPathDir_Np, UseMongoDB):
    '''
    input: the id of the bus-stop, trip start time and bound value
    output: the prediction for the provided bus-stop id for the trips with the trip start time
    and direction of the bound value
    function: it computes the prediction for the provided bus-stop id for the trips with the trip start time
    and direction of the bound value
    '''
    if UseMongoDB==True:
        PredictionErrorLists = [rec for rec in
                               con[RouteName]['PredictionErrorForSubStopsV2.'+TripStartTime+'.'+Bound].find()]

        BusStopRecords = [rec for rec in
                         con[RouteName]['BusStops.SouthBound'].find()]

    else:

        PredictionErrorLists = np.load(f'{ResultPathDir_Np}/{RouteName}/PredictionErrorForSubStopsV2.{TripStartTime}.{Bound}.npy',
                                       allow_pickle=True)

        BusStopRecords = np.load(f'{NpPathDir}/{RouteName}/BusStops.SouthBound.npy',allow_pickle=True)


    PredictionErrorList = [rec for rec in PredictionErrorLists if rec['id']==id_value]
    BusStopRecord = [rec for rec in BusStopRecords if rec['id']==id_value]

    if len(BusStopRecord) != 0:
        #StopDistFromOrigin=BusStopRecord[0]['normalizedDistanceFromOrigin']
        StopDistFromOrigin=BusStopRecord[0]['distanceFromOrigin']

    if len(PredictionErrorList)!=0:
        PredictionErrorList=PredictionErrorList[0]
        PredictionErrorMeanList = []
        PredictionErrorSTDList = []
        NormalizedDistForStopList = []
        PredictionByIndexList = []
        #pprint.pprint(PredictionErrorList)


        for PredictionByIndex in PredictionErrorList['PredictionByIndexList']:

            #BusStopRecord = [rec for rec in con[RouteName]['BusStops.SouthBound'].find({'id':PredictionByIndex+1}).limit(1)]
            BusStopRecord = [rec for rec in BusStopRecords if rec['id'] == PredictionByIndex+1]
            #For NorthBound
            #BusStopRecord = [rec for rec in con[RouteName]['BusStops.SouthBound'].find({'id':PredictionByIndex-1}).limit(1)]

            if len(BusStopRecord) != 0:
                #NormalizedDistForStopList.append(abs(BusStopRecord[0]['normalizedDistanceFromOrigin']-StopDistFromOrigin))
                NormalizedDistForStopList.append(abs(BusStopRecord[0]['distanceFromOrigin']-StopDistFromOrigin)/1000)
                #For NorthBound
                #PredictionByIndex.append(PredictionByIndex-1)
                PredictionByIndexList.append(PredictionByIndex+1)

                PredictionErrorMeanList.append(PredictionErrorList[str(PredictionByIndex)][0]/1000)
                PredictionErrorSTDList.append(PredictionErrorList[str(PredictionByIndex)][1]/1000)

        return(NormalizedDistForStopList,PredictionErrorMeanList,PredictionErrorSTDList,PredictionByIndexList)
[3]:
def PredictionErrorAtIDNorth (id_value,TripStartTime,Bound, NpPathDir,  ResultPathDir_Np, UseMongoDB):
    '''
    input: the id of the bus-stop, trip start time and bound value
    output: the prediction for the provided bus-stop id for the trips with the trip start time
    and direction of the bound value
    function: it computes the prediction for the provided bus-stop id for the trips with the trip start time
    and direction of the bound value
    '''
    if UseMongoDB==True:
        PredictionErrorLists = [rec for rec in
                               con[RouteName]['PredictionErrorForSubStopsV2.'+TripStartTime+'.'+Bound].find()]

        BusStopRecords = [rec for rec in
                         con[RouteName][f'BusStops.{Bound}Bound'].find()]

    else:

        PredictionErrorLists = np.load(f'{ResultPathDir_Np}/{RouteName}/PredictionErrorForSubStopsV2.{TripStartTime}.{Bound}.npy',
                                       allow_pickle=True)

        BusStopRecords = np.load(f'{NpPathDir}/{RouteName}/BusStops.{Bound}Bound.npy',allow_pickle=True)

    PredictionErrorList = [rec for rec in PredictionErrorLists if rec['id']==id_value]
    BusStopRecord = [rec for rec in BusStopRecords if rec['id']==id_value]

    if len(BusStopRecord) != 0:
        #StopDistFromOrigin=BusStopRecord[0]['normalizedDistanceFromOrigin']
        StopDistFromOrigin=BusStopRecord[0]['distanceFromOrigin']

    if len(PredictionErrorList)!=0:
        PredictionErrorList=PredictionErrorList[0]
        PredictionErrorMeanList = []
        PredictionErrorSTDList = []
        NormalizedDistForStopList = []
        PredictionByIndexList = []
        #pprint.pprint(PredictionErrorList)


        for PredictionByIndex in PredictionErrorList['PredictionByIndexList']:

            #BusStopRecord = [rec for rec in con[RouteName]['BusStops.SouthBound'].find({'id':PredictionByIndex+1}).limit(1)]
            #For NorthBound
            #BusStopRecord = [rec for rec in con[RouteName][f'BusStops.{Bound}Bound'].find({'id':PredictionByIndex-1}).limit(1)]
            BusStopRecord = [rec for rec in BusStopRecords if rec['id'] == PredictionByIndex-1]

            if len(BusStopRecord) != 0:
                #NormalizedDistForStopList.append(abs(BusStopRecord[0]['normalizedDistanceFromOrigin']-StopDistFromOrigin))
                NormalizedDistForStopList.append(abs(BusStopRecord[0]['distanceFromOrigin']-StopDistFromOrigin)/1000)
                #For NorthBound
                PredictionByIndexList.append(PredictionByIndex-1)
                #PredictionByIndexList.append(PredictionByIndex+1)

                PredictionErrorMeanList.append(PredictionErrorList[str(PredictionByIndex)][0]/1000)
                PredictionErrorSTDList.append(PredictionErrorList[str(PredictionByIndex)][1]/1000)

        return(NormalizedDistForStopList,PredictionErrorMeanList,PredictionErrorSTDList,PredictionByIndexList)
[4]:
def Extract_and_Plot_PredictionError_SouthBound(TripStartTimeAggregate, ResultPathDir, NpPathDir, ResultPathDir_Np, UseMongoDB):
    '''
    input: Trip start time
    output: None
    function: It extracts the prediction records from the MongoDB database and computes the prediction error
    for the farthest bus-stop of the route on the south bound direction.
    '''

    #TActualList =[0,  234,  506,  793, 1052, 1367, 1665, 2273, 2415, 2692, 3263, 3454, 3521, 3653, 3970]
    TActualList =[234,  506,  793, 1052, 1367, 1665, 2273, 2415, 2692, 3263, 3454, 3521, 3653, 3970]



    NormalizedDistForStopList,PredictionErrorMeanList,PredictionErrorSTDList,PredictionByIndexList = PredictionErrorAtIDSouth (0,TripStartTimeAggregate[0][1][0],TripStartTimeAggregate[0][1][1],
                                                                                                                               NpPathDir, ResultPathDir_Np, UseMongoDB
                                                                                                                              )
    #                                                                                                       18                              South

    print(len(NormalizedDistForStopList),len(PredictionErrorMeanList))

    PearsonrCorrelationCoefficeintMean,PValueMean =  pearsonr(NormalizedDistForStopList,PredictionErrorMeanList)
    PearsonrCorrelationCoefficeintSTD,PValueSTD =  pearsonr(NormalizedDistForStopList,PredictionErrorSTDList)

    PearsonrCorrelationCoefficeintMeanTActual,PValueMeanTActual =  pearsonr(TActualList,PredictionErrorMeanList)
    PearsonrCorrelationCoefficeintSTDTActual,PValueSTDTActual =  pearsonr(TActualList,PredictionErrorSTDList)

    print("PearsonrCorrelationCoefficeintMean: ")
    print(PearsonrCorrelationCoefficeintMean)

    print("PearsonrCorrelationCoefficeintSTD: ")
    print(PearsonrCorrelationCoefficeintSTD)

    print("PearsonrCorrelationCoefficeintMeanTActual: ")
    print(PearsonrCorrelationCoefficeintMeanTActual)

    print("PearsonrCorrelationCoefficeintSTDTActual: ")
    print(PearsonrCorrelationCoefficeintSTDTActual)

    ax1 = plt.subplot(1,1,1)
    ax1.errorbar(NormalizedDistForStopList,PredictionErrorMeanList,PredictionErrorSTDList,marker='o',linestyle='--',label='SouthBound',markerfacecolor='None',color='k',capsize=2)

    XLimitDistance = ax1.get_xlim()

    global yLimit
    yLimit = ax1.get_ylim()
    global xLimit
    xLimit = ax1.get_xlim()
    plt.xlabel('Distance (km) from bus stop',fontsize=12)
    plt.ylabel('Prediction error (seconds)',fontsize=12)
    #plt.title('Prediction error v/s Distance from bus stop')
    plt.tick_params(axis='both', which='major', labelsize=10)
    plt.tick_params(axis='both', which='minor', labelsize=10)
    #PearsonrCorrelationCoefficeintMean
    #plt.text(2,570,'Correlation between distance and mean error: '+"%.4f" %round(PearsonrCorrelationCoefficeintMean,4)+'\nCorrelation between distance and variation in error: '+"%.4f" %round(PearsonrCorrelationCoefficeintSTD,4),va='center', size=11 )

    ax2= ax1.twiny()

    ax2.set_xticks([NormalizedDistForStopList[i] for i in range(len(NormalizedDistForStopList)) if i not in [1,2,4,6]])
    ax2.set_xticklabels([TActualList[i] for i in range(len(TActualList)) if i not in [1,2,4,6]])
    ax2.set_xlim(xLimit)
    ax2.set_xlabel(r"Travel time (seconds) from bus stop",size=11)


    plt.tight_layout()
    plt.savefig(f'{ResultPathDir}EndStopPredictionError_SouthBound.png',format='png',dpi=600)

    plt.show()
[5]:
def Extract_and_Plot_PredictionError_NorthBound(TripStartTimeAggregate, ResultPathDir, NpPathDir, ResultPathDir_Np, UseMongoDB):
    '''
    input: Trip start time
    output: None
    function: It extracts the prediction records from the MongoDB database and computes the prediction error
    for the farthest bus-stop of the route on the north bound direction.
    '''
    TActualList = [2605, 2598, 2452, 2392, 2301, 2111, 1925, 1791, 1453,1194,  974,  728,  494,  292] #, 0]
    NormalizedDistForStopList,PredictionErrorMeanList,PredictionErrorSTDList,PredictionByIndexList = PredictionErrorAtIDNorth (14,TripStartTimeAggregate[0][0][0],TripStartTimeAggregate[0][0][1],
                                                                                                                               NpPathDir, ResultPathDir_Np, UseMongoDB
                                                                                                                              )

    print(len(NormalizedDistForStopList),len(PredictionErrorMeanList))
    print(len(TActualList),len(PredictionErrorMeanList))

    PearsonrCorrelationCoefficeintMean,PValueMean =  pearsonr(NormalizedDistForStopList,PredictionErrorMeanList)
    PearsonrCorrelationCoefficeintSTD,PValueSTD =  pearsonr(NormalizedDistForStopList,PredictionErrorSTDList)

    PearsonrCorrelationCoefficeintMeanTActual,PValueMeanTActual =  pearsonr(TActualList,PredictionErrorMeanList)
    PearsonrCorrelationCoefficeintSTDTActual,PValueSTDTActual =  pearsonr(TActualList,PredictionErrorSTDList)

    print("PearsonrCorrelationCoefficeintMean: ")
    print(PearsonrCorrelationCoefficeintMean)

    print("PearsonrCorrelationCoefficeintSTD: ")
    print(PearsonrCorrelationCoefficeintSTD)

    print("PearsonrCorrelationCoefficeintMeanTActual: ")
    print(PearsonrCorrelationCoefficeintMeanTActual)

    print("PearsonrCorrelationCoefficeintSTDTActual: ")
    print(PearsonrCorrelationCoefficeintSTDTActual)

    plt.cla()
    ax1 = plt.subplot(1,1,1)
    ax1.set_ylim(yLimit)
    ax1.set_xlim(xLimit)
    ax1.errorbar(NormalizedDistForStopList,PredictionErrorMeanList,PredictionErrorSTDList,marker='o',linestyle='--',label='NorthBound: '+str(PearsonrCorrelationCoefficeintMean)+', '+str(PearsonrCorrelationCoefficeintSTD),markerfacecolor='None',color='k',capsize=2)

    print(ax1.get_xlim())
    plt.xlabel('Distance (km) from bus stop',fontsize=12)
    plt.ylabel('Prediction error (seconds)',fontsize=12)

    plt.tick_params(axis='both', which='major', labelsize=10)
    plt.tick_params(axis='both', which='minor', labelsize=10)

    ax2= ax1.twiny()

    ax2.set_xlim(xLimit)
    ax2.set_xticks([NormalizedDistForStopList[i] for i in range(len(NormalizedDistForStopList)) if i not in [1,2,3,5]])
    ax2.set_xticklabels([TActualList[i] for i in range(len(TActualList)) if i not in [1,2,3,5]])
    ax2.set_xlabel(r"Travel time (seconds) from bus stop",size=11)

    plt.tight_layout()
    plt.savefig(f'{ResultPathDir}EndStopPredictionError_NorthBound.png',format='png',dpi=600)
    plt.show()

Execution of code

[6]:
from pathlib import Path
'''For directory management'''
path = Path(os.getcwd())

OneLevelUpPath = path.parents[0]

[7]:
'''Limits for plots'''
xLimit = 0
yLimit = 0
[8]:
con = MongoClient()

RouteName='Git_ISCON_PDPU'

#ResultPathDir = os.path.join(os.getcwd(), 'Result','PredictionError','')
ResultPathDir = os.path.join(str(OneLevelUpPath), 'results','PredictionError','')

ResultPathDir_Np = os.path.join(str(OneLevelUpPath), 'results','NpData','')

NpPathDir = os.path.join(str(OneLevelUpPath), 'data','NpData')
[9]:
#'''
ProjectDataUsed = True
UsedPreTrained = False
UseMongoDB = True
#'''
'''
ProjectDataUsed = True
UsedPreTrained = True
UseMongoDB = False
'''
[9]:
'\nProjectDataUsed = True\nUsedPreTrained = True\nUseMongoDB = False\n'
[10]:
if UseMongoDB==True:
    TripStartTimeAggregate= [Tr['TripStartTimeBound'] for Tr in
                             con [RouteName]['TripStartTimeAggregate'].find()]

else:
    TripStartTimeAggregate_Record = np.load(f'{NpPathDir}/{RouteName}/TripStartTimeAggregate.npy',
                                            allow_pickle=True)

    TripStartTimeAggregate = [rec['TripStartTimeBound'] for rec in TripStartTimeAggregate_Record]
[11]:
Extract_and_Plot_PredictionError_SouthBound(TripStartTimeAggregate, ResultPathDir, NpPathDir, ResultPathDir_Np, UseMongoDB)
Extract_and_Plot_PredictionError_NorthBound(TripStartTimeAggregate, ResultPathDir, NpPathDir, ResultPathDir_Np, UseMongoDB)
14 14
PearsonrCorrelationCoefficeintMean:
0.918975223361703
PearsonrCorrelationCoefficeintSTD:
0.39390106016603077
PearsonrCorrelationCoefficeintMeanTActual:
0.9772182984737138
PearsonrCorrelationCoefficeintSTDTActual:
0.5501624254277958
_images/Module_9_PredictionErrorForDistantStop_12_1.png
14 14
14 14
PearsonrCorrelationCoefficeintMean:
0.9289620609194672
PearsonrCorrelationCoefficeintSTD:
0.7119881075563027
PearsonrCorrelationCoefficeintMeanTActual:
0.9303267279052778
PearsonrCorrelationCoefficeintSTDTActual:
0.7155176551269204
(-0.2530742780170834, 33.24133377279121)
/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:35: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.
_images/Module_9_PredictionErrorForDistantStop_12_4.png

MongoDB Save/Load

[12]:
def LoadInMongoFromNp(RouteName, NpPathDir):

    '''
    input: The route name and numpy directory path
    output: The MongoDB database collections from the Numpy files
    function: It creates the MongoDB database from the Numpy files.
    '''

    CollectionNames = os.listdir(f'{NpPathDir}/{RouteName}')
    #print(CollectionNames)

    CollectionNames_1 = [rec for rec in CollectionNames if '\'.' not in rec] # To address the error

    #print('Saving data in mongoDB')
    for Collection in CollectionNames_1:
        RecordsList = np.load(f'{NpPathDir}/{RouteName}/{Collection}', allow_pickle=True)
        #print(Collection)
        #pprint.pprint(RecordsList[0:3])

        CollectionName = Collection[0:-4]

        print(RouteName, CollectionName)
        con[RouteName][CollectionName].insert_many(RecordsList.tolist())



def SaveInNp(RouteName, NpPathDir):

    '''
    input: The route name and numpy directory path
    output: Numpy files of the MongoDB database
    function: It stores the Numpy files for the MongoDB database in the specified directory path
    '''


    CollectionNames = [Collection for Collection in
                        con[RouteName].list_collection_names() if Collection!='system.indexes']

    CollectionNames_1 = [Collection for Collection in
                         con[RouteName].list_collection_names() if 'Prediction' not in  Collection]

    for CollectionName in CollectionNames_1:
        print('CollectionName', CollectionName)
        RecordsList = [rec for rec in con[RouteName][CollectionName].find().sort([('_id',1)])]

        for RecordDict in RecordsList:
            del[RecordDict['_id']]

        if os.path.exists(os.path.join(NpPathDir, RouteName)) == False:
            os.mkdir(os.path.join(NpPathDir, RouteName))


        #np.save(f'{Path}/{Database}/{CollectionName}.npy', RecordsList)
        np.save(os.path.join(NpPathDir, RouteName,f'{CollectionName}.npy'), RecordsList)

    print('Unsaved collection')
    print([Collection for Collection in
           con[RouteName].list_collection_names() if 'Prediction' in  Collection])
[13]:
if UsedPreTrained == False:
    SaveInNp(RouteName, NpPathDir)

elif UseMongoDB==True:

    RouteNamesList = con.list_database_names()
    if RouteName not in RouteNamesList:
        '''Load the data for RouteName, if RouteName is not in RouteNamesList'''
        print('Loading MongoData from Np files')
        LoadInMongoFromNp(RouteName, NpPathDir)
CollectionName 14_02_2018__18_30_22.BusStopsRecord
CollectionName 02_02_2018__07_38_50.Filtered
CollectionName H.18.South.21_02_2018__18_28_29
CollectionName 20_03_2018__07_28_45.Filtered
CollectionName 03_04_2018__07_38_31.RawRecords
CollectionName TripStartTimeAggregate
CollectionName H.07.North.08_01_2018__07_41_43
CollectionName 19_02_2018__07_46_19.RawRecords
CollectionName 14_02_2018__07_41_04.Filtered
CollectionName H.18.South.20_02_2018__18_31_07
CollectionName 01_02_2018__07_39_12.RawRecords
CollectionName 30_01_2018__07_42_30.BusStopsRecord
CollectionName 15_02_2018__16_08_22.RawRecords
CollectionName H.18.South.22_12_2017__07_38_21
CollectionName 20_02_2018__18_31_07.Filtered
CollectionName 21_02_2018__07_42_42.BusStopsRecord
CollectionName 21_02_2018__07_42_42.RawRecords
CollectionName H.07.North.28_03_2018__18_30_02
CollectionName 13_03_2018__07_29_52.RawRecords
CollectionName H.07.North.21_02_2018__18_28_29
CollectionName 14_03_2018__07_35_46.Filtered
CollectionName 18_01_2018__07_38_10.RawRecords
CollectionName 29_01_2018__07_39_47.RawRecords
CollectionName 26_12_2017__07_32_35.Filtered
CollectionName 22_02_2018__07_42_45.RawRecords
CollectionName 20_03_2018__07_28_45.RawRecords
CollectionName 21_02_2018__18_28_29.RawRecords
CollectionName 03_04_2018__07_38_31.Filtered
CollectionName BusStops.SouthBound
CollectionName H.07.North.19_01_2018__07_38_47
CollectionName H.18.South.02_02_2018__07_38_50
CollectionName 14_02_2018__18_30_22.RawRecords
CollectionName 21_02_2018__07_42_42.Filtered
CollectionName H.07.North.20_02_2018__18_31_07
CollectionName 13_03_2018__07_29_52.Filtered
CollectionName 21_12_2017__07_52_59.Filtered
CollectionName H.07.North.15_02_2018__18_33_19
CollectionName H.07.North.20_12_2017__07_38_14
CollectionName 19_01_2018__07_38_47.BusStopsRecord
CollectionName 22_01_2018__07_41_04.BusStopsRecord
CollectionName 03_04_2018__18_32_45.Filtered
CollectionName 20_02_2018__07_41_48.Filtered
CollectionName 15_02_2018__07_45_52.Filtered
CollectionName 30_01_2018__07_42_30.Filtered
CollectionName 29_01_2018__07_39_47.BusStopsRecord
CollectionName 08_01_2018__18_37_49.BusStopsRecord
CollectionName 08_01_2018__07_41_43.Filtered
CollectionName 15_02_2018__18_33_19.BusStopsRecord
CollectionName 22_01_2018__07_41_04.RawRecords
CollectionName H.18.South.22_02_2018__07_42_45
CollectionName H.18.South.08_01_2018__07_41_43
CollectionName H.18.South.29_12_2017__07_37_27
CollectionName 28_03_2018__18_30_02.RawRecords
CollectionName 28_03_2018__18_30_02.BusStopsRecord
CollectionName H.07.North.14_02_2018__07_41_04
CollectionName 22_01_2018__07_41_04.Filtered
CollectionName 27_12_2017__07_55_48.RawRecords
CollectionName 20_12_2017__18_31_19.LocationRecordsWithDistanceFromOrigin
CollectionName 22_12_2017__07_38_21.BusStopsRecord
CollectionName 27_12_2017__07_55_48.Filtered
CollectionName 29_12_2017__07_37_27.BusStopsRecord
CollectionName 15_02_2018__18_33_19.Filtered
CollectionName 18_01_2018__07_38_10.LocationRecordsWithDistanceFromOrigin
CollectionName H.07.North.18_01_2018__07_38_10
CollectionName H.07.North.20_12_2017__18_31_19
CollectionName H.18.South.29_01_2018__07_39_47
CollectionName H.18.South.20_12_2017__07_38_14
CollectionName 15_02_2018__18_33_19.RawRecords
CollectionName 22_12_2017__07_38_21.Filtered
CollectionName 15_02_2018__07_45_52.BusStopsRecord
CollectionName 01_01_2018__07_38_27.BusStopsRecord
CollectionName 21_02_2018__18_28_29.BusStopsRecord
CollectionName 21_03_2018__18_32_40.Filtered
CollectionName 20_12_2017__07_38_14.BusStopsRecord
CollectionName 15_02_2018__16_08_22.Filtered
CollectionName H.18.South.19_01_2018__07_38_47
CollectionName 04_04_2018__18_34_54.BusStopsRecord
CollectionName 09_01_2018__07_40_01.RawRecords
CollectionName 21_03_2018__07_32_39.Filtered
CollectionName H.07.North.30_01_2018__07_42_30
CollectionName 20_12_2017__18_31_19.Filtered
CollectionName 20_02_2018__18_31_07.BusStopsRecord
CollectionName 19_02_2018__07_46_19.Filtered
CollectionName H.18.South.28_03_2018__18_30_02
CollectionName 08_01_2018__18_37_49.Filtered
CollectionName 09_01_2018__07_40_01.Filtered
CollectionName 01_01_2018__07_38_27.Filtered
CollectionName 02_02_2018__07_38_50.RawRecords
CollectionName H.07.North.16_02_2018__07_45_41
CollectionName 19_12_2017__18_41_16.BusStopsRecord
CollectionName 18_01_2018__07_38_10.Filtered
CollectionName H.18.South.04_04_2018__18_34_54
CollectionName 22_02_2018__07_42_45.BusStopsRecord
CollectionName H.18.South.18_01_2018__07_38_10
CollectionName 14_02_2018__07_41_04.RawRecords
CollectionName 12_02_2018__07_40_14.BusStopsRecord
CollectionName 14_02_2018__07_41_04.BusStopsRecord
CollectionName 05_04_2018__07_38_07.RawRecords
CollectionName H.07.North.29_01_2018__07_39_47
CollectionName 14_02_2018__18_30_22.Filtered
CollectionName 30_01_2018__07_42_30.RawRecords
CollectionName 26_12_2017__07_32_35.BusStopsRecord
CollectionName 05_04_2018__07_38_07.BusStopsRecord
CollectionName H.18.South.20_12_2017__18_31_19
CollectionName 19_01_2018__07_38_47.RawRecords
CollectionName 19_12_2017__18_41_16.Filtered
CollectionName 14_03_2018__07_35_46.BusStopsRecord
CollectionName 22_03_2018__07_38_43.Filtered
CollectionName H.18.South.09_01_2018__07_40_01
CollectionName 14_03_2018__07_35_46.RawRecords
CollectionName 18_01_2018__07_38_10.BusStopsRecord
CollectionName 08_01_2018__18_37_49.RawRecords
CollectionName H.18.South.16_02_2018__07_45_41
CollectionName H.18.South.15_02_2018__18_33_19
CollectionName 16_02_2018__07_45_41.BusStopsRecord
CollectionName H.07.North.22_12_2017__18_38_34
CollectionName 20_12_2017__18_31_19.BusStopsRecord
CollectionName 01_01_2018__07_38_27.RawRecords
CollectionName 02_02_2018__07_38_50.BusStopsRecord
CollectionName 19_01_2018__07_38_47.Filtered
CollectionName 28_03_2018__18_30_02.Filtered
CollectionName 12_02_2018__07_40_14.RawRecords
CollectionName 21_12_2017__07_52_59.RawRecords
CollectionName 13_03_2018__07_29_52.BusStopsRecord
CollectionName H.18.South.22_12_2017__18_38_34
CollectionName 04_04_2018__18_34_54.Filtered
CollectionName H.07.North.14_02_2018__18_30_22
CollectionName 08_01_2018__07_41_43.BusStopsRecord
CollectionName 03_04_2018__18_32_45.RawRecords
CollectionName 22_12_2017__07_38_21.RawRecords
CollectionName 01_02_2018__07_39_12.Filtered
CollectionName 19_12_2017__18_41_16.RawRecords
CollectionName 20_12_2017__18_31_19.RawRecords
CollectionName H.18.South.08_01_2018__18_37_49
CollectionName 22_02_2018__07_42_45.Filtered
CollectionName 16_02_2018__07_45_41.Filtered
CollectionName H.07.North.08_01_2018__18_37_49
CollectionName 22_03_2018__07_38_43.RawRecords
CollectionName H.07.North.22_12_2017__07_38_21
CollectionName TripInfo
CollectionName 22_12_2017__18_38_34.BusStopsRecord
CollectionName 12_02_2018__07_40_14.Filtered
CollectionName 29_12_2017__07_37_27.Filtered
CollectionName H.07.North.09_01_2018__07_40_01
CollectionName H.07.North.29_12_2017__07_37_27
CollectionName 26_12_2017__07_32_35.RawRecords
CollectionName H.18.South.14_02_2018__18_30_22
CollectionName 29_01_2018__07_39_47.Filtered
CollectionName 08_01_2018__07_41_43.RawRecords
CollectionName 20_02_2018__18_31_07.RawRecords
CollectionName 22_12_2017__18_38_34.RawRecords
CollectionName 21_03_2018__18_32_40.RawRecords
CollectionName 16_02_2018__07_45_41.RawRecords
CollectionName H.18.South.14_02_2018__07_41_04
CollectionName 21_03_2018__07_32_39.RawRecords
CollectionName 29_12_2017__07_37_27.RawRecords
CollectionName BusStops.NorthBound
CollectionName 21_03_2018__07_32_39.BusStopsRecord
CollectionName 15_02_2018__07_45_52.RawRecords
CollectionName 22_12_2017__18_38_34.Filtered
CollectionName H.07.North.02_02_2018__07_38_50
CollectionName 20_02_2018__07_41_48.RawRecords
CollectionName 20_03_2018__07_28_45.BusStopsRecord
CollectionName 03_04_2018__07_38_31.BusStopsRecord
CollectionName 21_02_2018__18_28_29.Filtered
CollectionName H.07.North.22_02_2018__07_42_45
CollectionName H.07.North.12_02_2018__07_40_14
CollectionName 09_01_2018__07_40_01.BusStopsRecord
CollectionName 20_12_2017__07_38_14.RawRecords
CollectionName H.18.South.30_01_2018__07_42_30
CollectionName 04_04_2018__18_34_54.RawRecords
CollectionName H.07.North.04_04_2018__18_34_54
CollectionName 05_04_2018__07_38_07.Filtered
CollectionName H.18.South.12_02_2018__07_40_14
CollectionName 03_04_2018__18_32_45.BusStopsRecord
CollectionName 20_12_2017__07_38_14.Filtered
Unsaved collection
['21_02_2018__18_28_29.PredictionResult_Dist_th_50', '14_02_2018__07_41_04.PredictionResult_Dist_th_50', '22_12_2017__07_38_21.PredictionResult_Dist_th_50', '16_02_2018__07_45_41.PredictionResult_Dist_th_50', '30_01_2018__07_42_30.PredictionResult_Dist_th_50', '22_02_2018__07_42_45.PredictionResult_Dist_th_50', '28_03_2018__18_30_02.PredictionResult_Dist_th_50', '09_01_2018__07_40_01.PredictionResult_Dist_th_50', '15_02_2018__18_33_19.PredictionResult_Dist_th_50', '20_02_2018__18_31_07.PredictionResult_Dist_th_50', '20_12_2017__07_38_14.PredictionResult_Dist_th_50', '29_01_2018__07_39_47.PredictionResult_Dist_th_50', '19_01_2018__07_38_47.PredictionResult_Dist_th_50', '20_12_2017__18_31_19.PredictionResult_Dist_th_50', '18_01_2018__07_38_10.PredictionResult_Dist_th_50', '02_02_2018__07_38_50.PredictionResult_Dist_th_50', '14_02_2018__18_30_22.PredictionResult_Dist_th_50', '08_01_2018__07_41_43.PredictionResult_Dist_th_50', 'PredictionErrorForSubStopsV2.07.North', '08_01_2018__18_37_49.PredictionResult_Dist_th_50', '12_02_2018__07_40_14.PredictionResult_Dist_th_50', '22_12_2017__18_38_34.PredictionResult_Dist_th_50', 'PredictionErrorForSubStopsV2.18.South', '04_04_2018__18_34_54.PredictionResult_Dist_th_50', '29_12_2017__07_37_27.PredictionResult_Dist_th_50']