空间数据分析和空间统计工具库PySAL入门

news2024/11/24 17:19:39

空间数据分析是指利用地理信息系统(GIS)技术和空间统计学等方法,对空间数据进行处理、分析和可视化,以揭示数据之间的空间关系和趋势性,为决策者提供有效的空间决策支持。空间数据分析已经被广泛运用在城市规划、交通管理、环境保护、农业种植、自然资源管理等领域,成为现代社会中重要的数据分析手段。

1. PySAL空间数据分析工具库介绍

1.1. 概况

当涉及空间数据分析和空间统计时,PySAL(Python Spatial Analysis Library)是一个常用的 Python 库,它提供了丰富的空间数据分析工具和统计方法。PySAL是一个基于Python进行探索性空间数据分析的开放源码库,是由亚利桑那州立大学GeoDa Center for Geospatial Analysis and Computation赞助的社区项目,以下是其主要特点和功能:

  • 空间数据结构: PySAL 提供了用于表示空间数据的数据结构,例如点、线、面等几何对象,以及空间权重矩阵、空间连接图等。这些数据结构可以方便地用于空间数据的存储、处理和分析。

  • 空间权重矩阵: PySAL 支持多种空间权重矩阵的构建和处理,包括 Queen、Rook、Distance 等不同类型的空间权重矩阵。这些权重矩阵可以用于衡量空间数据中地理单元之间的空间关联程度。

  • 空间自相关分析: PySAL 提供了用于计算莫兰指数、Getis-Ord 统计量等空间自相关指标的工具,用于评估空间数据中的空间相关性和集聚模式。

  • 空间回归分析: PySAL 支持空间回归模型的构建和分析,包括空间滞后模型、空间误差模型等,用于探索空间数据中的空间依赖关系和空间异质性。

  • 空间聚类分析: PySAL 提供了用于空间聚类分析的工具,例如 DBSCAN、K-means 等算法,用于发现空间数据中的集群和簇。

  • 空间插值和空间可视化: PySAL 支持空间插值方法的应用,用于估计空间数据在未观测位置的值。此外,PySAL 还提供了用于空间数据可视化的工具,如地图绘制、空间图层叠加等。

PySAL 是一个功能强大且灵活的空间数据分析工具库,适用于地理信息系统、城市规划、环境科学、社会学等领域的空间数据分析和空间统计研究。通过使用 PySAL,可以更好地理解空间数据的特征和规律,支持空间决策和规划的制定。

1.2. 开源库构成

在 PySAL(Python Spatial Analysis Library)中,libexploremodelviz 是不同模块,各自提供了一些功能:

  • lib(Library):

    • lib 模块提供了一些核心的功能和工具,用于空间数据的处理、空间权重矩阵的构建、空间距离计算等基本操作。
    • lib 模块中,你可以找到用于处理空间数据的数据结构、空间权重矩阵的构建方法、空间距离的计算函数等。
  • explore(Exploratory Spatial Data Analysis):

    • explore 模块提供了用于探索性空间数据分析的工具和方法,包括莫兰指数、Getis-Ord 统计量等空间自相关指标的计算方法。
    • 使用 explore 模块,你可以进行空间自相关分析、空间集群分析等,从而了解空间数据中的空间模式和空间关联性。
  • model(Spatial Econometrics Models):

    • model 模块提供了一些空间计量经济学模型的实现,包括空间回归模型、空间滞后模型等。
    • 使用 model 模块,你可以构建和估计空间计量经济学模型,用于分析空间数据中的空间依赖关系和空间异质性。
  • viz(Visualization):

    • viz 模块提供了用于空间数据可视化的工具和方法,包括地图绘制、空间图层叠加、空间数据的可视化效果等。
    • 使用 viz 模块,你可以将空间数据在地图上进行可视化展示,直观地呈现空间数据的分布特征和空间关联性。

这些模块提供了 PySAL 中常用的功能和工具,可以帮助你进行空间数据分析、空间统计和空间建模等任务。你可以根据自己的需求选择适合的模块和方法来处理和分析空间数据。

开源地址:https://github.com/pysal/pysal。

1.3. 核心模块libpysal

libpysal是Python空间分析库核心库,它提供了四个模块,构成了PySAL系列的空间分析工具:

  • 空间权重: libpysal.weights
  • 输入和输出:libpysal.io
  • 计算几何学:libpysal.cg
  • 内置示例数据集 libpysal.examples

开源地址:https://github.com/pysal/。

2. PySAL安装

我在windows10环境中,直接使用pip安装。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pysal

3. 空间数据分析案例

本文使用PySAL在线教程中探索莫兰指数可视化案例,其数据集为Guerry 。

Guerry 数据集是由法国统计学家 André-Michel Guerry 在 1833 年创建的。该数据集包含了法国各个行政区的社会经济数据,包括人口统计、犯罪率、教育水平等指标。这些数据被用来分析社会现象,并成为统计学和社会科学研究中的经典数据集之一。

Guerry 数据集最著名的用途是在统计图表的历史上,它被用来展示了统计图表中数据之间的相关性。这个数据集的独特之处在于,它是早期社会科学研究中首次采用统计方法来分析社会现象的尝试之一,对后来的社会科学研究产生了深远影响。

3.1. 数据项解释

这个表中各列的含义如下:

序号名称说明
1dept部门(部门的标识符或名称)
2Region地区(部门所在地区的标识符或名称)
3Dprtmnt部门(部门的标识符或名称,与 ‘dept’ 列可能表示相同的信息)
4Crm_prs犯罪人数(人口中的犯罪人数)
6Litercy识字率(人口中的识字率)
7Donatns慈善捐款(人均慈善捐款数额)
8Infants婴儿死亡率(婴儿的死亡率)
9Suicids自杀率(自杀的比率)
10MainCty主要城市(部门所在的主要城市或城镇)
11Wealth财富指数(部门或地区的财富水平)
12Commerc商业指数(部门或地区的商业繁荣程度)
13Clergy牧师数目(部门或地区的牧师数量)
14Crm_prn犯罪率(犯罪率的另一种表示方式)
15Infntcd婴儿死亡数目(婴儿的死亡数量)
16Dntn_cl慈善捐款类别(慈善捐款的具体类别)
17Lottery彩票支出(彩票支出的金额或比率)
18Desertn遗弃(地区的遗弃现象或问题)
19Instrct指导(教育或指导资源的可用性)
20Prsttts圣职人员(地区的宗教或教堂官员数量)
21Distanc距离(部门或地区之间的距离)
22Area面积(部门或地区的面积大小)
23Pop1831人口(1831年的人口数量)
24geometry几何数据(可能是地理空间数据中的几何信息)

在这里插入图片描述

3.2. 数据获取

Guerry 数据集不在默认的安装包和github中,需要远程下载。

import libpysal
# Downloading Remote Datasets
balt_url = libpysal.examples.get_url('Guerry')
balt_url

获取地址为:'https://geodacenter.github.io/data-and-lab//data/guerry.zip'。手工下载此压缩包,解压到Guerry文件夹中。

3.3. 实验之旅

%matplotlib inline

import matplotlib.pyplot as plt
from libpysal.weights.contiguity import Queen
from libpysal import examples
import numpy as np
import pandas as pd
import geopandas as gpd
import os
import splot

gdf = gpd.read_file('Guerry/Guerry.shp')
# 输出数据见上表
gdf
y = gdf['Donatns'].values
w = Queen.from_dataframe(gdf)
w.transform = 'r'

这段代码涉及地理空间数据分析的基本步骤,以下是对每行代码的解释:

  • y = gdf['Donatns'].values

    • 这一行从地理数据框架(geodataframe) gdf 中选择了名为 ‘Donatns’ 的列,并将其转换为 NumPy 数组(array)。
    • 这样做是为了提取感兴趣的变量(在这种情况下是慈善捐款)以便进行进一步的分析和建模。
  • w = Queen.from_dataframe(gdf)

    • 这一行使用 Queen.from_dataframe 方法从地理数据框架 gdf 中创建了一个 Queen 邻接权重矩阵(spatial weights matrix)。
    • Queen 邻接权重矩阵描述了地理空间中各个区域之间的邻接关系,即哪些区域是相邻的。
  • w.transform = 'r'

    • 这一行设置了权重矩阵 w 的转换方式为行标准化(row-standardized)。
    • 行标准化是一种常见的操作,它将权重矩阵的每一行都除以该行的权重总和,以确保每个单位(即行)的权重之和为 1。
    • 行标准化可以使权重矩阵更容易解释和应用,尤其在一些空间分析和空间统计方法中。
from esda.moran import Moran

w = Queen.from_dataframe(gdf)
moran = Moran(y, w)
moran.I

print("Moran's I 值为:",moran.I)
print("随机分布假设下Z检验值为:",moran.z_rand)
print("随机分布假设下Z检验的P值为:",moran.p_rand)
print("正态分布假设下Z检验值为:",moran.z_norm)
print("正态分布假设下Z检验的P值为:",moran.p_norm)
	Moran's I 值为: 0.3533613255848606
	随机分布假设下Z检验值为: 5.378368837667692
	随机分布假设下Z检验的P值为: 7.516371034073079e-08
	正态分布假设下Z检验值为: 5.235533901743425
	正态分布假设下Z检验的P值为: 1.6450862400833017e-07
  • Moran’s I 值(0.3533613255848606):这是莫兰指数,用于衡量空间自相关的程度。它的取值范围在 -1 到 1 之间。如果值接近 1,则表示正的空间自相关(即相似的值聚集在一起),如果接近 -1,则表示负的空间自相关(即相异的值聚集在一起),如果接近 0,则表示没有空间自相关。

  • 随机分布假设下Z检验值(5.378368837667692):这是基于随机分布假设进行的 Z 检验的统计值。它衡量了观察到的莫兰指数是否显著地不同于在随机分布情况下预期的值。较大的 Z 值表明观察到的空间自相关性更高。

  • 随机分布假设下Z检验的P值(7.516371034073079e-08):这是 Z 检验的 p 值,表示观察到的莫兰指数在随机分布假设下的显著性水平。p 值越小,表明观察到的空间自相关性越显著。

  • 正态分布假设下Z检验值(5.235533901743425):这是基于正态分布假设进行的 Z 检验的统计值。它类似于随机分布假设下的 Z 检验值,用于检验观察到的莫兰指数是否显著地不同于在正态分布情况下预期的值。

  • 正态分布假设下Z检验的P值(1.6450862400833017e-07):这是 Z 检验的 p 值,表示观察到的莫兰指数在正态分布假设下的显著性水平。与随机分布假设下的 p 值一样,p 值越小,表明观察到的空间自相关性越显著。

综合来看,莫兰指数值为 0.353 表明存在一定程度的正的空间自相关性,而随机分布假设下的 p 值和正态分布假设下的 p 值都非常小(小于 0.05),因此我们可以拒绝空间自相关性不存在的原假设,得出结论认为观察到的空间自相关性是显著的。

在这种情况下,莫兰指数 ( I = 0.353 ) 虽然不算非常大,但其所对应的 p 值非常小,远小于一般的显著性水平(比如 ( \alpha = 0.05 ))。这表示观察到的空间自相关性在统计上是显著的,即我们有足够的证据来拒绝空间自相关性不存在的原假设。

因此,显著性水平很低的 p 值表明我们对观察到的空间自相关性是非常有信心的,这增强了我们对结果的信任程度。

from splot.esda import moran_scatterplot
fig, ax = moran_scatterplot(moran, aspect_equal=True)
plt.show()

在这里插入图片描述

from splot.esda import plot_moran

plot_moran(moran, zstandard=True, figsize=(10,4))
plt.show()

在这里插入图片描述

from splot.esda import plot_local_autocorrelation
plot_local_autocorrelation(moran_loc, gdf, 'Donatns')
plt.show()

在这里插入图片描述

通常情况下,通过不同的可视化方式来观察统计结果或者解释这些结果会更容易理解。在这里,例如,我们可以看到一个莫兰散点图(Moran Scatterplot)、LISA 聚类图和区域填充图(choropleth map)的静态可视化。

  • 莫兰散点图(Moran Scatterplot):莫兰散点图用于展示空间自相关性的模式。它通常在 x 轴和 y 轴上分别表示变量的观测值,然后通过散点图来展示空间相关性的程度。通过观察散点图的分布模式,我们可以更直观地了解变量之间的空间关系。

  • LISA 聚类图:LISA(Local Indicators of Spatial Association)聚类图是用于展示空间聚类模式的工具。它显示了地理空间上不同区域之间的局部空间相关性,即是否存在局部空间集聚或分散的现象。通过不同的颜色和形状来表示不同类型的空间关系,比如高高(HH)、低低(LL)、高低(HL)、低高(LH)等。

  • 区域填充图(Choropleth Map):区域填充图是一种常见的地图类型,用于展示地理空间上的统计数据。不同区域根据其对应的统计值着色,颜色的深浅或者颜色的种类表示不同的数值范围或者类别,使得观察者能够直观地了解地理空间上的数据分布情况。

综合来看,通过这些可视化工具,我们可以更全面地理解空间数据分析的结果,从不同角度和不同视觉效果来观察数据,有助于发现隐藏在数据背后的模式和规律。

4. 小结

当你有二维坐标的 POI 数据时,你可以使用 PySAL 进行各种空间分析。虽然 PySAL 最初是为地理空间数据设计的,但它也可以处理二维坐标数据,例如对于城市中的 POI 数据。

以下是一些你可以使用 PySAL 进行空间分析的示例:

  • 空间权重矩阵的构建: 根据 POI 数据的二维坐标,你可以构建空间权重矩阵来衡量不同 POI 之间的空间关系。常见的空间权重矩阵包括邻近权重矩阵和距离权重矩阵。你可以使用 PySAL 的 weights 模块来构建这些权重矩阵。

  • 空间自相关分析: 使用 PySAL,你可以计算莫兰指数等空间自相关指标,评估 POI 数据中的空间相关性和集聚模式。你可以使用 esda 模块中的 Moran 类来计算莫兰指数。

  • 空间聚类分析: 你可以使用 PySAL 进行空间聚类分析,发现城市中不同 POI 的空间集群和簇。你可以使用 cluster 模块中的聚类算法,如 DBSCAN、K-means 等。

  • 空间可视化: PySAL 提供了丰富的空间可视化工具,你可以将二维坐标的 POI 数据在地图上进行可视化展示。你可以使用 matplotlib 等库来绘制地图,并结合 PySAL 提供的空间分析结果来进行可视化展示。

总体而言,尽管 PySAL 最初是为地理空间数据设计的,但它也可以处理二维坐标数据,并提供了丰富的空间分析工具和方法,可以帮助你理解和分析二维空间数据中的模式、关联和趋势。

参考:

[1]. 酱肉包-. Python空间分析| 01 利用Python计算全局莫兰指数(Global Moran’s I).CSDN博客. 2023.02

[2]. rgb2gray. ESDA in PySal (5):空间数据的探索性分析:空间自相关. CSDN博客. 2023.10

[3]. http://pysal.org/notebooks/viz/splot/esda_morans_viz.html

[4]. https://pysal.org/libpysal/notebooks/examples.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1421908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

主从数据库MySQL服务重启步骤与注意事项

主从数据库MySQL服务重启步骤与注意事项 实验环境: 172.20.26.34 (主应用服务器) 172.20.26.26 (备应用服务器) 172.20.26.37 (主库服务器) 172.20.26.38 (从库服务器&…

Spring Boot 中使用 Spring MVC基础

Spring MVC基础 一、控制器 controller1.定制控制器的方法(1)接收请求(2)接收请求参数(3)返回值 二、模型 Modle三、视图 View四、总结 Spring MVC 是非常著名的 Web 应用框架,现在的大多数 Web…

无需 Root 卸载手机预装软件,精简过的老年机又行了

基础准备 准备目标手机、USB 数据线、以及一台电脑。手机 USB 连接电脑,开发者选项中打开 USB 调试。(开发者选项默认隐藏,需要在关于手机中多次点击版本号才能调出)。 安装手机驱动,下载安装 ADB 工具包。 开始操作…

Excel得到JSON串

很多时候业务都需要做一种从Excel读取或者导入数据的功能,这在cs程序比较简单,在BS程序上如果封装不好的话那么写起来还是很费劲的,这次封装Excel读取操作。 先看使用 对,你没有看错,就是这么简单。 封装 基础设计…

TensorFlow2实战-系列教程11:RNN文本分类3

🧡💛💚TensorFlow2实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Jupyter Notebook中进行 本篇文章配套的代码资源已经上传 6、构建训练数据 所有的输入样本必须都是相同shape(文本长度,…

Prometheus基于pod部署

1、kube-api的自动发现:Prometheus的容器化部署(生产中都是pod部署) 2、部署export (1)创建目录 (2)创建命名空间 (3)部署node-export ①9100端口被占用,停…

useEffect的第二个参数

目录 1、第一个参数: 2、第二个参数: 2.1 不传值:无限循环 2.2 空数组作为依赖:执行一次 2.3 基本类型作为依赖:无限循环 2.4 引用类型 2.4.1 数组作为依赖:无限循环 2.4.2 函数作为依赖&#…

添加了gateway之后远程调用失败

前端提示500,后端提示[400 ] during [GET] to [http://userservice/user/1] 原因是这个,因为在请求地址写了两个参数,实际上只传了一个参数 解决方案:加上(required false)并重启所有相关服务

Redis(十)SpringBoot集成Redis

文章目录 连接单机mvnYMLController.javaRedisConfig.java 连接集群YML问题复现 RedisTemplate方式 连接单机 mvn <!--Redis--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</art…

Qt应用开发(安卓篇)——调用ioctl、socket等C函数

一、前言 在 Qt for Android 中没办法像在嵌入式linux中一样直接使用 ioctl 等底层函数&#xff0c;这是因为因为 Android 平台的安全性和权限限制。 在 Android 中&#xff0c;访问设备硬件和系统资源需要特定的权限&#xff0c;并且需要通过 Android 系统提供的 API 来进行。…

Java链表(2)

&#x1f435;本篇文章将对双向链表进行讲解&#xff0c;模拟实现双向链表的常用方法 一、什么是双向链表 双向链表在指针域上相较于单链表&#xff0c;每一个节点多了一个指向前驱节点的引用prev以及多了指向最后一个节点的引用last&#xff1a; 二、双向链表的模拟实现 首先…

深度学习:机器智能的革命性突破与未来挑战

深度学习&#xff1a;机器智能的革命性突破与未来挑战 深度学习是人工智能领域的一个重要分支&#xff0c;它利用神经网络模拟人类大脑的学习过程&#xff0c;通过大量数据训练模型&#xff0c;使其能够自动提取特征、识别模式、进行分类和预测等任务。近年来&#xff0c;深度学…

忍不了,客户让我在一个接口里兼容多种业务逻辑

分享是最有效的学习方式。 博客&#xff1a;https://blog.ktdaddy.com/ 老猫的设计模式专栏已经偷偷发车了。 不甘愿做crud boy&#xff1f;看了好几遍的设计模式还记不住&#xff1f;那就不要刻意记了&#xff0c;跟上老猫的步伐&#xff0c;在一个个有趣的职场故事中领悟设计…

一文掌握SpringBoot注解之@Component 知识文集(8)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

山体滑坡在线安全监测预警系统(解决方案)

在近年来&#xff0c;随着全球气候变化的影响&#xff0c;山体滑坡等自然灾害频发&#xff0c;给人们的生命财产安全带来了严重威胁。为了有效预防和减少山体滑坡带来的危害&#xff0c;许多地方开始在山上安装山体滑坡在线安全监测预警系统&#xff08;解决方案&#xff09;。…

【图论】【状态压缩】【树】【深度优先搜索】1617. 统计子树中城市之间最大距离

作者推荐 【动态规划】【字符串】【行程码】1531. 压缩字符串 本文涉及的知识点 图论 深度优先搜索 状态压缩 树 LeetCode1617. 统计子树中城市之间最大距离 给你 n 个城市&#xff0c;编号为从 1 到 n 。同时给你一个大小为 n-1 的数组 edges &#xff0c;其中 edges[i] …

在 Linux 中挂载新硬盘动态使用

目录 一&#xff1a;添加硬盘并且格式化 二&#xff1a;创建逻辑卷 三&#xff1a;挂载卷到目录 在 Linux 中挂载新硬盘并进行格式化的操作可以按照以下步骤进行&#xff1a; 一&#xff1a;添加硬盘并且格式化 查看现有分区状态和服务器安装的硬盘状态&#xff1a; df -…

开源项目TARZAN-NAV | 基于springboot的现代化导航网站系统

TARZAN-NAV 导航网站 一个基于 Spring Boot、MyBatis-Plus、h2database、ehcache、Docker、websocket等技术栈实现的导航网站系统&#xff0c;采用主流的互联网技术架构、全新的UI设计、支持一键源码部署&#xff0c;拥有完整的仪表板、导航管理&#xff0c;用户管理、评论管理…

操作筛选器的 1 个应用实例:自动启用事务

前言 在数据库操作过程中&#xff0c;有一个概念是绕不开的&#xff0c;那就是事务。 事务能够确保一系列数据库操作要么全部成功提交&#xff0c;要么全部失败回滚&#xff0c;保证数据的一致性和完整性。 在 Asp.Net Core Web API 中&#xff0c;我们可以使用操作筛选器给…

uni-app小程序自定义导航栏

最近在开发一个uni-app小程序&#xff0c;用到了自定义导航栏&#xff0c;在这里记录一下实现过程&#xff1a; page.json 在对应页面路由的style中设置入"navigationStyle": "custom"取消原生导航栏&#xff0c;自定义导航栏 {"path": "…