首页软件基础教程GeoPandas【GeoPandas空间数...

【GeoPandas空间数据分析】14.聚合操作(Aggregation with dissolve)


本系列文章是根据GeoPandas官方文档翻译整理,学习任何一个Python第三方库,其官方文档都是最好的学习资料。相比网络搜索得到的一些资料,官方文档是权威的一手资料,其内容全面、准确可靠。通过官方文档入手,能够保证学习认知不会有大偏差。在学习完官方文档后,可以在寻找其他资料进一步学习。

点击“阅读原文”或者直接访问下方链接,查看翻译整理的“GeoPandas 0.12.2 中文文档”。

https://www.mizhushare.com/docs
本系列文章配套代码获取有以下两种途径:
  • 可以通过百度网盘获取,需要在本地配置代码运行环境:
链接:https://pan.baidu.com/s/185Qs6RpVhyP2nm9VV39Ehw?pwd=mnsj 提取码:mnsj
  • 前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/geopandas




在非空间环境中,我们使用 groupby() 函数聚合数据。

但是对于空间数据,我们有时也需要聚合几何特征。例如,我们可能有地方行政单位的数据,但实际上我们对研究国家层面的内容更感兴趣。

geopandas 中,我们可以使用 dissolve() 函数聚合几何特征。

dissolve()可以被认为是在做三件事:

将给定组中的所有几何图形合并为单个几何对象(使用unary_union方法),然后使用 groupby.aggregate 聚合组中的所有数据行,最后将这两个结果结合起来。

1GeoDataFrame.dissolve(by=None
2                      aggfunc='first'
3                      as_index=True
4                      level=None
5                      sort=True
6                      observed=False
7                      dropna=True )
01

简单示例


本次仍以GeoPandas自带的world数据集为例。

1world = gpd.read_file('./datasets/naturalearth_lowres/naturalearth_lowres.shp')
2
3world = world[['continent', 'geometry']]
4
5world.plot(cmap="tab10")

通过 dissolve() 将其转换为大陆级别的数据集:

1continents = world.dissolve(by='continent')
2
3continents.plot(cmap="tab10")

02

aggfunc参数


dissolve() 中aggfunc参数默认为“first”,这意味着在聚合操作中找到的第一行属性值将分配给生成的geodataframe。然而,它也接受pandas.groupby 允许的其他汇总统计选项,包括:

  • ‘first’

  • ‘last’

  • ‘min’

  • ‘max’

  • ‘sum’

  • ‘mean’

  • ‘median’

  • function

  • string function name

  • list of functions and/or function names, e.g. [np.sum, ‘mean’]

  • dict of axis labels -> functions, function names or list of such.

  • 聚合单列:
如果我们对聚集的人口感兴趣,我们可以使用aggfunc参数向dissolve()方法传递不同的函数以聚集人口。
1continents = world.dissolve(by='continent', aggfunc='sum')
2
3continents.plot(column = 'pop_est', scheme='quantiles', cmap='YlOrRd')

  •  聚合多列或对一列采用多种聚合方法:

例如,为了得到各大洲的国家数量,以及各大洲最大和最小的国家的人口,我们可以用’count’聚合’name’列,用’min’’max’聚合’pop_est’列。
1world = gpd.read_file('./datasets/naturalearth_lowres/naturalearth_lowres.shp')
2
3continents = world.dissolve(by='continent' , aggfunc={"name":"count" , "pop_est":["min" , "max"]})


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments