使用TransBigData包进行出租车GPS数据处理

使用示例中的样例数据集在github仓库中,链接为:https://github.com/ni1o1/transbigdata/tree/main/docs/source/gallery

下面我们介绍如何使用TransBigData包,调用其中的函数实现对出租车GPS数据的快速处理。

首先我们引入TransBigData包,并读取数据:

import transbigdata as tbd
import pandas as pd
import geopandas as gpd
#读取数据
data = pd.read_csv('TaxiData-Sample.csv',header = None)
data.columns = ['VehicleNum','Time','Lng','Lat','OpenStatus','Speed']
data
VehicleNum Time Lng Lat OpenStatus Speed
0 34745 20:27:43 113.806847 22.623249 1 27
1 34745 20:24:07 113.809898 22.627399 0 0
2 34745 20:24:27 113.809898 22.627399 0 0
3 34745 20:22:07 113.811348 22.628067 0 0
4 34745 20:10:06 113.819885 22.647800 0 54
... ... ... ... ... ... ...
544994 28265 21:35:13 114.321503 22.709499 0 18
544995 28265 09:08:02 114.322701 22.681700 0 0
544996 28265 09:14:31 114.336700 22.690100 0 0
544997 28265 21:19:12 114.352600 22.728399 0 0
544998 28265 19:08:06 114.137703 22.621700 0 0

544999 rows × 6 columns

#读取区域信息
import geopandas as gpd
sz = gpd.read_file(r'sz/sz.shp')
sz.crs = None
sz.plot()

数据预处理

TransBigData包也集成了数据预处理的常用方法。其中,tbd.clean_outofshape方法输入数据和研究范围区域信息,筛选剔除研究范围外的数据。而tbd.clean_taxi_status方法则可以剔除的载客状态瞬间变化的记录。在使用预处理的方法时,需要传入相应的列,代码如下:

#数据预处理
#剔除研究范围外的数据
data = tbd.clean_outofshape(data, sz, col=['Lng', 'Lat'], accuracy=500)
#剔除出租车数据中载客状态瞬间变化的记录
data = tbd.clean_taxi_status(data, col=['VehicleNum', 'Time', 'OpenStatus'])

数据栅格化

以栅格形式表达数据分布是最基本的表达方法。GPS数据经过栅格化后,每个数据点都含有对应的栅格信息,采用栅格表达数据的分布时,其表示的分布情况与真实情况接近。如果要使用TransBigData工具进行栅格划分,首先需要确定栅格化的参数(可以理解为定义了一个栅格坐标系),参数可以帮助我们快速进行栅格化:

#栅格化
#定义范围,获取栅格化参数
bounds = [113.6,22.4,114.8,22.9]
params = tbd.grid_params(bounds,accuracy = 500)
params

(113.6, 22.4, 0.004872390756896538, 0.004496605206422906)

取得栅格化参数后,将GPS对应至栅格,由LONCOL与LATCOL两列共同指定一个栅格:

#将GPS栅格化
data['LONCOL'],data['LATCOL'] = tbd.GPS_to_grids(data['Lng'],data['Lat'],params)

统计每个栅格的数据量:

#集计栅格数据量
datatest = data.groupby(['LONCOL','LATCOL'])['VehicleNum'].count().reset_index()

生成栅格的地理图形,并将它转化为GeoDataFrame:

#生成栅格地理图形
datatest['geometry'] = tbd.gridid_to_polygon(datatest['LONCOL'],datatest['LATCOL'],params)
#转为GeoDataFrame
import geopandas as gpd
datatest = gpd.GeoDataFrame(datatest)

绘制栅格测试是否成功:

#绘制
datatest.plot(column = 'VehicleNum')

出行OD提取与集计

使用tbd.taxigps_to_od方法,传入对应的列名,即可提取出行OD:

#从GPS数据提取OD
oddata = tbd.taxigps_to_od(data,col = ['VehicleNum','Time','Lng','Lat','OpenStatus'])
oddata
VehicleNum stime slon slat etime elon elat ID
427075 22396 00:19:41 114.013016 22.664818 00:23:01 114.021400 22.663918 0
131301 22396 00:41:51 114.021767 22.640200 00:43:44 114.026070 22.640266 1
417417 22396 00:45:44 114.028099 22.645082 00:47:44 114.030380 22.650017 2
376160 22396 01:08:26 114.034897 22.616301 01:16:34 114.035614 22.646717 3
21768 22396 01:26:06 114.046021 22.641251 01:34:48 114.066048 22.636183 4
... ... ... ... ... ... ... ... ...
57666 36805 22:37:42 114.113403 22.534767 22:48:01 114.114365 22.550632 5332
175519 36805 22:49:12 114.114365 22.550632 22:50:40 114.115501 22.557983 5333
212092 36805 22:52:07 114.115402 22.558083 23:03:27 114.118484 22.547867 5334
119041 36805 23:03:45 114.118484 22.547867 23:20:09 114.133286 22.617750 5335
224103 36805 23:36:19 114.112968 22.549601 23:43:12 114.089485 22.538918 5336

5337 rows × 8 columns

对提取出的OD进行OD的栅格集计,并生成GeoDataFrame

#栅格化OD并集计
od_gdf = tbd.odagg_grid(oddata,params)
od_gdf.plot(column = 'count')

出行OD小区集计

TransBigData包也提供了将OD直接集计到小区的方法

#OD集计到小区(在不传入栅格化参数时,直接用经纬度匹配)
od_gdf = tbd.odagg_shape(oddata,sz,round_accuracy=6)
od_gdf.plot(column = 'count')

#OD集计到小区(传入栅格化参数时,先栅格化后匹配,可加快匹配速度,数据量大时建议使用)
od_gdf = tbd.odagg_shape(oddata,sz,params = params)
od_gdf.plot(column = 'count')

基于matplotlib的地图绘制

tbd中提供了地图底图加载和比例尺指北针的功能。使用plot_map方法添加地图底图,plotscale添加比例尺和指北针:

#创建图框
import matplotlib.pyplot as plt
import plot_map
fig =plt.figure(1,(8,8),dpi=80)
ax =plt.subplot(111)
plt.sca(ax)
#添加地图底图
tbd.plot_map(plt,bounds,zoom = 12,style = 4)
#绘制colorbar
cax = plt.axes([0.05, 0.33, 0.02, 0.3])
plt.title('count')
plt.sca(ax)
#绘制OD
od_gdf.plot(ax = ax,vmax = 100,column = 'count',cax = cax,legend = True)
#绘制小区底图
sz.plot(ax = ax,edgecolor = (0,0,0,1),facecolor = (0,0,0,0.2),linewidths=0.5)
#添加比例尺和指北针
tbd.plotscale(ax,bounds = bounds,textsize = 10,compasssize = 1,accuracy = 2000,rect = [0.06,0.03],zorder = 10)
plt.axis('off')
plt.xlim(bounds[0],bounds[2])
plt.ylim(bounds[1],bounds[3])
plt.show()

出租车轨迹的提取

使用tbd.taxigps_traj_point方法,输入数据和OD数据,可以提取出轨迹点

data_deliver,data_idle = tbd.taxigps_traj_point(data,oddata,col=['VehicleNum', 'Time', 'Lng', 'Lat', 'OpenStatus'])
data_deliver
VehicleNum Time Lng Lat OpenStatus Speed LONCOL LATCOL ID flag
427075 22396 00:19:41 114.013016 22.664818 1 63.0 85.0 59.0 0.0 1.0
427085 22396 00:19:49 114.014030 22.665483 1 55.0 85.0 59.0 0.0 1.0
416622 22396 00:21:01 114.018898 22.662500 1 1.0 86.0 58.0 0.0 1.0
427480 22396 00:21:41 114.019348 22.662300 1 7.0 86.0 58.0 0.0 1.0
416623 22396 00:22:21 114.020615 22.663366 1 0.0 86.0 59.0 0.0 1.0
... ... ... ... ... ... ... ... ... ... ...
170960 36805 23:42:31 114.092766 22.538317 1 66.0 101.0 31.0 5336.0 1.0
170958 36805 23:42:37 114.091721 22.538349 1 65.0 101.0 31.0 5336.0 1.0
170974 36805 23:42:43 114.090752 22.538300 1 60.0 101.0 31.0 5336.0 1.0
170973 36805 23:42:49 114.089813 22.538099 1 62.0 101.0 31.0 5336.0 1.0
253064 36805 23:42:55 114.089500 22.538067 1 51.0 100.0 31.0 5336.0 1.0

190492 rows × 10 columns

data_idle
VehicleNum Time Lng Lat OpenStatus Speed LONCOL LATCOL ID flag
416628 22396 00:23:01 114.021400 22.663918 0 25.0 86.0 59.0 0.0 0.0
401744 22396 00:25:01 114.027115 22.662100 0 25.0 88.0 58.0 0.0 0.0
394630 22396 00:25:41 114.024551 22.659834 0 21.0 87.0 58.0 0.0 0.0
394671 22396 00:26:21 114.022797 22.658367 0 0.0 87.0 57.0 0.0 0.0
394672 22396 00:26:29 114.022797 22.658367 0 0.0 87.0 57.0 0.0 0.0
... ... ... ... ... ... ... ... ... ... ...
64411 36805 23:53:09 114.120354 22.544300 1 2.0 107.0 32.0 5336.0 0.0
64405 36805 23:53:15 114.120354 22.544300 1 1.0 107.0 32.0 5336.0 0.0
64390 36805 23:53:21 114.120354 22.544300 1 0.0 107.0 32.0 5336.0 0.0
64406 36805 23:53:27 114.120354 22.544300 1 0.0 107.0 32.0 5336.0 0.0
64393 36805 23:53:33 114.120354 22.544300 1 0.0 107.0 32.0 5336.0 0.0

312779 rows × 10 columns

对轨迹点生成载客与空载的轨迹

traj_deliver = tbd.points_to_traj(data_deliver)
traj_deliver.plot()

traj_idle = tbd.points_to_traj(data_idle)
traj_idle.plot()

轨迹可视化

TransBigData包也依托于kepler.gl提供的可视化插件提供了一键数据整理与可视化的方法

使用此功能请先安装python的keplergl包

pip install keplergl

将轨迹数据进行可视化:

tbd.visualization_trip(data_deliver)

Python出租车GPS数据处理(TransBigData)相关推荐

  1. Python出租车GPS数据的路网匹配(TransBigData+leuvenmapmatching)

    本例尝试使用TransBigData+leuvenmapmatching实现出租车GPS数据的路网匹配,使用的样例数据在:https://github.com/ni1o1/transbigdata/t ...

  2. Python出租车GPS数据的路网匹配(踩坑复盘)

    目录 项目背景 TransBigData简介 数据预处理 数据栅格化 订单起讫点OD提取与聚合集计 交互可视化 总结 (基于小旭学长的TansBigData项目实践,此篇在转载小旭学长项目的基础上对遇 ...

  3. python出租车数据_1-出租车数据的基础处理,由gps生成OD(pandas).ipynb

    { "cells": [ { "cell_type": "markdown", "metadata": {}, &quo ...

  4. python gps数据处理_GPS数据处理简述(上)

    前前言最近在上海出差,有对数据挖掘和机器学习的实践感兴趣,想要面基的小伙伴可以联系我. 联系方式在 Resume 里面,也可以看一下我的介绍,到时候咱们可以面基面的更有针对性. 困死了,实在写不下去了 ...

  5. 滴滴驾驶行为开放数据集:GPS数据处理

    滴滴驾驶行为开放数据集 重要提示 1.数据集介绍 1.1 驾驶行为基础信息:driver_accident_base_data 1.2 GPS&IMU数据 1.3 数据申请 2. GPS数据处 ...

  6. python整理excel数据-Python 之Excel 数据处理

    Python 之 Excel 数据处理 一.背景. 运维工作中,可能会遇到同事或者技术领导给Excel 数据进行,数据抽取汇总或者进行运维自动化提供元数据使用,针对以上场景我们需要进行python 处 ...

  7. c语言程序设计 cap 翁恺,GPS数据处理 翁恺老师C语言程序设计CAP第10章编程题

    NMEA-0183协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA-The National Marine Elect ...

  8. 基于python的语料库数据处理_基于Python的语料库数据处理(三)

    原标题:基于Python的语料库数据处理(三) <Python玩转语料库数据>专栏· 第3篇 1393 字 | 5 分钟阅读 一起来学习用Python进行语料库数据处理吧! 一.条件判断 ...

  9. 【研究总结】基于出租车GPS轨迹数据的相关研究

    出租车纯粹研究出现貌似已经过时了,在常规研究的时代结束之前,让我们来回顾和展望一下 一.常规研究 1.一般从出租车的运营特征(车.载客.行程.空载率)和出行空间特征(OD点线)两个方面来研究居民的出行 ...

  10. python在大数据处理的应用

    python在大数据处理中是个万能的胶水,在很多地方用起来很舒适. 在处理大数据时,需要使用一些技术和工具来确保Python代码的高效性和可扩展性.一些有用的技术和工具如下: 使用numpy而不是纯P ...

最新文章

  1. 2022-2028年中国量子点膜行业市场调查分析及未来前景分析报告
  2. c字符串函数实现(1)---strncpy
  3. qxidc项目/crtsurfdata程序 杀青总结
  4. Riot美术师经验分享:好设计是改出来的
  5. LeetCode 1091. 二进制矩阵中的最短路径(BFS)
  6. Linux系统的启动过程(转)
  7. html模拟word目录,word临时文件目录
  8. RestTemplate使用笔记
  9. event.target
  10. socket怎么同时监听两个端口_三十岁了,我同时爱上两个男人,我现在不知道怎么办...
  11. aac蓝牙编解码协议_蓝牙协议总结
  12. 计算机打印服务总是自动关闭,XP系统Print spooler总是自动关闭的解决方法
  13. 王树尧老师运筹学课程笔记 02 高等数学基础
  14. 04- kubeadm init流程
  15. 设置python程序开机自启动
  16. win10打开蓝牙_在win10中,使用“设置”检查蓝牙设备电量,是个简便的方法
  17. 程序员视角的计算机系统 第一章 计算机系统之旅
  18. mac 查看本地php 版本,Mac系统版本怎么看
  19. 【经验分享】AVI文件打开只有音频无视频的解决方案
  20. Git搭建私有服务器

热门文章

  1. dubbo常用类和路径
  2. c# 导出Excel
  3. 关于FND_PROFILE与FND_GLOBLE[Z]
  4. Qt qlabel 设置字体、大小、加粗等
  5. 文件路径的正斜杠(/)与反斜杠(\)
  6. 采用new分配内存失败时为什么会出现两种错误报告方式?
  7. 谈论软件开发流程与开发方法的重要性
  8. a href='../目录 +变量+ ' download='../目录 +变量+“'查看附件/a 使用变量
  9. MySql表空间的概念
  10. PBC密码学库使用指南