利用 Python 中的地理空间数据与 GeoPandas

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
实时数仓Hologres,5000CU*H 100GB 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 空间数据由与位置关联的记录组成。这些数据可以来自 GPS 轨迹、地球观测图像和地图。每个空间数据点都可以使用坐标参考系统(如纬度/经度对)精确地放置在地图上,以便在地图上精确放置,这使我们能够研究它们之间的关系。
推荐:使用 NSDT编辑器快速搭建3D应用场景

空间数据的真正潜力在于它能够连接数据点及其各自的位置,为高级分析创造无限的可能性。地理空间数据科学是数据科学中的一个新兴领域,旨在利用地理空间信息并通过空间算法和机器学习或深度学习等先进技术提取有价值的见解,以得出有关已发生的事件及其原因的有意义的结论。地理空间数据科学让我们深入了解事件发生的位置以及发生的原因。

GeoPandas是一个开源的Python软件包,专门用于处理信息。它通过提供对几何对象的空间操作来扩展pandas的数据类型数组 - 这有助于使用pandas的数据操作工具pandas在Python中进行空间分析。由于GeoPandas是基于Pandas构建的,它为熟悉Python语法的专业人士提供了一条快速熟悉GeoPandas语法的简单途径。

image.png

1. 安装GeoPandas

我们必须安装 GeoPandas 软件包才能使用它。但是,重要的是要注意GeoPandas依赖于必须安装的其他库才能毫无问题地使用它。这些依赖项是 shapelyFionapyprojrtree。

有两种方法可以下载GeoPandas软件包。首先,您可以使用 conda 来安装 GeoPandas conda 软件包。建议使用此方法,因为它将提供GeoPandas的依赖项,而无需自行安装它们。您可以运行以下命令来安装 GeoPandas:

conda install geopandas

第二种方法是使用 pip,它是 Python 中的标准包安装程序。但是,使用此方法将需要安装其余提到的依赖项。

pip install geopandas

安装 GeoPandas 包后,您可以使用以下命令将其导入到 Python 代码中:

import geopandas as gpd

2. 读取和写入空间数据

GeoPandas用于读取空间数据并将其转换为GeoDataFrame。但是,请务必注意,有两种主要类型的空间数据:

  • 矢量数据:矢量数据使用以下术语点、线和面,使用离散几何描述地球位置的地理要素。
  • 栅格数据:栅格数据将世界编码为由格网表示的表面。此网格的每个像素都由连续值或分类类表示。

GeoPandas主要处理矢量数据。但是,它可以与其他 Python 包结合使用来处理栅格数据,例如栅格数据。 您可以使用强大的 geopandas.read_file() 函数来读取大多数基于矢量的空间数据。基于矢量的部分数据有两种主要数据类型:

  • 形状文件: Shapfile 是最常见的数据格式,被认为是行业级数据类型。它由三个压缩文件组成,通常作为zip文件提供:

这。shp 文件:此文件包含形状几何图形。

.dbf文件:此文件包含每个几何的属性,

.shx 文件:这是形状索引文件,可帮助将属性链接到形状。

  • GeoJSON: 这是 2016 年发布的地理空间数据的新文件格式。由于它仅包含一个文件,因此与 Shapefile 相比,它更容易使用。

在本文中,我们将使用 geopandas.read_file() 函数读取托管在 GitHub 中的 GeoJSON 文件,其中包含有关巴塞罗那市不同地区的地理空间数据。

让我们首先加载数据并使用下面的代码打印其中的前五列:

url = 'https://raw.githubusercontent.com/jcanalesluna/bcn-geodata/master/districtes/districtes.geojson'
districts = gpd.read_file(url)
districts.head()

image.png


接下来,要将数据写入文件,我们可以默认使用 GeoDataFrame.to_file() 函数将数据写入 Shapefile,但您可以使用驱动程序参数将其转换为 GeoJSON

districts.to_file("districts.geojson", driver="GeoJSON")

3. 地理数据帧属性

由于GeoDataFrames是pandas DataFrame的子类,因此它继承了许多属性。但是,存在一些差异,主要区别在于它可以存储几何列(也称为GeoSeries)并执行空间操作。GeoDataFrame 中的几何列可以包含各种类型的矢量数据,包括点、线和面。但是,只有一列被视为活动几何,并且所有空间操作都将基于该列。

它的另一个关键特征是,每列都带有相关的CRS信息,告诉我们候选人在地球上的位置。此功能至关重要的原因是,如果您需要组合两个空间数据集,则需要确保它们以相同的 CRS 表示,否则将得到错误的结果。CRS信息存储在GeoPandas的crs属性中:

districts.crs

image.png

现在我们已经设置了正确的投影 CRS,我们准备探索地理数据帧的属性。

4. 探索地理数据帧

GeoPandas 有四种有用的方法和属性可用于浏览数据。我们将探讨这四种方法:

  • 面积
  • 质心
  • 边界
  • 距离

4.1. 面积

面积属性返回几何图形的计算面积。在下面的示例中,我们将以 km2 为单位计算每个区的面积。

districts['area'] = districts.area / 1000000
districts['area']

image.png

4.2. 质心

第二个属性是回心,它返回几何图形的中心点。在下面的代码片段中,我们将添加一个新列并保存每个地区的质心:

districts['centroid']=districts.centroid
districts['centroid']

image.png

4.3. 边界

第三种方法是边界属性,用于计算每个地区的面边界。下面的代码返回它并将其保存到单独的列中:

districts['boundary']=districts.boundary

image.png

4.4. 距离

距离法计算从特定几何到特定位置的最小距离。因此,例如在下面的代码中,我们将计算从圣家堂到巴塞罗那每个地区的质心的距离。之后,我们将以 km2 为单位添加距离并将其保存在新列中。

from shapely.geometry import Point
sagrada_fam = Point(2.1743680500855005, 41.403656946781304)
sagrada_fam = gpd.GeoSeries(sagrada_fam, crs=4326)
sagrada_fam= sagrada_fam.to_crs(epsg=2062)
districts['sagrada_fam_dist'] = [float(sagrada_fam.distance(centroid)) / 1000 for centroid in districts.centroid]

image.png

5. 用GeoPandas绘制数据

绘制和可视化数据是更好地了解数据的关键步骤。用GeoPandas绘图与用Pandas绘图一样,非常简单且超级向前。这是通过基于 matplotlib python 包构建的 GeoDataFrame.plot() 函数完成的。

让我们从探索巴塞罗那开始,为其地区绘制一个基本地块:

ax= districts.plot(figsize=(10,6))

image.png

这是一个非常基本的情节,并没有告诉我们很多信息。但是,我们可以通过为每个地区涂上不同的颜色来使其更具信息性。

ax= districts.plot(column='DISTRICTE', figsize=(10,6), edgecolor='black', legend=True)

image.png

最后,我们可以通过添加各区的质心来向图中添加更多信息。

import contextily
import matplotlib.pyplot as plt
ax= districts.plot(column='DISTRICTE', figsize=(12,6), alpha=0.5, legend=True)
districts["centroid"].plot(ax=ax, color="green")
contextily.add_basemap(ax, crs=districts.crs.to_string())
plt.title('A Colored Map with the centroid of Barcelona')
plt.axis('off')
plt.show()

image.png

接下来,我们将探讨GeoPandas的一个非常重要的特征,即空间关系以及它们如何相互关联。

6. 定义空间关系

地理空间数据在空间中相互关联。GeoPandas使用熊猫和形状包装来建立空间关系。本节介绍常见操作。合并GeoPandas数据帧有两种主要方法,即属性和空间连接。在本节中,我们将探讨它们。

6.1.属性连接

属性联接允许您使用非几何变量联接两个 GeoPandas 数据帧,这使其类似于 Pandas 中的常规联接操作。连接操作是使用 pandas.merge() 方法完成的,如下例所示。在此示例中,我们将巴塞罗那人口数据联接到我们的地理空间数据,以向其添加更多信息。

import pandas as pd
pop =pd.read_csv('2022_padro_sexe.csv', usecols=['Nom_Districte','Nombre'])
pop = pd.DataFrame(pop.groupby('Nom_Districte')['Nombre'].sum()).reset_index()
pop.columns=['NOM','population_22']
districts = districts.merge(pop)
districts

image.png

6.2. 空间连接

另一方面,空间联接基于空间关系合并数据帧。在下面的示例中,我们将确定具有自行车道的地区我们将首先加载数据,如下面的代码所示:

url = 'https://opendata-ajuntament.barcelona.cat/resources/bcn/CarrilsBici/CARRIL_BICI.geojson'
bike_lane = gpd.read_file(url)
bike_lane = bike_lane.loc[:,['ID','geometry']]
bike_lane.to_crs(epsg=2062, inplace=True)

image.png

要在空间上连接两个数据帧,我们可以使用 sjoin() 函数。sjoin() 函数有四个主要参数:第一个是 GeoDataFrame,第二个参数是我们将添加到第一个 GeoDataFrame 的 GeoDataFrame,第三个参数是连接类型,最后一个参数是定义我们想要用来匹配两个 GeoDataFrame 的空间关系的谓词。最常见的部分关系是相交包含内部。在此示例中,我们将相参数。

lanes_districts = gpd.sjoin(districts, bike_lane, how='inner', predicate='intersects')
lanes_districts

image.png

在本文中,我向您介绍了使用开源GeoPandas库进行地理空间数据分析。我们从下载GeoPandas软件包开始,然后讨论了不同类型的地理空间数据以及如何加载它们。最后,我们将探讨基本操作,以掌握地理空间数据集。尽管在地理空间数据分析方面仍有探索,但此博客可作为您学习之旅的起点。


原文链接:https://www.mvrlink.com/leveraging-geospatial-data-in-python-with-geopandas/

目录
相关文章
|
1天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
22 12
|
6天前
|
数据采集 数据安全/隐私保护 Python
从零开始:用Python爬取网站的汽车品牌和价格数据
在现代化办公室中,工程师小李和产品经理小张讨论如何获取懂车帝网站的汽车品牌和价格数据。小李提出使用Python编写爬虫,并通过亿牛云爬虫代理避免被封禁。代码实现包括设置代理、请求头、解析网页内容、多线程爬取等步骤,确保高效且稳定地抓取数据。小张表示理解并准备按照指导操作。
从零开始:用Python爬取网站的汽车品牌和价格数据
|
1月前
|
数据采集 Web App开发 数据可视化
Python用代理IP获取抖音电商达人主播数据
在当今数字化时代,电商直播成为重要的销售模式,抖音电商汇聚了众多达人主播。了解这些主播的数据对于品牌和商家至关重要。然而,直接从平台获取数据并非易事。本文介绍如何使用Python和代理IP高效抓取抖音电商达人主播的关键数据,包括主播昵称、ID、直播间链接、观看人数、点赞数和商品列表等。通过环境准备、代码实战及数据处理与可视化,最终实现定时任务自动化抓取,为企业决策提供有力支持。
|
2月前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
2月前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
2月前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
2月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
305 10
|
3月前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
92 3
|
3月前
|
数据采集 JavaScript 程序员
探索CSDN博客数据:使用Python爬虫技术
本文介绍了如何利用Python的requests和pyquery库爬取CSDN博客数据,包括环境准备、代码解析及注意事项,适合初学者学习。
154 0
|
3月前
|
数据采集 存储 分布式计算
超酷炫Python技术:交通数据的多维度分析
超酷炫Python技术:交通数据的多维度分析

推荐镜像

更多