数据中司机ID在实验中未使用
def file_2016_10_16():
"""
处理原始滴滴数据
删除司机id
:return:
"""
temp_p = '/Volumes/机械硬盘/2016年10月成都市二环局部区域轨迹数据/gps_20161016'
# 显示所有列
pd.set_option('display.max_columns', None)
# 显示所有行
pd.set_option('display.max_rows', None)
data = pd.read_csv(temp_p, header=None, sep=',', names=['pid', 'oid', 'time', 'lng', 'lat'])
data.drop(['pid'], axis=1, inplace=True)
data.sort_values(['oid', 'time'], ascending=[True, True], inplace=True)
data.to_csv('gps_20161016.csv', sep=',', index=False, chunksize=500)
需要将数据中速度过高的数据删除
通过吉斯算每两个轨迹点之间的瞬时速度来判断车速是否过快,将瞬时速度大于33.33m/s的订单数据过滤掉
def data_clean():
"""
数据清洗
删除速度过高的数据
:return:
"""
tracks_array = pd.read_csv('../gps_data/gps_20161016_data.csv')
tv = tracks_array.values
no_high_speed = True
bad_track = []
current_id = tv[0][0] # 第一条轨迹id
for i in range(1, len(tv)):
if tv[i][0] == current_id and no_high_speed:
if (tv[i][1] - tv[i - 1][1]) > 10:
# 如果轨迹点间隔时间超过5s,则标记为脏数据
bad_track.append(tv[i][0])
no_high_speed = False
else:
# 计算瞬时速度
distence = round(haversine(tv[i][2], tv[i][3], tv[i - 1][2], tv[i - 1][3]))
speed = distence / (tv[i][1] - tv[i - 1][1])
if speed > 33.33:
bad_track.append(tv[i][0])
no_high_speed = False
if tv[i][0] != current_id:
current_id = tv[i][0]
no_high_speed = True
return bad_track, tv
网友评论