- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
本文示例代码已上传至我的 Github 仓库 https://github.com/CNFeffery/DataScienceStudyNotes 。
大家好我是费老师, geopandas 作为我们非常熟悉的 Python GIS 利器,兼顾着高性能和易用性,特别是在其 0.12.0 版本开始使用全新的 shapely 2.0矢量计算后端后,性能表现更是一路狂飙.
而我们作为使用者,当然是希望 geopandas 处理分析矢量数据越快越好。在今天的文章中,我将为大家简要介绍如何基于 dask 对 geopandas 进一步提速,从而更从容的应对更大规模的 GIS 分析计算任务.
很多朋友应该听说过 dask ,它是 Python 生态里非常知名的高性能计算框架,可以针对大型数组、数据框及机器学习模型进行并行计算调度优化,而 dask-geopandas 就是由 geopandas 团队研发的,基于 dask 对 GeoDataFrame 进行并行计算优化的框架,本质上是对 dask 和 geopandas 的封装整合.
dask-geopandas 的安装非常简单,在已经安装了 geopandas 的虚拟环境中,执行下列命令即可:
conda install dask-geopandas -c conda-forge -y
dask-geopandas 与 geopandas 的常用计算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() ,从而真正执行前面编排好的运算逻辑,以非矢量和矢量运算分别为例:
既然使用了 dask-geopandas 就是奔着其针对大型数据集的计算优化而去的,我们来比较一下其与原生 geopandas 在常见 GIS 计算任务下的性能表现,可以看到,在与 geopandas 的计算比较中, dask-geopandas 取得了约3倍的计算性能提升,且这种提升幅度会随着数据集规模的增加而愈发明显,因为 dask 可以很好的处理内存紧张时的计算优化:
当然,这并不代表我们可以在任何场景下用 dask-geopandas 代替 geopandas ,在常规的中小型数据集上 dask-geopandas 反而要慢一些,因为徒增了额外的分块调度消耗.
除了上述的内容外, dask-geopandas 还有一些实验性质的功能,如基于地理空间分布的 spatial_partitions 数据分块策略优化等,待它们稳定之后我会另外发文为大家介绍😉.
以上就是本文的全部内容,欢迎在评论区与我进行讨论~ 。
。
最后此篇关于(数据科学学习手札150)基于dask对geopandas进行并行加速的文章就讲到这里了,如果你想了解更多关于(数据科学学习手札150)基于dask对geopandas进行并行加速的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
介绍篇 什么是MiniApis? MiniApis的特点和优势 MiniApis的应用场景 环境搭建 系统要求 安装MiniApis 配置开发环境 基础概念 MiniApis架构概述
我正在从“JavaScript 圣经”一书中学习 javascript,但我遇到了一些困难。我试图理解这段代码: function checkIt(evt) { evt = (evt) ? e
package com.fastone.www.javademo.stringintern; /** * * String.intern()是一个Native方法, * 它的作用是:如果字
您会推荐哪些资源来学习 AppleScript。我使用具有 Objective-C 背景的传统 C/C++。 我也在寻找有关如何更好地开发和从脚本编辑器获取更快文档的技巧。示例提示是“查找要编写脚本的
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
关闭。这个问题不符合 Stack Overflow guidelines 。它目前不接受答案。 想改善这个问题吗?更新问题,以便堆栈溢出为 on-topic。 6年前关闭。 Improve this
我是塞内加尔的阿里。我今年60岁(也许这是我真正的问题-笑脸!!!)。 我正在学习Flutter和Dart。今天,我想使用给定数据模型的列表(它的名称是Mortalite,请参见下面的代码)。 我尝试
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
学习 Cappuccino 的最佳来源是什么?我从事“传统”网络开发,但我对这个新框架非常感兴趣。请注意,我对 Objective-C 毫无了解。 最佳答案 如上所述,该网站是一个好地方,但还有一些其
我正在学习如何使用 hashMap,有人可以检查我编写的这段代码并告诉我它是否正确吗?这个想法是有一个在公司工作的员工列表,我想从 hashMap 添加和删除员工。 public class Staf
我正在尝试将 jQuery 与 CoffeScript 一起使用。我按照博客中的说明操作,指示使用 $ -> 或 jQuery -> 而不是 .ready() 。我玩了一下代码,但我似乎无法理解我出错
还在学习,还有很多问题,所以这里有一些。我正在进行 javascript -> PHP 转换,并希望确保这些做法是正确的。是$dailyparams->$calories = $calories;一条
我目前正在学习 SQL,以便从我们的 Magento 数据库制作一个简单的 RFM 报告,我目前可以通过导出两个查询并将它们粘贴到 Excel 模板中来完成此操作,我想摆脱 Excel 模板。 我认为
我知道我很可能会因为这个问题而受到抨击,但没有人问,我求助于你。这是否是一个正确的 javascript > php 转换 - 在我开始不良做法之前,我想知道这是否是解决此问题的正确方法。 JavaS
除了 Ruby-Doc 之外,哪些来源最适合获取一些示例和教程,尤其是关于 Ruby 中的 Tk/Tile?我发现自己更正常了 http://www.tutorialspoint.com/ruby/r
我只在第一次收到警告。这正常吗? >>> cv=LassoCV(cv=10).fit(x,y) C:\Python27\lib\site-packages\scikit_learn-0.14.1-py
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
我是一名优秀的程序员,十分优秀!