本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes

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反而要慢一些,因为徒增了额外的分块调度消耗。

  除了上述的内容外,dask-geopandas还有一些实验性质的功能,如基于地理空间分布的spatial_partitions数据分块策略优化等,待它们稳定之后我会另外发文为大家介绍。


  以上就是本文的全部内容,欢迎在评论区与我进行讨论~

(数据科学学习手札150)基于dask对geopandas进行并行加速的更多相关文章

  1. (数据科学学习手札140)详解geopandas中基于pyogrio的矢量读写引擎

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,前不久我在一篇文章中给大家分享 ...

  2. (数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)

    一.简介 接着几个月之前的(数据科学学习手札31)基于Python的网络数据采集(初级篇),在那篇文章中,我们介绍了关于网络爬虫的基础知识(基本的请求库,基本的解析库,CSS,正则表达式等),在那篇文 ...

  3. (数据科学学习手札47)基于Python的网络数据采集实战(2)

    一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集 ...

  4. (数据科学学习手札75)基于geopandas的空间数据分析——坐标参考系篇

    本文对应代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一篇文章中我们对geopandas中的数据结 ...

  5. (数据科学学习手札44)在Keras中训练多层感知机

    一.简介 Keras是有着自主的一套前端控制语法,后端基于tensorflow和theano的深度学习框架,因为其搭建神经网络简单快捷明了的语法风格,可以帮助使用者更快捷的搭建自己的神经网络,堪称深度 ...

  6. (数据科学学习手札42)folium进阶内容介绍

    一.简介 在上一篇(数据科学学习手札41)中我们了解了folium的基础内容,实际上folium在地理信息可视化上的真正过人之处在于其绘制图像的高度可定制化上,本文就将基于folium官方文档中的一些 ...

  7. (数据科学学习手札40)tensorflow实现LSTM时间序列预测

    一.简介 上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在实际时间序列预测任务中搭建模型来完 ...

  8. (数据科学学习手札32)Python中re模块的详细介绍

    一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...

  9. (数据科学学习手札69)详解pandas中的map、apply、applymap、groupby、agg

    *从本篇开始所有文章的数据和代码都已上传至我的github仓库:https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 pandas提供了很多方 ...

  10. (数据科学学习手札61)xpath进阶用法

    一.简介 xpath作为对网页.对xml文件进行定位的工具,速度快,语法简洁明了,在网络爬虫解析内容的过程中起到很大的作用,除了xpath的基础用法之外(可参考我之前写的(数据科学学习手札50)基于P ...

随机推荐

  1. java jdk8安装之后java -version失败

    将此目录下的(C:\Program Files (x86)\Common Files\Oracle\Java\javapath_target_86850671)三个.exe文件删除即可!

  2. eureka注册中心增加登录认证

    https://www.cnblogs.com/gxloong/p/12364523.html 开启Eureka注册中心认证   1.目的描述 Eureka自带了一个Web的管理页面,方便我们查询注册 ...

  3. scala流程控制

    1.分支控制if-else 分支控制有三种:单分支.双分支.多分支: 1.1 单分支 (1).语法入下: if(条件表达式){ 执行代码块       //当条件表达式为true时,才会执行代码块内容 ...

  4. [自用初学]c++的构造函数

    #include <stdio.h> #include <string.h> class Student { private: int id; char name[32]; p ...

  5. java 操作excel

    需要引入的包 import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.HorizontalAlignmen ...

  6. windows 10 的VMware workstation Pro突然变成英文界面

    电脑的VMware虚拟机界面是中文版的,后来在捣弄些电脑配置,突然变成英文版界面了. 后面发现原来是区域格式选错了:正确的格式是下图红框

  7. md5信息摘要算法实现(python 和 go版本)

    纯手写实现的md5信息摘要算法 github地址如下 https://github.com/kittysmith5/dgst/blob/main/md5 python3版本代码 #!/usr/bin/ ...

  8. 如何在微信小程序中使用ECharts图表

    在微信小程序中使用ECharts 1. 下载插件 首先,下载 GitHub 上的 ecomfe/echarts-for-weixin 项目. 下载链接:ecomfe/echarts-for-weixi ...

  9. ESP32(WeMos D1 R32)开发资料

    1.乐鑫官网 2.ESP32踩坑 ESP32控制摇杆,定义sw的引脚时一定要设置为上拉才行. 3.ESP32入门之arduino IDE环境搭建 4.ESP32 MicroPython编程官网文档 E ...

  10. 禁止的回文子串 Dyslexic Gollum

    UVA1633 一个长的回文串都可以由短的回文串拓展而来,只要短的回文在左右两端增加相同的字符即可.因此,在考虑长度为NNN的01串时,只要在从长度为1向NNN拓展的过程中,保证后KKK个字符不是回文 ...