数据集:T-Drive(北京出租车轨迹数据)

该文介绍了如何处理和分析来自MicrosoftResearch的北京市出租车GPS轨迹数据。首先,读取并合并所有出租车的轨迹数据,然后按ID和时间排序并去除重复项。接着,过滤掉地理位置异常的记录,只保留北京市内的数据。最后,利用OSMNX库获取北京的路网数据,并将出租车轨迹投影到地图上进行可视化展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 数据来源

T-Drive trajectory data sample - Microsoft Research

2 数据介绍

  • 数据集包含了2008年2月2日至2月8日期间在北京市内的10,357辆出租车的GPS轨迹。
  • 总共包含约1500万个GPS点,轨迹总里程达到了900万公里。

  • 图1显示了两个连续点之间的时间间隔和距离间隔的分布情况。
  • 平均采样间隔约为177秒,平均距离为623米。
  •  该数据集的每个文件以出租车ID命名,每个文件包含了一辆出租车的轨迹数据。

 图2可视化了该数据集中GPS点的密度分布情况。

 3 数据格式

出租车id,时间,经度,维度

4 数据处理

4.1 读取数据

import os
os.chdir(数据所处的路径)
files=os.listdir()

import pandas as pd
gps_data=pd.read_csv(files[0],names=['taxi_id','time','latitude','longitude'])


for file in files[1:]:
    tmp=pd.read_csv(file,names=['taxi_id','time','longitude','latitude'])
    gps_data=pd.concat([gps_data,tmp])


gps_data

 4.2 处理数据

4.2.1 按照出租车ID+时间排序

gps_data1=gps_data.sort_values(by=['taxi_id','time'],ignore_index=True)
gps_data1

 4.2.2 去重

gps_data1.drop_duplicates(inplace=True,ignore_index=True)
gps_data1

 

 4.2.3 去除范围外的数据

我们先看一下目前数据经纬度的最大最小值

max(gps_data1.latitude),min(gps_data1.latitude)
#(116.69568, 0.0)

max(gps_data1.longitude),min(gps_data1.longitude)
#(255.3, 0.0)

0这种显然不合理

——>我们只保留一定经纬度范围内的数据

gps_data1=gps_data1[(gps_data1['latitude']>39.83)&
                  (gps_data1['latitude']<40.05)&
                  (gps_data1['longitude']>116.17)&
                  (gps_data1['longitude']<116.62)]
gps_data1

 4.3 数据映射到路网中

4.3.1 获取路网数据

import osmnx as ox
 
beijing_road=ox.graph_from_bbox(40.05,39.83,116.62,116.17,network_type='drive')

4.3.2 可视化路网

ox.plot_graph(beijing_road,figsize=(15,15),show=False,close=False,node_size=4)

 4.3.3 将一定数量的轨迹投影到地图上

import matplotlib.pyplot as plt
latitude = gps_data1.latitude.to_list()
longitude = gps_data1.longitude.to_list()
#将gps点的经纬度提取出来
 

fig,ax = ox.plot_graph(beijing_road,figsize=(15,15),show=False,close=False,node_size=4)
#可视化路网
ax.scatter(longitude[:100000],latitude[:100000],s=0.5,alpha=1,c='red')
#在路网中投影10万个坐标点
plt.show()

 4.3.4 可视化每一条路网轨迹

for i in set(gps_data1.taxi_id):
    latitude = gps_data1[gps_data1.taxi_id==i].latitude.to_list()
    longitude = gps_data1[gps_data1.taxi_id==i].longitude.to_list()
 
    #投影
    fig,ax = ox.plot_graph(beijing_road,figsize=(15,15),show=False,close=False,node_size=1)
    ax.scatter(longitude,latitude,s=5,alpha=1,c='red')#投影10万个坐标点
    plt.title('Trajectory for taxi '+str(i))
    plt.show()
    

 

 。。。

评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值