基于面向对象的空间自相关指数,即插即用!Moran‘s I,局部莫兰指数,Geary‘s C指数,附完整可行使用案例

news2025/3/13 23:30:51

Geary’s C

Geary’s C(也称为Geary’s coefficient)是一种用于衡量空间自相关性的统计指标,它可以用来评估地理数据中的空间聚集或离散程度。Geary’s指数的计算公式如下:
G = ( n − 1 ) ∗ ( Σ Σ w i j ∗ ( x i − x j ) 2 ) / ( 2 ∗ Σ Σ w i j ∗ ( x i − x ˉ ) 2 ) G = (n - 1) * (ΣΣwij * (xi - xj)²) / (2 * ΣΣwij * (xi - x̄)²) G=(n1)(ΣΣwij(xixj)2)/(2ΣΣwij(xixˉ)2)
其中,G 是Geary’s C指数,n 是样本数量,wij 是地理邻接权重,xi 是第i个样本的值,xj 是第j个样本的值,x̄ 是所有样本的平均值。

Geary’s C指数的取值范围是0到2之间。当G接近于1时,表示数据呈现随机分布;当G接近于0时,表示数据呈现正相关的空间聚集;当G接近于2时,表示数据呈现负相关的空间离散。

需要注意的是,Geary’s C指数的计算需要考虑地理邻接权重,这是用来表示地理空间上的相邻关系的权重矩阵。具体的权重计算方法可以根据具体的研究问题和数据特点进行选择和定义。


全局莫兰指数

莫兰指数(Moran’s I)是一种用于测量空间自相关性的统计指标,它可以用来评估地理数据中的空间聚集或离散程度。莫兰指数的计算公式如下:
I = ( n / W ) ∗ Σ Σ w i j ∗ ( x i − x ˉ ) ∗ ( x j − x ˉ ) / Σ Σ w i j ∗ ( x i − x ˉ ) 2 I = (n / W) * ΣΣwij * (xi - x̄) * (xj - x̄) / ΣΣwij * (xi - x̄)² I=(n/W)ΣΣwij(xixˉ)(xjxˉ)/ΣΣwij(xixˉ)2
其中,I 是莫兰指数,n 是样本数量,W 是地理邻接权重的总和,wij 是地理邻接权重,xi 是第i个样本的值,xj 是第j个样本的值,x̄ 是所有样本的平均值。

莫兰指数的取值范围是-1到1之间。当I接近于1时,表示数据呈现正相关的空间聚集;当I接近于-1时,表示数据呈现负相关的空间聚集;当I接近于0时,表示数据呈现随机分布。

需要注意的是,莫兰指数的计算同样需要考虑地理邻接权重,这是用来表示地理空间上的相邻关系的权重矩阵。具体的权重计算方法可以根据具体的研究问题和数据特点进行选择和定义。


局部莫兰指数

局部莫兰指数(Local Moran’s I)是一种用于衡量空间自相关性的统计指标,它可以帮助我们了解地理空间上的局部聚集模式。与全局莫兰指数不同,局部莫兰指数可以针对每个地理单元(如点、区域等)计算其自身的聚集程度。
I i = Z i S 2 ∑ i ≠ j n w i j Z j I_i=\frac{Z_i}{S^2}\sum_{i\neq j}^n w_{ij}Z_j Ii=S2Zii=jnwijZj
其中, Z i = y i − y ˉ Z_i=y_i-\bar{y} Zi=yiyˉ w i j w_{ij} wij表示权重, S 2 = 1 n ∑ ( y i − y ˉ ) 2 S^2=\frac{1}{n}\sum(y_i-\bar y)^2 S2=n1(yiyˉ)2

局部莫兰指数的取值范围在-1到1之间,具有以下含义:

  • 正值表示该地理单元与其邻近地理单元之间存在正的空间自相关性,即该地理单元与其邻近地理单元的值相似程度较高,可能形成聚集模式。
  • 负值表示该地理单元与其邻近地理单元之间存在负的空间自相关性,即该地理单元与其邻近地理单元的值相似程度较低,可能形成分散模式。
  • 零值表示该地理单元与其邻近地理单元之间不存在明显的空间自相关性,即该地理单元的值与其邻近地理单元的值无关。

局部莫兰指数可以用来识别空间上的局部聚集模式,帮助我们理解地理空间上的异质性和空间分布特征。它在空间分析、地理信息系统等领域具有广泛的应用。

Z i Zi Zi ∑ i ≠ j n w i j Z j \sum_{i\neq j}^n w_{ij}Z_j i=jnwijZj I i I_i Ii含义
>0>0>0第i个地区经济发展水平高,周边地区发展水平高
<0<0>0第i个地区经济发展水平低,周边地区发展水平低
<0>0<0第i个地区经济发展水平低,周边地区发展水平高
>0<0<0第i个地区经济发展水平高,周边地区发展水平低

计算上述空间自相关指数的时候,往往需要用到卷积核,用于定义空间权重。

在这里插入图片描述

Rook卷积核(1);BiShop卷积核(2);Queen卷积核(3)

完整实现代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

class SpatialAutocorrelation:

    def __init__(self,data,val=1,conv=0):
        '''

        :param data: ndArray
        '''
        self.val=val

        # 定义卷积核
        # dirs[0]:Queen dirs[1]:Rook dirs[2]:Bishop
        self.dirs=[[[1, 0], [-1, 0], [0, 1], [0, -1], [1, 1], [1, -1], [-1, 1], [-1, -1]],
              [[1, 0], [0, 1], [-1, 0], [0, -1]],
              [[1, 1], [1, -1], [-1, 1], [-1, -1]]]

        # 配置数据
        self.ResetData(data)
        # 配置权重矩阵
        self.ResetConv(conv)

    def ResetData(self,data):
        self.data = data
        self.n, self.m = data.shape
        self.mean = self.data.mean()

    def ResetConv(self,conv):
        # 需要为每个数据定义一个权重矩阵
        self.weight=[[] for _ in range(self.n*self.m)] # 开辟权重矩阵
        self.Weight_Sum=0 # 总权重
        for i in range(self.n):
            for j in range(self.m):
                loc=i*self.m+j # 定位一维数组位置
                for dx,dy in self.dirs[conv]:
                    x,y=i+dx,j+dy
                    if 0<=x<self.n and 0<=y<self.m:
                        self.weight[loc].append([self.data[x][y],self.val]) # wight[loc]存放的是loc点对应周边点的值以及权重
                        self.Weight_Sum+=1

    def getMoranIndex(self):
        up_,down_=0,0
        for i in range(self.n):
            for j in range(self.m):
                loc=i*self.m+j
                for d,v in self.weight[loc]:
                    up_+=v*(d-self.mean)*(self.data[i][j]-self.mean)
                down_+=(self.data[i][j]-self.mean)**2
        return (self.n*self.m)/(self.Weight_Sum)*(up_/down_)

    def getGearyC(self):
        up_,down_=0,0
        for i in range(self.n):
            for j in range(self.m):
                loc=i*self.m+j
                for d,v in self.weight[loc]:
                    up_+=v*(self.data[i][j]-d)**2
                down_+=(self.data[i][j]-self.mean)**2
        return (self.m*self.n-1)/(self.Weight_Sum*2)*(up_/down_)

    def getLocalMoranI(self):
        # 输出结果如果想要转为图像,需要做区间转换
        newD=np.zeros_like(self.data)
        s=((self.data-self.mean)**2).sum()/(self.n*self.m)
        for i in range(self.n):
            for j in range(self.m):
                loc=i*self.m+j
                z=0
                for d,v in self.weight[loc]:
                    z+=(d-self.mean)*v
                newD[i][j]=z*(self.data[i][j]-self.mean)/s
        return newD

    def localM2Img(self,D):
        D=(D-D.min())/(D.max()-D.min())*255
        return D.astype(np.uint8)

    def getLocalMoranI_and_plot(self):
        newD=self.getLocalMoranI()
        D=self.localM2Img(newD)
        plt.figure(figsize=(16,8))
        plt.imshow(D,cmap='gray')
        plt.show()
        return newD




if __name__ == '__main__':
    data=pd.read_excel(r"TabsRes/data.xlsx",index_col=0)

    # 随机图像的结果
    sa=SpatialAutocorrelation(data.values,conv=2) # Rook Conv
    print("全局莫兰指数: ",sa.getMoranIndex())
    print("局部莫兰指数: ",sa.getLocalMoranI_and_plot())
    print("Geary'S C指数: ",sa.getGearyC())

    # 更换数据
    sa.ResetData(pd.read_excel(r'TabsRes/hamster.xlsx',index_col=0).values)
    print("全局莫兰指数: ",sa.getMoranIndex())
    print("局部莫兰指数: ",sa.getLocalMoranI_and_plot())
    print("Geary'S C指数: ",sa.getGearyC())

    # 更换卷积核
    sa.ResetConv(0)
    print("全局莫兰指数: ",sa.getMoranIndex())
    print("局部莫兰指数: ",sa.getLocalMoranI_and_plot())
    print("Geary'S C指数: ",sa.getGearyC())

第一个数据是随机噪声,其局部墨兰指数图如下:

在这里插入图片描述

程序输出的结果为:

全局莫兰指数:  -0.00025654962271123334
Geary'S C指数:  1.000255597302246

可以看到,全局基本上不存在空间自相关性。

而第二张图片是一只仓鼠,原始图像为:

在这里插入图片描述

得到的结果为:
在这里插入图片描述

全局莫兰指数:  0.9954479543319323
Geary'S C指数:  0.00441478062600421

可以看到,图片存在很强的空间自相关性,这也是一些图像处理算法能够实现的原因。
附:关于如何将图片转为Excel?

import cv2 as cv
path=r"TabsRes\data_MorRanI.xlsx"
if not os.path.exists(path):
    img = cv.imread(r"ImgRes\Screenshot_1.png", 0)
    d=pd.DataFrame(img)
    d.to_excel(path)

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

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

相关文章

windows下Node版本的切换方式

为了避免应用构建出错&#xff0c;我们在本地开发环境的 Node 版本与在 CI/CD 流程中指定的 Node 版本需保持一致。在这种需要频繁切换 Node 版本的情况下&#xff0c;我们不可能手动卸载又安装不同的版本&#xff0c;这时我们可以借助 NVM 工具来帮助我们快速地切换 Node 版本…

轻量、便捷、高效—经纬恒润AETP助力车载以太网测试

随着自动驾驶技术和智能座舱的不断发展&#xff0c;高宽带、高速率的数据通信对主干网提出了稳定、高效的传输要求&#xff0c;CAN(FD)、LIN已无法充分满足汽车的通信需求。车载以太网作为一种快速且扩展性好的网络技术&#xff0c;已经逐步成为了汽车主干网的首选。 此外&…

无涯教程-Android - Services

服务是在后台运行以执行长时间运行的操作而无需与用户交互的组件&#xff0c;并且即使应用程序被破坏&#xff0c;它也可以工作。服务实际上可以采取两种状态- Sr.No.State & Remark1 Started 当应用程序组件(如Activity)通过调用 startService()启动服务&#xff0c;启动后…

vue数组对象中按某一字段排序

给下列数组字段中的month排序 第一步&#xff1a;methods中写一个方法如下&#xff1a; sortBy(attr, rev) {//第二个参数没有传递 默认升序排列if(rev undefined) {rev 1;} else {rev (rev) ? 1 : -1;}return function(a, b) {a a[attr];b b[attr];if(a < b) {retu…

概念解析 | 合成孔径雷达在海洋动力学研究中的应用

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:合成孔径雷达海洋动力研究。 揭秘海洋的心跳:合成孔径雷达与海洋动力学的交响乐 海洋,那个占据地球表面三分之二的神秘世界,它的运动和变化直接影响着全球气候系统,以及…

解决maven仓库无法自动下载程序包的问题

在调试idea项目报错&#xff1a;未解析的依赖项:de.fhpotsdam:unfolding:jar:0.9.6 问题描述解决方法总结 问题描述 在调试idea项目时报如上所示错误&#xff0c;并尝试了网上所说的更改maven仓库为阿里云仓库等方法&#xff0c;但是maven均无法自动下载unfolding程序包。 解…

企业重要数据怎么加密?企业数据加密软件哪个好?

企业的数据安全至关重要&#xff0c;关系到企业的健康发展&#xff0c;我们可以采用加密的方法来保护企业数据安全。那么&#xff0c;企业重要数据该怎么加密呢&#xff1f;企业数据加密软件哪个好&#xff1f;下面我们就来了解一下。 企业数据加密要求 企业数据加密的要求往…

YOLOv5模型压缩:综述

YOLOv5模型压缩:综述 AbstractIntroduction剪枝基于ln-范数修剪模型Feature map activationBatch normalization scaling factor (BNSF)First-order derivativeMutual informationGranularity of Pruning非结构化剪枝结构化剪枝基于通道的修剪基于滤波器的修剪基于核的剪枝关于…

AutoRunner自动化测试工具新版本智能识别算法之视觉识别

泽众AutoRunner&#xff08;简称AR&#xff09;是国内专业的支持C/S、B/S各种技术框架的、基于组件识别的自动化测试工具&#xff0c;实现7*24小时的自动化回归测试和功能测试&#xff0c;让测试更智能。 视觉识别是一种通过计算机技术对图像或视频进行分析和理解的方法。这种算…

checkstyle检查Java编程样式:final参数

checkstyle可以利用FinalParameters检查方法、构造器、catch和for-each块的参数是final的&#xff1a; https://checkstyle.sourceforge.io/checks/misc/finalparameters.html 背后的原理&#xff1a;程序执行期间修改参数的值会引起混乱&#xff0c;所以应该避免。 要配置使…

一道经典面试题:@Configuration 和 @Component 有何区别?

关于 Configuration 注解有一个特别经典的面试题&#xff1a; Configuration 和 Component 有什么区别&#xff1f; 无论小伙伴们之前是否背过相关的面试题&#xff0c;今天这篇文章学完之后相信大家对这个问题都会有更深一层的理解&#xff0c;废话不多少&#xff0c;咱们开…

地理空间数据的定义、收集和应用

简介 地理空间数据是指与地球表面特定位置相关的数据。它包含多种数据类型&#xff0c;包括地图、卫星图像和GIS&#xff08;地理信息系统&#xff09;数据。近年来&#xff0c;由于技术的进步以及对有关物理世界的准确和最新信息的需求不断增长&#xff0c;地理空间数据的…

9、监测数据采集物联网应用开发步骤(7)

监测数据采集物联网应用开发步骤(6) 串口(COM)通讯开发 本章节测试使用了 Configure Virtual Serial Port Driver虚拟串口工具和本人自写的串口调试工具&#xff0c;请自行baidu下载对应工具 在com.zxy.common.Com_Para.py中添加如下内容 #RS232串口通讯列表 串口号,波特率,…

恒运资本:股票佣金怎么算?

股票佣钱是指证券买卖中券商向出资者收取的手续费。股票买卖中&#xff0c;佣钱是不可避免的一项本钱&#xff0c;出资者需求清楚地了解佣钱的收费规范和怎么核算&#xff0c;以便更好地掌握出资本钱&#xff0c;做出更正确的出资决策。 佣钱收费规范 股票佣钱收费规范&#x…

来文心中国行!专家面对面解读大模型产业实践及AI场景突围

9月1日&#xff0c;文心中国行将走进武汉。政府、高校及企业AI专家将现场分享人工智能与大模型最新政策、趋势、人才培养方案及产业实践案例&#xff0c;深入解读如何抓住大模型时代新机遇&#xff0c;高效实现智能化转型升级弯道超车。 加快实现高水平科技自立自强&#xff0c…

融云获评「创业邦 · 最具创新价值出海服务商」

点击报名&#xff0c;9 月 21 日融云直播课 8 月 22 日 - 23 日&#xff0c;创业邦主办的“2023 DEMO WORLD 全球开放式创新大会暨企业出海未来大会”在上海举行&#xff0c;会上发布了“创业邦 2023 出海企业创新价值 100 强”&#xff0c;融云荣登榜单&#xff0c;获评“最具…

如何安装和使用TypeScript。

目录 安装nodenpm下载typescript使用TypeScript总结 TypeScript是一种流行的编程语言&#xff0c;它是JavaScript的超集&#xff0c;具有更多的扩展功能和类型安全性。在本文中&#xff0c;我们将介绍如何安装和使用TypeScript。 安装node 要安装TypeScript&#xff0c;您需要…

Linux 查看当前文件夹下的文件大小

1.直接查看: ll 或者 ls -la #查看文件大小&#xff0c;以kb为单位 ll#查看文件大小&#xff0c;包含隐藏的文件&#xff0c;以kb为单位 ls -la2.以 M 或者 G 为单位查看&#xff0c;根据文件实际大小进行合适的单位展示 du -sh *

第62步 深度学习图像识别:多分类建模(Pytorch)

基于WIN10的64位系统演示 一、写在前面 上期我们基于TensorFlow环境做了图像识别的多分类任务建模。 本期以健康组、肺结核组、COVID-19组、细菌性&#xff08;病毒性&#xff09;肺炎组为数据集&#xff0c;基于Pytorch环境&#xff0c;构建SqueezeNet多分类模型&#xff0…

蓝牙模块产品认证-国际市场准入准则之BQB认证认证基础知识

蓝牙模块产品认证-国际市场准入准则之BQB认证认证基础知识 前言 BQB认证介绍 Bluetooth SIG Bluetooth SIG 由八大无线通讯行业巨头成立的一家公司&#xff0c;专门负责蓝牙规格开发、 技术推广及资格认证工作,成立于1998年。 Bluetooth SIG拥有Bluetooth Trademarks 免费地授…