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

空间数据分析是指利用地理信息系统(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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nacos服务注册源码解析

简介:本文将以图文方式详述 Spring Cloud Alibaba 技术体系之 Nacos 服务注册源码解析。 目录 一、Nacos 服务架构 二、Nacos 服务注册流程图(源码级别) 1. 注册中心核心工作流程 三、Nacos 服务注册源码解析 1. 服务注册 1.1 客户端服…

代码随想录 Leetcode110.平衡二叉树

题目: 代码(首刷看解析 2024年1月30日): class Solution { public:int depth(TreeNode* root) {if (root nullptr) return 0;int leftHeight depth(root->left);if (leftHeight -1) return -1;int rightHeight depth(root->right)…

【Linux C | 网络编程】getsockname 和 getpeername函数详解及C语言例子

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

【遥感专题系列】遥感影像信息提取之——人工目视解译

​遥感影像通过亮度值或像元值的高低差异(反映地物的光谱信息)及空间变化(反映地物的空间信息)来表示不同地物的差异,这是区分不同影像地物的物理基础。 ​人工解译是目前国内使用最多的一种影像提取方法,如…

Android studio环境搭建过程异常

异常:Connect timed out 创建新项目时,提示time out 解决方案:修改gradle下载地址,使用国内镜像地址 distributionUrlhttps\://services.gradle.org/distributions/gradle-8.2-bin.zip修改成distributionUrlhttps\://mirrors.c…

海外拓展必备:精细规划的出海策略,实现市场全球化的第一步

随着全球化的深入,越来越多的企业开始将目光投向海外市场,以寻求更广阔的发展空间。然而,进入新的市场并进行有效的海外营销并非易事,需要经过精心策划和系统性的执行。本文Nox聚星将和大家详细探讨出海营销的第一步应该如何着手&…

初始化和赋值

列表初始化 #include <iostream>struct test{int a; };class object{ public:object(int v10):a{v}{}int a; };int main(){test t1;test t2{};std::cout<<t1.a<<std::endl;std::cout<<t2.a<<std::endl;object b2{11};std::cout<<b2.a<…

泛谈一下数字化技能的学习,SPSS、Stata还是Python?技术、业务+表达、展现!

1.本科、专科上学时对于这些偏数学类的课程还是要好好学习 应知乎、小红书、CSDN很多年轻朋友、同学们的邀请&#xff0c;今天我泛谈一下数字化技能的学习。很多学生在本科或专科上学时代学过统计学、计量经济学、机器学习、数据分析、统计分析、数据挖掘、量化建模等一门或多…

宏集物联网HMI、工业树莓派、触控一体机,超值优惠限时放送

亲爱的客户朋友们&#xff1a; 新春佳节将至&#xff0c;为回馈广大新老客户们一年来的支持与厚爱&#xff0c;宏集科技推出一场盛大的新春促销活动&#xff01; 我们精选了一系列宏集科技优质产品&#xff0c;包括工业树莓派、物联网HMI、触控一体机等&#xff0c;为您的工程…

React通用后台模板

一. 项目初始化 1. 创建项目 环境 npm init vite 打开package.json,参考以下各模块版本: "dependencies": { "react": "^18.2.0", "react-dom": "^18.2.0", "react-redux": "^7.2.8", …

探索Allure Report:提升自动化测试效率的秘密武器!

一.使用 Allure2 运行方式-Python # --alluredir 参数生成测试报告。 # 在测试执行期间收集结果 pytest [测试用例/模块/包] --alluredir./result/ (—alluredir这个选项 用于指定存储测试结果的路径)# 生成在线的测试报告 allure serve ./result二.使用 Allure2 运行方式-Ja…

Java项目:基于SSM框架实现的家纺用品销售管理系统(ssm+B/S架构+源码+数据库+毕业论文)

一、项目简介 本项目是一套ssm814基于SSM框架实现的家纺用品销售管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试…

【WebGIS实例】(13)MapboxGL+Vue 实现自定义组件地图气泡弹窗 popup

前言 没有前言&#xff0c;直接上代码了 代码 核心方法 const addComponentPopup (component, feature, lnglat, map) > {const popup new mapboxgl.Popup({// anchor: center, // center , top , bottom , left , right , top-left , top-right , bottom-left , and …

使用Neo4j做技术血缘管理

目录 一、neo4j介绍 二、windows安装启动neo4j 2.1下载neo4j 2.2 解压文件 2.3 启动neo4j 三、neo4j基础操作 3.1 创建结点和关系 3.2 查询 3.3 更改 3.4 删除 四、技术血缘Demo实现 4.1 构建节点对象 4.2 构建存储对象 4.3 创建有属性关联关系 4.4 最后是图结果…

【Unity3D日常开发】Unity3D中Text使用超链接并绑定点击事件

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中遇到了要给Text加超链接的需求&#xff0c;研究了实现…

UE4 C++ 枚举类型

先在UCLASS()前写入&#xff1a; //定义枚举变量&#xff1a;方法一 UENUM(BlueprintType) //BlueprintType&#xff1a;在蓝图中可显示、创建该枚举变量 namespace MyEnumType //namespace&#xff1a;命名空间&#xff0c;支持同样的变量命令、便于访问//MyEnumType&#xf…

JAVA和C#怎么开发SECS/GEM:recipe配方处理 S7F1、S7F19

recipe是什么内容呢&#xff1f; recipe是机台加工不同产品时的对应程式&#xff0c;指的是由制造工程师提前在机台上设置&#xff0c;并且EAP控制生产时会自动根据货的类型选择并控制机台按照制造工程师提前设置的方式进行加工。 recipe也称为配方&#xff0c;配方是怎么来的…

idea中yml文件没有提示解决办法

两步解决yml文件不显示提示&#xff0c;yaml文件显示提示问题 1、在插件中心&#xff0c;先下载下图两个插件 2、在Editor》File Types新增文件类型&#xff0c;文件名匹配规则需要将yaml和yml的都加上&#xff0c;加好之后&#xff0c;重启idea&#xff0c;即刻生效。

Meta开源Code Llama 70B,缩小与GPT-4之间的技术鸿沟

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【日常总结】如何快速迁移Navicat中的全部连接设置到新安装的Navicat中?

一、场景 二、需求 三、解决方案 Stage 1&#xff1a;“文件”-->“导出连接”。 Stage 2&#xff1a;获取备份文件 connections.ncx Stage 3&#xff1a;导入connections.ncx 四、不足 一、场景 公司电脑换新&#xff0c;所有软件需要重装&#xff0c;包括navicat 1…