4

(数据科学学习手札139)geopandas 0.11版本重要新特性一览 - 费弗里

 1 year ago
source link: https://www.cnblogs.com/feffery/p/16410796.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

  大家好我是费老师,就在几天前,geopandas发布了其0.11.0正式版本,距离其上一个版本(0.10.2)发布已过去大半年,在这一次的新版本更新中又为我们带来了哪些重要的新特性呢,今天的文章中我就来带大家一探究竟😋。

1344061-20220625093327776-1309769198.svg

2 geopandas 0.11版本重要新特性一览

  你可以在旧版本geopandas的基础上进行升级,也可以新建虚拟环境直接安装0.11.0版本,本着谨慎尝鲜的原则,我们可以使用下面的命令一口气完成新虚拟环境的创建、geopandas及其相关依赖的安装,并安装上jupyterlab作为IDE进行演示:

conda create -n geopandas-env python=3.8 -c https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/main -y
conda activate geopandas-env
conda install geopandas=0.11.0 pygeos pyogrio -c conda-forge -y
pip install jupyterlab -i https://pypi.douban.com/simple/

  终端里执行下列命令验证一下是否已正确安装:

python -c "import geopandas as gpd;print(gpd.__version__)"

1344061-20220625093330694-113201484.png

  一切准备就绪,下面我们来一览此次更新中比较重要的几个特性:

2.1 更快的矢量文件读写#

  新版本中为read_file()to_file()引入了参数engine用于指定读写常见矢量文件基于的引擎,默认为原先的'fiona',可选'pyogrio',这是由geopandas开发团队维护的另一个库,可大幅度提升对常见矢量文件格式如shapefile的读写速度,以读取具有数百万个多边形的广州市全量建筑物轮廓数据为例,新的IO引擎带来近5倍的读取性能提升:

1344061-20220625093333602-362369862.png

  以及同样接近5倍的写出性能提升:

1344061-20220625093337574-1730044119.png

2.2 新增高性能矩形裁切方法clip_by_rect()#

  0.11中新增针对GeoSeriesGeoDataFrame的方法clip_by_rect(minx, miny, maxx, maxy),可传入目标矩形坐标范围,快速裁切出矩形范围内的矢量,譬如我们基于前面已经读入的广州市建筑物轮廓数据,通过下面的函数随机生成边长10000米的矩形范围作为裁切素材:

import numpy as np
import matplotlib.pyplot as plt
from shapely.geometry import box

# 计算得到目标GeoDataFrame范围
minx, miny, maxx, maxy = gdf.total_bounds

def generate_random_rectangle(minx, miny, maxx, maxy):
    '''
    研究范围内随机取得100000米边长矩形
    '''
    
    random_rectangle = [
        np.random.uniform(minx, maxx - 10000),
        np.random.uniform(miny, maxy - 10000)
    ]

    return [
        *random_rectangle,
        random_rectangle[0] + 10000,
        random_rectangle[1] + 10000,
    ]

  调用clip_by_rect()

1344061-20220625093340587-1850314173.png

  返回的结果与原始矢量记录数量一致,其中呈现GEOMETRYCOLLECTION EMPTY的记录说明其与目标矩形没有交集,我们利用is_empty来反向筛选出发生裁切的矢量记录:

1344061-20220625093343556-1464039266.png

  除此之外,你还可以直接将[minx, miny, maxx, maxy]格式的输入传入经典的clip()裁切方法中,它会在底层直接调用clip_by_rect()并自动返回有效矢量裁切结果:

1344061-20220625093346944-1968251242.png

2.3 正确读写GIS文件中的日期时间字段#

  从0.11.0版本开始,geopandas在面对日期时间型字段时,无论是写出到GIS文件还是从GIS文件读入,都可以保证正确解析为日期时间型:

1344061-20220625093348990-443169631.png

  你可以在https://github.com/geopandas/geopandas/releases/tag/v0.11.0查看完整的版本更新说明,总体而言,这次新版本更新带来的重要更新并不太多,但都颇为实用,你可以在自己的数据上使用一番。


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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK