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

1 数据来源

T-Drive trajectory data sample - Microsoft Research

2 数据介绍

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

数据集:T-Drive(北京出租车轨迹数据)_第1张图片

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

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

数据集:T-Drive(北京出租车轨迹数据)_第3张图片

 3 数据格式

数据集:T-Drive(北京出租车轨迹数据)_第4张图片

出租车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

数据集:T-Drive(北京出租车轨迹数据)_第5张图片

 4.2 处理数据

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

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

数据集:T-Drive(北京出租车轨迹数据)_第6张图片

 4.2.2 去重

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

数据集:T-Drive(北京出租车轨迹数据)_第7张图片 

 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

数据集:T-Drive(北京出租车轨迹数据)_第8张图片

 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()
    

 

 。。。

你可能感兴趣的:(数据集,python,pandas,笔记)