栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python 实现计算moran莫兰指数和local morcan 局部莫兰指数

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 实现计算moran莫兰指数和local morcan 局部莫兰指数

全局莫兰指数(莫兰指数) 和 局部莫兰 是用于计算Spatial autocorrelation(空间自相关性)。

所谓空间自相关性,是指特征信号是否与空间相邻位置存在相关性。
(维基百科:wiki)

大白话翻译就是,二维空间中,所谓的特征是否在空间中具有聚集性或完全随机。

如图:

完全随机 》》》》》》》》》》》》》》》》》》》》》》有空间聚集性

全局莫兰指数公式为:

I = n ∑ i = 1 n ∑ j = 1 n w i , j ∑ i = 1 n ∑ j = 1 n w i , j z i z j ∑ i = 1 n z i 2 I=frac{n}{sum_{i=1}^{n}sum_{j=1}^{n}w_{i,j}}frac{sum_{i=1}^{n}sum_{j=1}^{n}w_{i,j}z_{i}z_{j}}{sum_{i=1}^{n}z_{i}^{2}} I=∑i=1n​∑j=1n​wi,j​n​∑i=1n​zi2​∑i=1n​∑j=1n​wi,j​zi​zj​​

公式里的 n n n代表数据点的个数, w w w是权重,这里是指每个点的欧式距离分之一; z z z是特征数据;从公式中可以看出,左上角 n n n,左下角权重和,右下角所有点的特征值权重平方和都是用来归一化的……重点在公式右上角, i i i是每个点自己, j j j是其他周围的点,所以 I I I是所有点的 自己和周围点特征乘积再被 w w w权重修正后的值。。。当类似脉冲信号的时候, z i z_{i} zi​很大, z j z_{j} zj​很小,所以I 不会很大;当类似随机信号的时候, z i z_{i} zi​很大, z j z_{j} zj​很大,而 w w w距离权重就会很小,所以 I 也很小;只有当自己和临近周围点都很大时候,即出现hotspo的时候,才会使 I I I很大。

python 实现:

python里的包是pysal 中,安装教程 github.

官网里面有教程,有时间可以看下:notebooks.

pysal 是面向地理的工具包,而我们的数据只是一般的散点,只有 x x x, y y y坐标值,所以需要把坐标数据转成pysal 可以识别的geodataframe.

import geopandas as gpd
df = pd.Dataframe(
    {'feature1': ['Buenos Aires', 'Brasilia', 'Santiago', 'Bogota', 'Caracas'],
     'feature2': ['Argentina', 'Brazil', 'Chile', 'Colombia', 'Venezuela'],
     'x': [-34.58, -15.78, -33.45, 4.60, 10.48],
     'y': [-58.66, -47.91, -70.66, -74.08, -66.86],
     'z':[-58.66, -47.91, -70.66, -74.08, -66.86]}) #####我随机写的,不要在乎值
gdf = geopandas.GeoDataframe(
    df, geometry=geopandas.points_from_xy(df.x, df.y))

就可以直接计算全局Moran I值:

from esda.moran import Moran
w = Queen.from_dataframe(gdf) ###############权重
y =gdf.z ##########特征点
moran = Moran(y,w)
moran.I      ####### Moran 值

局部Moran I:

局部Moran I 不止能给出有没有聚集现象,而且也能给出聚集现象的位置。可以通过Moran scatterplot 给出:

第一象限: 高值 且周围的点也是 高值
第二象限 :低值且周围的点是高值
第三象限: 低值且周围的点是低值
第四象限:高值且周围的点是低值


再加入p_value 阈值修正,所以可以得到这些点

简略版的代码如下:

import esda
lisa = esda.moran.Moran_Local(y.astype(np.float64),w)
lisa.I #每个值的Morcan I
lisa.q #置信概率值
#####需要你自己找代码画图
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/487317.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号