n倍加速geopandas运算是什么体验

简介: n倍加速geopandas运算是什么体验

1 简介

大家好我是费老师,geopandas作为我们非常熟悉的Python GIS利器,兼顾着高性能和易用性,特别是在其0.12.0版本开始使用全新的shapely2.0矢量计算后端后,性能表现更是一路狂飙。

而我们作为使用者,当然是希望geopandas处理分析矢量数据越快越好。在今天的文章中,我将为大家简要介绍如何基于daskgeopandas进一步提速,从而更从容的应对更大规模的GIS分析计算任务。

2 dask-geopandas的使用

很多朋友应该听说过dask,它是Python生态里非常知名的高性能计算框架,可以针对大型数组、数据框及机器学习模型进行并行计算调度优化,而dask-geopandas就是由geopandas团队研发的,基于daskGeoDataFrame进行并行计算优化的框架,本质上是对daskgeopandas的封装整合。

dask-geopandas的安装非常简单,在已经安装了geopandas的虚拟环境中,执行下列命令即可:

conda install dask-geopandas -c conda-forge -y

2.1 基础使用

dask-geopandasgeopandas的常用计算API是相通的,但调用方式略有不同,举一个实际例子,其中示例文件demo_points.gdb由以下代码随机生成并写出:

import numpy as np
import geopandas as gpd
from shapely import Point, Polygon
# 生成示例用矢量数据
demo_points = gpd.GeoDataFrame(
    {
        'id': range(1000000),
        'geometry': [
            Point(np.random.uniform(0, 90),
                  np.random.uniform(0, 90))
            for i in range(1000000)
        ]
    }
)
# 写出到本地gdb
demo_points.to_file('./demo_points.gdb', driver='OpenFileGDB')

在使用dask-geopandas时,我们首先还是需要用geopandas进行目标数据的读入,再使用from_geopandas()将其转换为dask-geopandas中可以直接操作的数据框对象,其中参数npartitions用于将原始数据集划分为n个数据块,理论上分区越多并行运算速度越快,但受限于机器的CPU瓶颈,通常建议设置npartitions为机器可调度的CPU核心数:

demo_points = gpd.read_file('./demo_points.gdb', driver='OpenFileGDB')
demo_points_ddf = dgpd.from_geopandas(demo_points, npartitions=4)
demo_points_ddf

在此基础上,后续执行各种运算都需要在代码末尾衔接.compute(),从而真正执行前面编排好的运算逻辑,以非矢量和矢量运算分别为例:

2.2 性能比较

既然使用了dask-geopandas就是奔着其针对大型数据集的计算优化而去的,我们来比较一下其与原生geopandas在常见GIS计算任务下的性能表现,可以看到,在与geopandas的计算比较中,dask-geopandas取得了约3倍的计算性能提升,且这种提升幅度会随着数据集规模的增加而愈发明显,因为dask可以很好的处理内存紧张时的计算优化:

当然,这并不代表我们可以在任何场景下用dask-geopandas代替geopandas,在常规的中小型数据集上dask-geopandas反而要慢一些,因为徒增了额外的分块调度消耗。


相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
6月前
|
存储 Python
使用Pandas库对非数值型数据进行排序和排名
在Pandas中,支持对非数值型数据排序和排名。可按以下方法操作:1) 字符串排序,使用`sort_values()`,如`sorted_df = df.sort_values(by='Name', ascending=False)`进行降序排序;2) 日期排序,先用`to_datetime()`转换,再排序,如`sorted_df = df.sort_values(by='Date')`;3) 自定义排序,结合`argsort()`和自定义规则。
77 2
|
3月前
|
数据挖掘 Linux Go
全平台都能用的pandas运算加速神器
全平台都能用的pandas运算加速神器
|
3月前
|
机器学习/深度学习 并行计算 测试技术
如何将Numpy加速700倍?用 CuPy 呀
如何将Numpy加速700倍?用 CuPy 呀
|
4月前
|
存储 数据可视化 数据处理
`geopandas`是一个开源项目,它为Python提供了地理空间数据处理的能力。它基于`pandas`库,并扩展了其对地理空间数据(如点、线、多边形等)的支持。`GeoDataFrame`是`geopandas`中的核心数据结构,它类似于`pandas`的`DataFrame`,但包含了一个额外的地理列(通常是`geometry`列),用于存储地理空间数据。
`geopandas`是一个开源项目,它为Python提供了地理空间数据处理的能力。它基于`pandas`库,并扩展了其对地理空间数据(如点、线、多边形等)的支持。`GeoDataFrame`是`geopandas`中的核心数据结构,它类似于`pandas`的`DataFrame`,但包含了一个额外的地理列(通常是`geometry`列),用于存储地理空间数据。
|
5月前
|
存储 数据处理 C语言
NumPy 通用函数(ufunc):高性能数组运算的利器
NumPy的通用函数(ufunc)提供高性能的逐元素运算,支持向量化操作和广播机制,能应用于数组的数学、逻辑和比较运算。ufunc可提高计算速度,避免低效的循环,并允许自定义函数以满足特定需求。例如,ufunc实现加法比循环更高效。通过`frompyfunc`可创建自定义ufunc。判断函数是否为ufunc,可检查其类型是否为`numpy.ufunc`。ufunc练习包括数组的平方、平方根、元素积及性能对比。
69 0
|
6月前
|
存储 Python
如何使用Pandas库对非数值型数据进行排序和排名?
在Pandas中,非数值型数据如字符串、日期和自定义类别也可排序。使用`sort_values()`对字符串列进行升序或降序排序,如`df.sort_values(by='Name', ascending=False)`。日期数据先用`pd.to_datetime()`转换,再排序。自定义排序可通过`argsort()`结合映射规则实现,例如根据预定义类别顺序排序。
90 7
PIE-engine 教程 ——NDVI和FVC计算时序分析以2013年-2020年福州市为例
PIE-engine 教程 ——NDVI和FVC计算时序分析以2013年-2020年福州市为例
625 0
PIE-engine 教程 ——NDVI和FVC计算时序分析以2013年-2020年福州市为例
|
数据挖掘 索引 Python
【Python】数据分析:numpy文本数据读取+索引切片
【Python】数据分析:numpy文本数据读取+索引切片
63 0
|
存储 编解码 定位技术
GIS开发:tianditu切片计算
GIS开发:tianditu切片计算
232 0
|
数据可视化 数据挖掘 数据处理
数据导入与预处理-拓展-pandas时间数据处理03(上)
数据导入与预处理-拓展-pandas时间数据处理03 Pandas时序数据系列博客 1. 时间序列数据 1. 1 时间序列概述
数据导入与预处理-拓展-pandas时间数据处理03(上)