| name | transbigdata-traj |
| description | 使用 TransBigData 进行轨迹数据处理。适用于轨迹清洗(漂移、冗余)、平滑、分段、停留识别、路网匹配、轨迹密化稀疏化等任务。 |
TransBigData 轨迹处理指南
安装
pip install transbigdata
核心函数
1. 轨迹漂移清洗 - traj_clean_drift()
删除速度/距离/角度异常的漂移点。
import transbigdata as tbd
data_clean = tbd.traj_clean_drift(
data,
col=['VehicleNum', 'Time', 'Lng', 'Lat'],
speedlimit=80,
dislimit=1000,
anglelimit=30
)
2. 冗余数据清洗 - traj_clean_redundant()
删除重复或冗余的轨迹点。
data_clean = tbd.traj_clean_redundant(
data,
col=['VehicleNum', 'Time', 'Lng', 'Lat']
)
3. 轨迹平滑 - traj_smooth()
使用卡尔曼滤波平滑轨迹。
data_smooth = tbd.traj_smooth(
data,
col=['id', 'time', 'lon', 'lat'],
process_noise_std=0.1,
measurement_noise_std=1
)
4. 轨迹分段 - traj_segment()
根据时间间隔分割轨迹,返回每段起终点信息。
segments = tbd.traj_segment(
data,
col=['VehicleNum', 'Time', 'Lng', 'Lat'],
groupby_col=['VehicleNum'],
retain_col=['Lng', 'Lat']
)
5. 轨迹切片 - traj_slice()
根据给定的时间段切割轨迹。
sliced = tbd.traj_slice(
data,
move,
traj_col=['VehicleNum', 'Time'],
slice_col=['VehicleNum', 'stime', 'etime', 'tripid']
)
6. 停留与移动识别 - traj_stay_move()
识别轨迹中的停留点和移动段。
stay, move = tbd.traj_stay_move(
data,
params,
col=['VehicleNum', 'Time', 'Lng', 'Lat'],
activitytime=1800
)
7. 轨迹密化 - traj_densify()
在轨迹点之间插值生成更密集的点。
data_dense = tbd.traj_densify(
data,
col=['VehicleNum', 'Time', 'Lng', 'Lat'],
timegap=15
)
8. 轨迹稀疏化 - traj_sparsify()
降低轨迹采样频率。
data_sparse = tbd.traj_sparsify(
data,
col=['VehicleNum', 'Time', 'Lng', 'Lat'],
timegap=60,
method='subsample'
)
9. 轨迹转线 - traj_to_linestring()
将轨迹点转换为 GeoDataFrame 线几何。
traj_gdf = tbd.traj_to_linestring(
data,
col=['VehicleNum', 'Lng', 'Lat'],
timecol='Time'
)
10. 路网匹配 - traj_mapmatch()
将轨迹匹配到路网。
import osmnx as ox
G = ox.graph_from_place('Shenzhen, China', network_type='drive')
matched = tbd.traj_mapmatch(
data,
G,
col=['VehicleNum', 'Time', 'Lng', 'Lat']
)
11. 轨迹长度计算 - traj_length()
计算轨迹总长度(米)。
data_with_length = tbd.traj_length(
data,
col=['VehicleNum', 'Time', 'Lng', 'Lat'],
method='Haversine'
)
完整示例:出租车轨迹处理流程
import pandas as pd
import transbigdata as tbd
data = pd.read_csv('taxi_gps.csv')
data['Time'] = pd.to_datetime(data['Time'])
data = tbd.traj_clean_redundant(data, col=['VehicleNum', 'Time', 'Lng', 'Lat'])
data = tbd.traj_clean_drift(data, col=['VehicleNum', 'Time', 'Lng', 'Lat'],
speedlimit=100, dislimit=1000)
data = tbd.traj_smooth(data, col=['VehicleNum', 'Time', 'Lng', 'Lat'])
bounds = [113.75, 22.4, 114.62, 22.86]
params = tbd.area_to_params(bounds, accuracy=500)
stay, move = tbd.traj_stay_move(data, params,
col=['VehicleNum', 'Time', 'Lng', 'Lat'],
activitytime=1800)
traj_gdf = tbd.traj_to_linestring(data, col=['VehicleNum', 'Lng', 'Lat'],
timecol='Time')
traj_gdf.plot(figsize=(10, 10))
使用建议
- 清洗顺序: 先去冗余,再去漂移
- 停留识别:
activitytime 通常设为 1800 秒(30分钟)
- 路网匹配: 需要先用 OSMnx 获取路网数据
- 密化/稀疏化: 根据分析需求调整
timegap
参考文档
完整文档: https://transbigdata.readthedocs.io/en/latest/traj.html