1 引言
受研究需要,需要对几十份空间数据批量进行冷热点分析,Geoda与ArcGIS等软件不能满足需求,看到Python有PySAL这个空间统计分析的第三方库,看了一下API文档觉得功能挺全面的,像Local Moran’s I、Local G Statistics等常用的空间自相关分析的功能都有,决定尝试一下。
Pysal是一个面向地理空间数据科学的开源跨平台库(详情可见官方网站),重点是用python编写的地理空间矢量数据。它支持空间分析高级应用程序的开发,例如
2 实验步骤
2.1 安装
需要安装pysal、libpysal两个包,可直接通过conda安装
conda install pysal
conda install libpysal
另外本实验还用到了geopandas包
2.2 包的导入
import libpysal
from pysal.esda.getisord import G_Local
2.4 距离权重生成
libpysal是用来生成距离权重矩阵的,PySAL中提供了shapefile读取的接口,可直接读取实验数据生成距离权重矩阵,使用起来非常方便
w = libpysal.weights.Queen.from_shapefile(
'/Users/xxx/data/fishnet_all_new/fishnet_all_new.shp',
idVariable=‘Id’
)
由于本实验的数据是规则渔网,因此使用Queen邻域生成01型的距离权重矩阵比较合适。
2.3 数据读取
通过geopandas包读取实验所需数据
sh = gpd.read_file('/Users/xxx/data/fishnet_all_new')
2.5 计算G_Local
使用esda.getisord中的G_Local函数用以计算Local G
lg = G_Local(sh[‘8-25-05_su'],w,transform='B')
2.6 保存结果
需要保存的计算结果有两个,一个是标准化为Z-score的G值,还有一个是p值,p值按照官方的说法需要除以2
sh_init['Z'] = lg.Zs
sh_init['P'] = lg.p_norm/2
sh_init.to_file('/users/xxx/data/shapefile/sh_GetisOrd_Zs')
2.7 提取冷热点
在显著性水平为0.05下提取冷热点
热点:Z>0 and p<0.05
冷点:Z<0 and p<0.05
不显著:p>0.05
将实验结果使用QGIS打开设定设定条件样式
3 实验结果
最后在QGIS中出图,其中蓝色区域为人口分布冷点,红色区域为人口分布热点。
References
杨喜平, 方志祥, 赵志远, et al. 城市人群聚集消散时空模式探索分析——以深圳市为例[J]. 地球信息科学学报, 2016, 18(4):486-492.
Getis A , Ord J K . The Analysis of Spatial Association by Use of Distance Statistics[J]. Geographical analysis, 1992, 24(3):189-206.