4 Star 24 Fork 10

ni1o1 / transbigdata

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README-zh_CN.md 11.74 KB
一键复制 编辑 原始数据 按行查看 历史
ni1o1 提交于 2022-09-08 23:05 . update version support

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

介绍视频

1
https://gitee.com/ni1o1/transbigdata.git
git@gitee.com:ni1o1/transbigdata.git
ni1o1
transbigdata
transbigdata
main

搜索帮助