def prepareDataKMeans(lSegments): for segment in lSegments: segment['distance'] = distance.getDistances(segment) segment['velocity'] = distance.getVelocities(segment) segment['speedClass'] = initSpeedClass(segment) segment['numSC'] = initSpeedClass(segment) return lSegments
def importJson(filepath, addColumns=True): # Loading data raw = pd.io.json.read_json(filepath) df = raw['locations'].apply(pd.Series) # Create latitude and longitude columns df['latitude'] = df['latitudeE7'] * 0.0000001 df['longitude'] = df['longitudeE7'] * 0.0000001 # Clean up columns columns = ["timestampMs", "latitude", "longitude"] for col in list(df): if col not in columns: del df[col] # Add date column in format 'dd-mm-YY' dates = [] for timestamp in df['timestampMs']: dates.append( datetime.datetime.fromtimestamp(int(timestamp) / 1000).strftime('%d-%m-%Y')) df['date'] = dates # Add time column in format 'HH:MM:SS' time = [] for row in df['timestampMs']: time.append( datetime.datetime.fromtimestamp(int(row) / 1000).strftime('%H:%M:%S')) df['time'] = time if not addColumns: return df else: # Add delay column seconds delay = [] delay.append(0) for i in range(df['timestampMs'].size - 1): delay.append( int(int(df['timestampMs'][i]) - int(df['timestampMs'][i + 1])) / 1000) df['delay'] = delay # Add distance, velocity and acceleration df['distance'] = distance.getDistances(df) df['velocity'] = distance.getVelocities(df) df['acceleration'] = distance.getAccelerations(df) return df
def filterBySegment(input_data, limite): data = input_data.copy() lat_filtered=[0]*len(data) long_filtered=[0]*len(data) data = delay_segment_dataframe(data, limit=limite) segment_count = max(data['segment']) segment_indexes = [0] j=0 for i in range(data['segment'].size): if data['segment'][i]!=j: j+=1 segment_indexes.append(i) segment_indexes.append(data['segment'].size+1) for k in range(segment_count): distances = data["distance"][segment_indexes[k]:segment_indexes[k+1]] dist_moy = np.mean(distances) if dist_moy<20 and segment_indexes[k+1]-segment_indexes[k]>8: data = medianFilterSegment(data, 3, segment_indexes[k], segment_indexes[k+1]) elif dist_moy<50 and segment_indexes[k+1]-segment_indexes[k]>6: data = medianFilterSegment(data, 2, segment_indexes[k], segment_indexes[k+1]) elif dist_moy<150 and segment_indexes[k+1]-segment_indexes[k]>6: data = meanFilterSegment(data, 2, segment_indexes[k], segment_indexes[k+1]) # Add distance, velocity and acceleration data['distance'] = distance.getDistances(data) data['velocity'] = distance.getVelocities(data) data['acceleration'] = distance.getAccelerations(data) return data