4 Star 24 Fork 10

ni1o1 / transbigdata

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
BSD-3-Clause

English 中文版

TransBigData 针对交通时空大数据处理的Python包

Documentation Status PyPI version Downloads GitHub commit activity bilibili status Tests codecov DOI Gitter

TransBigData是一个为交通时空大数据处理、分析和可视化而开发的Python包。TransBigData为处理常见的交通时空大数据(如出租车GPS数据、共享单车数据和公交车GPS数据)提供了快速而简洁的方法。TransBigData为交通时空大数据分析的各个阶段提供了多种处理方法,代码简洁、高效、灵活、易用,可以用简洁的代码实现复杂的数据任务。

对于一些特定类型的数据,TransBigData还提供了针对特定需求的工具,如从出租车GPS数据中提取出租车行程的起点和终点信息(OD),从公交车GPS数据中识别到离站信息。该包的最新稳定版本可以通过pip安装,完整的文档可以查看:TransBigData的说明文档

技术特点

  • 面向交通时空大数据分析不同阶段的处理需求提供不同处理功能。
  • 代码简洁、高效、灵活、易用,通过简短的代码即可实现复杂的数据任务。

主要功能

目前,TransBigData主要提供以下方法:

  • 数据质量分析: 提供快速获取数据集一般信息的方法,包括数据量、时间段和采样间隔。
  • 数据预处理: 提供清洗多种类型的数据错误的方法。
  • 数据栅格化: 提供在研究区域内生成多种类型的地理网格(矩形网格、六角形网格)的方法。提供快速算法将GPS数据映射到生成的网格上。
  • 数据聚合集计: 提供将GPS数据和OD数据聚合到地理多边形的方法。
  • 数据可视化: 内置的可视化功能,利用可视化包keplergl,用简单的代码在Jupyter笔记本上交互式地可视化数据。
  • 轨迹数据处理: 提供处理轨迹数据的方法,包括从GPS点生成轨迹线型,轨迹增密等。
  • 地图底图: 提供在matplotlib上显示Mapbox地图底图的方法。

安装

TransBigData仅支持Python版本>=3.6

用pypi安装

在安装 TransBigData之前,请确保已经安装了可用的geopandas包:https://geopandas.org/index.html 如果你已经安装了geopandas,则直接在命令提示符中运行下面代码即可安装:

pip install -U transbigdata

用conda-forge安装

你也可以用conda-forge安装 TransBigData,这种方式会自动解决环境依赖,不过国内可能需要更换conda源。运行下面代码即可安装:

conda install -c conda-forge transbigdata

可视化示例

可视化轨迹(基于keplergl)

gif

可视化数据分布(基于keplergl)

gif

可视化OD(基于keplergl)

gif

使用示例

下面例子展示如何使用 TransBigData工具快速处理出租车GPS数据,实现数据栅格化,数据聚合集计与数据可视化:

import transbigdata as tbd
import pandas as pd
#读取出租车GPS数据 
data = pd.read_csv('TaxiData-Sample.csv',header = None) 
data.columns = ['VehicleNum','time','lon','lat','OpenStatus','Speed'] 
data
VehicleNum time lon 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

数据预处理

首先定义研究范围,并使用 tbd.clean_outofbounds剔除研究范围外的数据

#定义研究范围
bounds = [113.75, 22.4, 114.62, 22.86]
#剔除研究范围外的数据
data = tbd.clean_outofbounds(data,bounds = bounds,col = ['lon','lat'])

数据栅格化

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

#获取栅格化参数
params = tbd.area_to_params(bounds,accuracy = 1000)
params

{'slon': 113.75, 'slat': 22.4, 'deltalon': 0.00974336289289822, 'deltalat': 0.008993210412845813, 'theta': 0, 'method': 'rect', 'gridsize': 1000}

取得栅格化参数后,将GPS对应至栅格。使用 tbd.GPS_to_grid方法,该方法会生成 LONCOL列与 LATCOL列,并由这两列共同指定一个栅格:

#将GPS数据对应至栅格
data['LONCOL'],data['LATCOL'] = tbd.GPS_to_grids(data['lon'],data['lat'],params)

聚合集计栅格内数据量,并为栅格生成几何图形:

#聚合集计栅格内数据量
grid_agg = data.groupby(['LONCOL','LATCOL'])['VehicleNum'].count().reset_index()
#生成栅格的几何图形
grid_agg['geometry'] = tbd.gridid_to_polygon(grid_agg['LONCOL'],grid_agg['LATCOL'],params)
#转换为GeoDataFrame
import geopandas as gpd
grid_agg = gpd.GeoDataFrame(grid_agg)
#绘制栅格
grid_agg.plot(column = 'VehicleNum',cmap = 'autumn_r')

png

三角形、六边形网格 & 旋转角度

TransBigData支持三角形、六边形网格,也支持为网格赋予旋转角度。我们可以通过以下方式改变栅格参数来进行设定

#设置为六边形网格
params['method'] = 'hexa'
#设置为三角形网格: params['method'] = 'tri'
#设置旋转角度,单位为度
params['theta'] = 5

然后我们可以再次进行匹配、集计:

#三角形和六边形网格要求三列存储栅格ID信息
data['loncol_1'],data['loncol_2'],data['loncol_3'] = tbd.GPS_to_grid(data['lon'],data['lat'],params)
#聚合集计栅格内数据量
grid_agg = data.groupby(['loncol_1','loncol_2','loncol_3'])['VehicleNum'].count().reset_index()
#生成栅格的几何图形
grid_agg['geometry'] = tbd.grid_to_polygon([grid_agg['loncol_1'],grid_agg['loncol_2'],grid_agg['loncol_3']],params)
#转换为GeoDataFrame
import geopandas as gpd
grid_agg = gpd.GeoDataFrame(grid_agg)
#绘制栅格
grid_agg.plot(column = 'VehicleNum',cmap = 'autumn_r')

1648714436503.png

数据可视化(在matplotlib中绘制地图底图)

对于一个正式的数据可视化图来说,我们还需要添加底图、色条、指北针和比例尺。 用 tbd.plot_map加载地图底图,并用 tbd.plotscale添加指北针和比例尺:

import matplotlib.pyplot as plt
fig =plt.figure(1,(8,8),dpi=300)
ax =plt.subplot(111)
plt.sca(ax)
#加载地图底图
tbd.plot_map(plt,bounds,zoom = 11,style = 4)
#定义色条位置
cax = plt.axes([0.05, 0.33, 0.02, 0.3])
plt.title('Data count')
plt.sca(ax)
#绘制数据
grid_agg.plot(column = 'VehicleNum',cmap = 'autumn_r',ax = ax,cax = cax,legend = True)
#添加指北针和比例尺
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()

1648714582961.png

TransBigData提供的栅格化的框架

下图显示了 TransBigData提供的栅格化方法框架

1648715064154.png

具体用法可以参考这个案例

相关链接

引用信息

如果你想要引用 TransBigData,请引用这个DOI,引用信息在这个文件中CITATION.cff

介绍视频

BSD 3-Clause License Copyright (c) 2021, Qing Yu All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

简介

TransBigData工具针对Python时空大数据处理而开发,集成了交通时空大数据处理过程中常用的方法 展开 收起
Python
BSD-3-Clause
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/ni1o1/transbigdata.git
git@gitee.com:ni1o1/transbigdata.git
ni1o1
transbigdata
transbigdata
main

搜索帮助