Mercurial Hosting > traffic-intelligence
changeset 756:a73f43aac00e dev
moved pandas imports, sql in comments
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Fri, 30 Oct 2015 17:57:09 -0400 |
parents | f3aeb0b47eff |
children | 61248f2cd459 |
files | python/storage.py |
diffstat | 1 files changed, 26 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/python/storage.py Fri Oct 30 14:15:03 2015 -0400 +++ b/python/storage.py Fri Oct 30 17:57:09 2015 -0400 @@ -7,6 +7,7 @@ import sqlite3, logging from numpy import log, min as npmin, max as npmax, round as npround, array, sum as npsum, loadtxt +from pandas import read_csv, merge commentChar = '#' @@ -776,7 +777,6 @@ objects = {} # dictionary of objects index by their id if usePandas: - from pandas import read_csv data = read_csv(filename, delimiter=';', comment='*', header=0, skiprows = 1, low_memory = lowMemory) generatePDLaneColumn(data) data['TIME'] = data['$VEHICLE:SIMSEC']*simulationStepsPerTimeUnit @@ -863,22 +863,28 @@ if more than proportionStationaryTime of their total time If lanes is not None, only the data for the selected lanes will be provided (format as string x_y where x is link index and y is lane index)''' - from pandas import read_csv - columns = ['NO', '$VEHICLE:SIMSEC', 'POS'] - if lanes is not None: - columns += ['LANE\LINK\NO', 'LANE\INDEX'] - data = read_csv(filename, delimiter=';', comment='*', header=0, skiprows = 1, usecols = columns, low_memory = lowMemory) - data = selectPDLanes(data, lanes) - data.sort(['$VEHICLE:SIMSEC'], inplace = True) + if filename.endswith(".fzp"): + columns = ['NO', '$VEHICLE:SIMSEC', 'POS'] + if lanes is not None: + columns += ['LANE\LINK\NO', 'LANE\INDEX'] + data = read_csv(filename, delimiter=';', comment='*', header=0, skiprows = 1, usecols = columns, low_memory = lowMemory) + data = selectPDLanes(data, lanes) + data.sort(['$VEHICLE:SIMSEC'], inplace = True) - nStationary = 0 - nVehicles = 0 - for name, group in data.groupby(['NO'], sort = False): - nVehicles += 1 - positions = array(group['POS']) - diff = positions[1:]-positions[:-1] - if npsum(diff == 0.) >= proportionStationaryTime*len(positions): - nStationary += 1 + nStationary = 0 + nVehicles = 0 + for name, group in data.groupby(['NO'], sort = False): + nVehicles += 1 + positions = array(group['POS']) + diff = positions[1:]-positions[:-1] + if npsum(diff == 0.) >= proportionStationaryTime*(len(positions)-1): + nStationary += 1 + elif filename.endswith(".sqlite"): + # select trajectory_id, t, s_coordinate, speed from curvilinear_positions where trajectory_id between 1860 and 1870 and speed < 0.1 + # pb of the meaning of proportionStationaryTime in arterial network? Why proportion of existence time? + pass + else: + print("File type of "+filename+" not supported (only .sqlite and .fzp files)") return nStationary, nVehicles @@ -890,7 +896,6 @@ (if the time are closer than collisionTimeDifference) If lanes is not None, only the data for the selected lanes will be provided (format as string x_y where x is link index and y is lane index)''' - from pandas import read_csv, merge data = read_csv(filename, delimiter=';', comment='*', header=0, skiprows = 1, usecols = ['LANE\LINK\NO', 'LANE\INDEX', '$VEHICLE:SIMSEC', 'NO', 'POS'], low_memory = lowMemory) data = selectPDLanes(data, lanes) data = data.convert_objects(convert_numeric=True) @@ -907,6 +912,10 @@ yidx = diff[diff > 0].argmin() if abs(group.loc[xidx, '$VEHICLE:SIMSEC'] - group.loc[yidx, '$VEHICLE:SIMSEC']) <= collisionTimeDifference: nCollisions += 1 + + # select TD1.link_id, TD1.lane_id from temp.diff_positions as TD1, temp.diff_positions as TD2 where TD1.link_id = TD2.link_id and TD1.lane_id = TD2.lane_id and TD1.id1 = TD2.id1 and TD1.id2 = TD2.id2 and TD1.t = TD2.t+0.1 and TD1.diff*TD2.diff < 0; # besoin de faire un group by?? + # create temp table diff_positions as select CP1.t as t, CP1.link_id as link_id, CP1.lane_id as lane_id, CP1.trajectory_id as id1, CP2.trajectory_id as id2, CP1.s_coordinate - CP2.s_coordinate as diff from curvilinear_positions CP1, curvilinear_positions CP2 where CP1.link_id = CP2.link_id and CP1.lane_id = CP2.lane_id and CP1.t = CP2.t and CP1.trajectory_id > CP2.trajectory_id; + # SQL select link_id, lane_id, id1, id2, min(diff), max(diff) from (select CP1.t as t, CP1.link_id as link_id, CP1.lane_id as lane_id, CP1.trajectory_id as id1, CP2.trajectory_id as id2, CP1.s_coordinate - CP2.s_coordinate as diff from curvilinear_positions CP1, curvilinear_positions CP2 where CP1.link_id = CP2.link_id and CP1.lane_id = CP2.lane_id and CP1.t = CP2.t and CP1.trajectory_id > CP2.trajectory_id) group by link_id, lane_id, id1, id2 having min(diff)*max(diff) < 0 return nCollisions def loadTrajectoriesFromNgsimFile(filename, nObjects = -1, sequenceNum = -1):