Python - 如何使用PySAL计算交互式空间自相关(Moran I)?

时间:2017-08-23 12:38:12

标签: python spatial pysal

我在PostgreSQL数据库中有一个点表my_table,其中包含geometry列和其他属性。我有my_table的一些示例数据,如下所示(my_table的属性)。

id  val1
1   72.54513286
2   73.67371014
3   74.204424
4   73.76017279
5   77.7912762
6   77.78789496
7   65.51822878
8   65.5182287
9   74.65885753
10  74.65885753
11  61.18084042
12  60.75827621
13  64.27716322
14  63.69432836
15  75.790405
16  60.95270235
17  79.12399503
18  62.9667706
19  78.1265630

使用Python PySAL包,我想分析一下val1列中的值是否与潜在自相关(Moran I)(通过交互绘制它们)。我预期的交互式空间自相关输出可能像(图像源,here):

expected_output

我是Python新手。有人可以建议我如何使用PySAL做到这一点吗?

2 个答案:

答案 0 :(得分:1)

我猜你的意思是相关性不是自相关的?

https://en.wikipedia.org/wiki/Autocorrelation

你可以改用熊猫吗?

https://pandas.pydata.org/pandas-docs/stable/visualization.html

Pandas correlate

import pandas
import matplotlib.pyplot as plt

data = pandas.read_csv("C:\\Users\\4Sight\\Desktop\\test.csv", sep=" +", usecols=("val1", "val2"))

print data

print data.columns.values

print data["val1"].corr(data["val2"])

plt.figure()
data.plot()
plt.show()

答案 1 :(得分:1)

我一直在使用pysal来计算我的项目中的Moran,这并不是很困难。

你必须有两个对象:

1)一个权重矩阵,它与您试图验证自相关的单元格之间的关系程度。

2)数据

在我的项目中,验证自相关的单元格就像一个马赛克,所以我可以使用方法Contiguity Based Weights来计算权重矩阵,这是有效的。

想象一下,你有一个二维数据矩阵Z来计算你需要的Moran:

import pysal

# Create the matrix of weigthts
w = pysal.lat2W(Z.shape[0], Z.shape[1])

# Crate the pysal Moran object
mi = pysal.Moran(Z, w)

# Verify Moran's I results
print(mi.I)
print(mi.p_norm)

我建议最初使用随机矩阵Z,因为在这种情况下,Moran的结果我应该在0左右,这是一个很好的测试。系统为随机Z数据返回0后,您可以用实际数据替换Z.