我正在使用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
的新结构使用esda
和pysal
软件包。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/。