5个用于地理空间数据分析的Python包

5 Python packages for geospatial data analysis

简介

地理空间数据分析在城市规划、环境研究、农业和交通行业中至关重要。不断增长的需求导致Python包在各种地理数据分析需求中的使用增加,例如分析气候模式、调查城市发展或跟踪疾病传播等。评估和选择具有快速处理、修改和可视化能力的正确工具对于有效分析和可视化地理空间数据至关重要。

理解地理空间数据

首先要理解地理空间数据是什么。地理空间数据是具有地理或地理组成的数据,表示地球表面上对象、特征或事件的位置和特性。它描述了物理宇宙中各种物品的空间连接、分布和属性。地理空间数据主要有两种类型:

  • 栅格数据:适用于没有固定边界的连续信息,以表示具有值表示观察特征的单元格网格。通常以规律间隔进行监测,并插值生成连续表面。
  • 矢量数据:使用点、线和多边形表示空间属性,包括兴趣点、交通网络、行政边界和土地包裹,常用于具有精确位置或硬约束的离散数据。

地理空间数据可以以各种格式存储,例如:

  • ESRI Shapefile
  • GeoJSON
  • Erdas Imagine Image File Format (EIF)
  • GeoTIFF、Geopackage (GPKG)
  • GeoJSON、轻测距(LiDAR)等等。

地理空间数据包括卫星图像、高程模型、点云、土地利用分类和基于文本的信息等各种类型,为各行业的空间分析和决策提供了有价值的见解。微软、谷歌、Esri和亚马逊网络服务等大型公司都利用地理空间数据获得有价值的见解。让我们来探索用于地理空间数据分析的前五个Python包。这些包可以进行数据读写、操作、可视化、地理编码和地理索引,适用于初学者和有经验的用户。了解这些包如何有效地从地理空间数据中进行探索、可视化和提取见解。让我们开始吧!

1. Geopandas

适用于:矢量数据

Geopandas是一个广泛使用的Python库,用于处理矢量地理空间数据,在Pandas DataFrames中提供直观的地理数据处理。它支持Shapefile和GeoJSON等格式,并提供合并、分组和空间连接等空间操作。Geopandas与流行的库如Pandas、NumPy和Matplotlib无缝集成。它可以处理大型数据集,但这可能带来挑战。Geopandas包通常用于空间数据分析任务,包括空间连接、查询和缓冲区和交叉分析等地理空间操作。Geopandas需要使用Shapely等不同的包来处理几何操作,Fiona来访问文件,以及matplotlib用于绘图。

例如,Geopandas可以用于探索房地产数据,以识别城市中最昂贵的社区,或分析人口数据以可视化不同社区的增长和迁移模式。

我们可以使用pip来安装该包:

pip install geopandas

使用GeoPandas绘图

让我们查看下面显示的内置地图:

import geopandas 
# 检查可用的地图
geopandas.datasets.available

我们将使用Geopandas加载世界地图的数据集,并提取美国的shapefile,并使用以下代码将其绘制在图表上:

# 选择特定地图
geopandas.datasets.get_path('naturalearth_lowres')
# 打开所选地图 - GeoDataFrame
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))
# 创建GeoDataFrame的子集
usa = world[world.name == "United States of America"]
# 绘制子集
usa.plot();

 

上面的代码打印了一个子数据帧的地图:

 

 

2. Folium

 

适用于:点云

Folium是一个用于创建具有标记、弹出窗口、等值线图和其他地理可视化的Python库。它与Leaflet JavaScript库集成,并允许导出地图到HTML。它可以与Geopandas和Cartopy结合使用,并使用地图瓦片处理大型数据集。Folium在简洁性、美观性和与其他地理空间库的集成方面表现出色。然而,对于高级地理空间分析和操作,Folium可能存在一些限制。

例如,Folium可以用于供应链和物流,用于可视化分销网络、优化路线和监控货物位置。

我们可以使用以下命令安装Folium:

pip install folium

 

使用Folium绘图

 

让我们使用以下代码在[0, 0]处放置一个标记的样本交互地图:

import folium
# 生成一个以坐标(0, 0)为中心的Folium地图
map = folium.Map(location=[0, 0], zoom_start=2)
# 定位坐标0, 0
folium.Marker([0, 0]).add_to(map)
# 显示地图
map

 

 

可以根据特定的地理空间数据进一步自定义此地图,例如添加标记、图层或样式选项。

 

3. ipyleaflet

 

适用于:点云、交互式

ipyleaflet包能够在Python中轻松创建交互式地图,特别是在Jupyter笔记本中,允许用户生成和共享具有不同底图、标记和其他地理空间操作的交互式地图。ipyleaflet基于leaflet JavaScript库,支持GeoJSON和WMS图层、CSS和JavaScript样式以及地理空间计算。尽管ipyleaflet在交互式小部件方面表现出色,但由于其依赖于JavaScript,它可能不适合纯Python项目。

例如,ipyleaflet可以应用于环境监测,用于可视化传感器数据、监测空气质量和实时评估环境变化。

要安装ipyleaflet,我们使用pip命令:

pip install ipyleaflet

 

使用ipyleaflet绘图

 

让我们使用以下代码创建一个交互式地图,其中一个标记放置在坐标(40.7128, -74.0060)表示纽约市的一个兴趣点:

from ipyleaflet import Map, Marker
# 创建地图
m = Map(center=(40.7128, -74.0060), zoom=12)
# 添加标记
marker = Marker(location=(40.7128, -74.0060))
m.add_layer(marker)

 

以下是代码的输出:

 

 

4. Rasterio

 

适用于:栅格数据

Rasterio是一个强大的Python库,用于处理地理空间栅格数据,具有高效的性能和广泛的操作,如裁剪、投影转换和重采样。它支持各种栅格格式,并与其他地理空间库很好地集成,尽管在处理矢量数据和复杂分析任务方面有一些限制。然而,Rasterio是Python中高效的栅格数据处理和处理的重要工具。

例如,rasterio可以用于读取和写入卫星图像,进行地形分析,从数字高程模型中提取数据以及进行遥感分析等任务。

!pip install rasterio

rasterio.open()函数打开文件,read()方法将图像读取为numpy数组。最后,使用Matplotlib的plt.imshow()函数显示图像,plt.show()在输出中显示绘图。

使用rasterio绘图

import rasterio
from rasterio.plot import show

我们使用rasterio库打开和可视化来自kaggle数据集“高分辨率气象数据的GeoTIFF图像”的’sample.tif’文件中的栅格图像,将红色通道(图像中的一种颜色通道)作为子图使用Reds色图显示,将原始图像(包含多个颜色通道)作为另一个子图使用viridis色图显示。也可以使用这种方法来可视化其他颜色通道,如绿色和蓝色。

src = rasterio.open('/content/sample.tif')
plt.figure(figsize=(15,10))
fig, (axr, axg) = plt.subplots(1,2, figsize=(15,7))
show((src, 1), ax=axr, cmap='Reds', title='红色通道')
show((src), ax=axg, cmap='viridis', title='原始图像')
plt.show()

 

在地理空间分析中,分析特定的颜色通道(如红色、蓝色和绿色)是为了关注或提取与图像中的这些颜色分量相关的特定属性、特征或特性的有价值信息。例如,遥感中的植被健康状况、植被指数或水体等。

5. Geoplot

适用于:矢量数据,交互式

Geoplot是一个用户友好的Python库,可快速创建具有视觉吸引力的地理空间可视化,包括分级色彩地图和散点图。它与流行的数据操作库如Pandas无缝集成,并支持多个地图投影。然而,Geoplot在交互式地图支持和绘图类型范围方面存在一些限制,但它仍然对快速地理空间数据可视化和对空间模式的洞察力具有价值。

!pip install geoplot

使用geoplot绘图

我们将使用Geoplot绘制分级色彩地图可视化,从一个世界shapefile中选择亚洲国家(基于“continent”属性),根据“pop_est”属性分配颜色强度,并使用“icefire”色图以10乘5的图形大小绘制地图。

import geoplot
#绘制亚洲的人口图
asia = world.query("continent == 'Asia'")
geoplot.choropleth(asia, hue = "pop_est", cmap = "icefire",legend=True, figsize = (10, 5));

 

例如,geoplot包可以创建分级色彩地图以可视化人口密度,绘制犯罪事件的空间模式,显示环境因素的分布以及根据地理数据分析疾病的传播情况。

结论

总之,地理空间Python包有助于有效地分析基于位置的信息。讨论的每个包都有其优势和劣势,但它们在处理地理空间数据时可以形成一个强大的Python工具套件。因此,对于初学者或经验丰富的GIS专业人员来说,这些包在以新的和创新的方式分析、可视化和操作地理空间数据方面都是有价值的。

您可以在我的GitHub存储库上找到本文的代码。

如果您发现这篇文章有洞见,请在LinkedIn和Twitter上与我联系。记得关注我的Kaggle,那里您可以访问我的机器学习和深度学习项目、笔记本和迷人的数据可视化。Devashree Madhugiri拥有德国的信息技术硕士学位,并具有数据科学背景。她喜欢在不同的机器学习和深度学习项目上工作。她通过在各种技术平台上撰写与数据可视化、机器学习、计算机视觉相关的技术文章来分享她在人工智能方面的知识。她目前是Kaggle笔记本大师,并喜欢在闲暇时间解数独谜题。