我正在使用geopandas
读取瑞士各城市的shape文件,即municipalities.shp
。对于 170,我有人口信息,即 population.csv
可以在此存储库 here 中找到其中的文件。 。
是否可以通过所谓的BFS编号
合并信息。
import pandas as pd
import geopandas
mun = geopandas.read_file('municipalities.shp')
pop = pd.read_csv('population.csv')
## merge data
mergedData = pd.merge(mun,pop,left_on='BFS_NUMMER',right_on='BFS')
现在,我拥有 170 个城市中每一个城市的地理信息和人口信息。
我想知道是否可以使用pysal
来检查这170个城市的人口是否存在空间自相关。
最佳答案
是的,可以。首先,您需要确保您正在传递地理数据帧,您的代码正在返回 pandas 数据帧:
import pandas as pd
import geopandas as gpd
mun = gpd.read_file('municipalities.shp')
pop = pd.read_csv('population.csv')
# merge data
mergedData = mun.merge(pop,left_on='BFS_NUMMER',right_on='BFS')
然后您就可以使用pysal
的工具了。我将按照 pysal
的新结构使用 libpysal
和 esda
包。
import libpysal
import esda
weights = libpysal.weights.Queen.from_dataframe(mergedData) # generate spatial weights (Queen in this case)
spatial_auto = esda.Moran(mun[['population']], weights) # calculate Moran's I
首先您必须生成空间权重矩阵。如果你想使用与 Queen 不同的方式,只需关注 https://libpysal.readthedocs.io/en/latest/api.html 。然后生成空间自相关的 Moran's I 指数(全局)。它生成您可能需要的所有属性 ( https://esda.readthedocs.io/en/latest/generated/esda.Moran.html#esda.Moran )。类似的语法适用于 Gamma、Geary's C 或 Getis Ord 自相关指数。
esda 的文档非常好,在 jupyter 笔记本中显示了示例,我建议检查其他信息(例如本地自相关或绘图)- https://esda.readthedocs.io/en/latest/ .
关于Python:如何从 shapefile 计算指标的空间自相关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54092382/