admin管理员组

文章数量:1642238

1 读取数据

官方文档中给定的出租车数据在transbigdata/docs/source/gallery/data/TaxiData-Sample.csv at main · ni1o1/transbigdata (github)

1.1 出租车数据 

 

data=pd.read_csv('TaxiData-Sample.csv',names= ['VehicleNum', 'Time', 'Lng', 'Lat', 'OpenStatus', 'Speed'])
data

1.2 深圳数据

sz=gpd.read_file('sz.json')
sz

sz.plot(figsize=(15,8))

 

2 清理数据

2.1 清理深圳之外的数据

transbigdata笔记:数据预处理-CSDN博客

data = tbd.clean_outofshape(data, sz, col=['Lng', 'Lat'], accuracy=500)
data

2.2 清理异常记录点

transbigdata笔记:数据预处理-CSDN博客

异常记录点,指的是记录点前后的出租车状态(有乘客/无乘客)和自己的出租车状态不一样

data = tbd.clean_taxi_status(data, col=['VehicleNum', 'Time', 'OpenStatus'])
data

3 数据网格化

3.1 定义网格坐标系

transbigdata笔记:数据栅格化-CSDN博客

官方样例是取了经纬度的四个极值,其实直接把sz作为参数输进去也可以

params=tbd.area_to_params(sz,accuracy=500)
params
'''
{'slon': 113.74627986426263,
 'slat': 22.39928709355355,
 'deltalon': 0.0048717524501333395,
 'deltalat': 0.004496605206422906,
 'theta': 0,
 'method': 'rect',
 'gridsize': 500}
'''

3.2 将GPS 映射到对应的网格

这里LONCOL和LATCOL列就可以指定一个网格

transbigdata笔记:数据栅格化-CSDN博客

data['LONCOL'], data['LATCOL'] = tbd.GPS_to_grid(data['Lng'], data['Lat'], params)
data

3,2,1 统计每个网格中出现的车辆的数量

dataset=data.groupby(['LONCOL', 'LATCOL'])['VehicleNum'].count().reset_index()
dataset

3.2.2 将网格对应的几何信息写入DataFrame

transbigdata笔记:数据栅格化-CSDN博客

dataset['geometry'] = tbd.grid_to_polygon([dataset['LONCOL'], dataset['LATCOL']], params)
dataset

3.3 绘制网格

datatest=gpd.GeoDataFrame(dataset)
plt.figure(1,(16, 6), dpi=300)
#图的大小和size
ax1 = plt.subplot(111)
#在图形中创建了一个子图。111 表示图形布局是1行1列,且这是第1个子图。
datatest.plot(ax=ax1,column='VehicleNum',legend=True)
'''
在子图ax1上绘制数据。
column='VehicleNum' 指定了要绘制的数据列。
legend=True 表示在图表中包含图例。
'''
plt.xticks([], fontsize=10)
plt.yticks([], fontsize=10)
#设置x轴和y轴的刻度(为空)
plt.title('Counting of Taxi GPS Trajectory Points', fontsize=12);
#设置标题

3.3.1 scheme 指定数据分类方案

geopandas 笔记:plot 的scheme-CSDN博客

plt.figure(1,(16, 6), dpi=300)
#图的大小和size
ax1 = plt.subplot(111)
#在图形中创建了一个子图。111 表示图形布局是1行1列,且这是第1个子图。
datatest.plot(ax=ax1,column='VehicleNum',legend=True, scheme='quantiles')
'''
在子图ax1上绘制数据。
column='VehicleNum' 指定了要绘制的数据列。
legend=True 表示在图表中包含图例。
scheme指定数据分类方案
'''
plt.xticks([], fontsize=10)
plt.yticks([], fontsize=10)
#设置x轴和y轴的刻度(为空)
plt.title('Counting of Taxi GPS Trajectory Points', fontsize=12);
#设置标题

4 提取&聚合出租车行程

 4.1 提取OD

oddata = tbd.taxigps_to_od(data,col = ['VehicleNum', 'Time', 'Lng', 'Lat', 'OpenStatus'])
oddata

4.2  聚合OD ,获得轨迹的geometry

od_gdf = tbd.odagg_grid(oddata, params)
od_gdf

4.3 绘制OD trip

fig = plt.figure(1, (16, 6), dpi=150) 
# 确定图形高为6,宽为8;图形清晰度
ax1 = plt.subplot(111)

od_gdf.plot(ax=ax1, column='count', legend=True)
plt.xticks([], fontsize=10)
plt.yticks([], fontsize=10)
plt.title('OD Trips', fontsize=12);

5 提取出租车轨迹

5.0 提取载客行程和空闲行程

data_deliver, data_idle = tbd.taxigps_traj_point(data,
                                                 oddata,
                                                 col=['VehicleNum',
                                                                  'Time',
                                                                  'Lng',
                                                                  'Lat',
                                                                  'OpenStatus'])

返回载客行程和空闲行程的轨迹点 

data_idle

data_deliver

5.1 一个一个记录汇总成一条一条线

注:官方文档里写的points_to_traj已经无了,现在是traj_to_linestring

traj_deliver = tbd.traj_to_linestring(data_deliver)
traj_deliver

5.2 用kepler.gl可视化轨迹

tbd.visualization_trip(data_deliver)

本文标签: 数据处理出租车案例文档笔记