我正在使用geopandas读取瑞士直辖市的shapefile,即municipalities.shp。对于170我有人口信息,即population.csv从文件可以在此仓库here中找到。

是否可以通过所谓的BFS number合并信息。

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个城市的人口是否在空间上自相关。

最佳答案

是的你可以。首先,您需要确保传递地理数据框,代码返回的是熊猫数据框:

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的工具。我将按照libpysal的新结构使用esdapysal软件包。

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 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/

10-08 02:37