还可以输出为GeoJson、GeoPackage等地理空间文件类型。按照地区人口数量给世界地图着色:如果想让世界地图按照每个地区的人口数量上色,可以这样操作:代码如下:实际上非常简单,只需要在world.plot(column='pop_est', ax=ax, legend=True)中添加分类参数column,分类标准为人口列:pop_est。你还可以改变...
geopandas,用python分析地理空间数据原来这么简单!
Python中pandas库大家应该都很熟悉,它主要用来进行数据整理和分析。今天要介绍的是pandas的一个“亲戚”——geopandas。
geopandas是一个专门用于处理地理空间数据的Python第三方库,它基于pandas构建,完美地融合了pandas的数据类型,并提供了一系列操作地理空间数据的高级接口,使得在Python中进行GIS操作成为可能。
我们【Python大数据分析】公众号还编写了一本关于GeoPandas的电子书教程,是国内第一本详细的教程。感兴趣的朋友可以关注公众号,回复“geo”下载。
举个例子,我们在Python中如何显示世界地图?
当然,除了平面效果,你还可以做出这样的效果:
还可以给地图上色:
现在,让我们正式讲解geopandas的工作原理。
geopandas继承了pandas的数据类型,所以它也有两种数据类型:GeoSeries和GeoDataFrame。
它们继承了pandas数据结构的大部分方法,可以被视为地理空间数据的存储器,类似于shapefile文件的pandas表示。
Shapefile文件用于描述几何体对象,如点、折线和多边形。例如,Shapefile文件可以存储井、河流、湖泊等空间对象的几何位置。除了几何位置,shp文件还可以存储这些空间对象的属性,例如一条河流的名字,一个城市的温度等。
下面稍作解释:
解析一下前面例子中的完整代码:
对于这一行:
geopandas的read_file方法可以读取shape文件,并将其转换为GeoSeries和GeoDataFrame数据类型。
而geopandas.datasets.get_path('naturalearth_lowres')则是从geopandas自带的数据集中获取世界地图的shapefile文件。
你也可以使用read_file方法读取自己的shapefile文件。
因此,world变量被赋予了GeoDataFrame数据类型,它如下所示:
这个数据列中不仅包含几何列geometry,还包含其他属性列,如人口pop_est、大洲continent、地区名字name等。
world.plot()将GeoDataFrame转换为图形展示,得到世界地图:
如果只想显示每个地区的中心点,可以这样操作:
代码如下:
world.centroid返回一个GeoSeries,其中包含每个地区的中心点空间数据。
.set_geometry函数将新增列设置为几何列,这样就会按照新的几何列显示地图。
GeoDataFrame的输出格式:前面提到将shapefile读成GeoDataFrame格式,反过来你也可以将GeoDataFrame格式输出为shapefile文件。
比如前面的world:
还可以输出为GeoJson、GeoPackage等地理空间文件类型。
按照地区人口数量给世界地图着色:如果想让世界地图按照每个地区的人口数量上色,可以这样操作:
代码如下:
实际上非常简单,只需要在world.plot(column='pop_est', ax=ax, legend=True)中添加分类参数column,分类标准为人口列:pop_est。
你还可以改变颜色系:
总结:geopandas是一个非常实用的地理空间处理工具,它很好地结合了pandas的功能,让你轻松探索空间数据,在Python上快速、批量进行GIS操作。
geopandas还有很多功能等待爱好者去探索,这里就不一一介绍了,大家可以去官网学习。
最后展示一些官网案例:2024-09-03