首页 文章详情

Python高性能空间数据计算包:PyGEOS在Geopandas中的使用

Python大数据分析 | 859 2021-04-20 01:57 0 0 0
UniSMS (合一短信)
前文再续,书接上一回。

上文说到geopandas可以使用PyGEOS做为空间计算引擎,而且给大家看了一下在空间索引的能力下能够提速的能力,今天我们来看看PyGEOS在GeoPandas里面的表现

——好吧,下面所有的语法和用法,与PyGEOS就没啥关系,因为所有的计算都是geopandas的内容了。

(谁叫geopandas的DataFrame模式在编码的时候这么好用呢……
同理,pandas用的Numpy为底层,但是写起来的时候,还是没有任何numpy的内容在里面)

如下所示,我们先来看看不启用PyGEOS情况下geopandas的表现:


用一个面对10万个点,耗时6.1秒。
下面我们来看看启用PyGEOS的情况下,同样的10万个点:


耗时939毫秒,速度提升了6倍多。

有同学问,上一篇文章里面用PyGEOS的空间索引,能够更有效的提升空间计算的效率,那么这里可以不可以呢?

那答案自然是莫得问题:


下面我们来看看不同计算引擎下面使用空间索引的计算能力:
在不使用PyGEOS的情况下,使用10万条数据,使用空间索引之后的耗时是427毫秒,对比前面的6.1秒,提升了14倍


我们换成PyGEOS的空间索引来试试:

耗时37.9毫秒,比不用空间索引提升了24倍。


下面我弄个大点的数据看看,比如100万:
首先看看不使用PyGEOS情况下的速度:

耗时为4.08秒

然后我们来看看使用PyGEOS情况下的速度:
耗时为392ms,也就是不到0.4秒,效果还是非常可观的。

在空间索引做100万数据包含查询的情况下,使用PyGEOS做为空间计算引擎,比传统计算引擎要快10倍左右,可以预见,随着数据量越大,效果也自然就越好。

如果我们与上一篇文章来对比一下,就会发现,在geopandas里面做空间索引之后去计算,比单纯用PyGEOS做空间索引之后去计算要快很很多,这是上篇文章里面的测试:


同样是100万点包含,单纯用PyGEOS需要1.36秒,而在geopandas里面只需要0.39秒,快了差不多4倍。
原因就是单纯用PyGEOS,点数据的组织是list模式,而不管是Python里面的list还是C语言里面的数组,模式本身就是一种非结构化的数据结构。而geopandas里面的DataFrame,是一种结构化的组织形式,所以更快是很正常的。

加入知识星球【我们谈论数据科学】

400+小伙伴一起学习!








· 推荐阅读 ·

用Python轻松开发数据库取数下载工具

关于pip的15个使用小技巧

秀啊,用Python快速开发在线数据库更新修改工具


good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter