6.3 空间统计与热点:从图层里读出模式


文档摘要

6.3 空间统计与热点:从图层里读出模式 本节摘要:空间统计回答"我看到的聚集是真模式还是巧合"——全局莫兰指数检验整图是否空间自相关,热点分析找出局部统计显著的高低值区,核密度把点事件画成连续面。本节讲三类工具的原理、参数与误读陷阱,用信访案件数据完整演示"先验显著、再看分布、最后找点"的分析秩序。 眼见未必为聚 一张标注了三百个投诉事件的地图,看起来总像有聚集——人眼在随机点里也能"看出"星座。反过来,真实的弱聚集又可能被大片底色淹没。图形直觉靠不住,这是空间统计存在的理由:用概率语言回答"若事件完全随机,出现眼前这种紧凑程度的可能性有多大"。可能性小到约定阈值(通常百分之五)以下,才承认"聚集"这个说法。 空间统计的三个层次对应三个问题。全局模式:整张图有没有自相关?

6.3 空间统计与热点:从图层里读出模式

本节摘要:空间统计回答"我看到的聚集是真模式还是巧合"——全局莫兰指数检验整图是否空间自相关,热点分析找出局部统计显著的高低值区,核密度把点事件画成连续面。本节讲三类工具的原理、参数与误读陷阱,用信访案件数据完整演示"先验显著、再看分布、最后找点"的分析秩序。

眼见未必为聚

一张标注了三百个投诉事件的地图,看起来总像有聚集——人眼在随机点里也能"看出"星座。反过来,真实的弱聚集又可能被大片底色淹没。图形直觉靠不住,这是空间统计存在的理由:用概率语言回答"若事件完全随机,出现眼前这种紧凑程度的可能性有多大"。可能性小到约定阈值(通常百分之五)以下,才承认"聚集"这个说法。

空间统计的三个层次对应三个问题。全局模式:整张图有没有自相关?(莫兰指数)局部定位:聚集具体在哪?(热点分析)连续表达:把离散点画成人眼可读的密度面?(核密度)注意第三项只是可视化转换,不自带显著性检验——密度图好看不等于热点成立,这个区分是本节的中心纪律。

图:空间统计三层工具

图:空间统计三层工具

动手:信访投诉数据的三步分析

数据背景:某县 187 个村的月度投诉量(属性)与 3200 个投诉点位置(点事件)。目标是找出需要重点治理的区域。

第一步,全局检验——投诉量按村有没有空间自相关:

import arcpy arcpy.env.workspace = r"K:/gisdata/complaint.gdb" # 空间自相关:村投诉量 反距离权重 距离阈值 3000 米 result = arcpy.stats.SpatialAutocorrelation( "villages_comp", "complaint_n", "GENERATE_REPORT", "INVERSE_DISTANCE", "EUCLIDEAN_DISTANCE", "NONE", "3000 Meters", "", "3000 Meters") # 读取输出报告里的三个关键数 import re msg = result.getMessages() m = re.search(r"Moran's Index = ([\-\d.]+).*?z-score = ([\-\d.]+).*?p-value = ([\d.]+)", msg, re.S) if m: I, z, p = map(float, m.groups()) print(f"莫兰指数 {I} z值 {z} p值 {p}") # 输出: 莫兰指数 0.31 z值 8.7 p值 0.00001 # 解读:p 远小于 0.01 且 z 远大于 2.58 投诉量呈显著正自相关 聚集成立 小于千分之一概率是巧合

INVERSE_DISTANCE(反距离)权重的含义:邻村影响随距离衰减,3000 米是邻域半径,可先用"距离增量"工具扫描多档半径、选 z 值峰值的档位——参数依据数据而非默认。

第二步,局部定位——哪些村构成显著热点:

import arcpy arcpy.env.workspace = r"K:/gisdata/complaint.gdb" # 热点分析:输出带 GiZScore 与 GiPValue 字段的新图层 arcpy.stats.HotSpots("villages_comp", "complaint_n", "village_hotspot", "INVERSE_DISTANCE", "EUCLIDEAN_DISTANCE", "NONE", "3000 Meters", "", "3000 Meters") # 按置信度分级统计 where = "GiBin = 3" # 99% 置信热点 arcpy.management.SelectLayerByAttribute("village_hotspot", "NEW_SELECTION", where) n = int(arcpy.management.GetCount("village_hotspot").getOutput(0)) print(f"99% 置信热点村: {n} 个") # 输出: 99% 置信热点村: 12 个 for row in arcpy.da.SearchCursor("village_hotspot", ["村名", "GiZScore"], where): print(f" {row[0]} z={row[1]:.1f}") # 输出: # 城关东街村 z=6.2 # 城关西街村 z=5.8 # 工业园区社区 z=5.1 ...(热点连片,指向城关与园区两片)

z 分的读法:超过正 2.58 即百分之九十九置信的热点,超过负 2.58 是冷点。本例热点连片出现在城关与工业园区,z 值从中心向外递减——这种"中心高四周缓降"的形态正是真实聚集过程的指纹,若是随机数据的热点则散乱无梯度。

第三步,核密度做表达层:

import arcpy arcpy.env.workspace = r"K:/gisdata/complaint.gdb" # 点事件核密度:搜索半径 1200 米 面积单位平方公里 kd = arcpy.sa.KernelDensity("complaint_pts", "NONE", 1200, "SQUARE_KILOMETERS") kd.save("comp_density") print("密度峰值:", round(kd.maximum, 1), "件每平方公里") # 输出: 密度峰值: 38.4 件每平方公里

搜索半径是核密度最敏感的参数:半径小则尖峰林立,半径大则一马平川。经验起步值可用"银匠法则"(约 0.9 乘以事件数的负五次方乘以面积尺度)或直接用热点分析的距离阈值,两个图配合读——密度图回答"浓度几何",热点图回答"显著与否",各司其职。

三个常见误读

把显著当重大。统计显著只说明"不是巧合",不说明"值得行动"。三点二万件投诉里的热点与三百件投诉里的热点,显著性可以相同,治理优先级完全不同。显著性是科学门槛,不是决策刻度,决策还看绝对量与趋势。

忽略 Modifiable Areal Unit Problem(可变面元问题)。同样的点事件,按村统计是热点,按街道统计可能消失——分析单元的大小与划分方式本身影响结论。稳妥做法是换两三种单元粒度各算一遍,只把"多粒度都显著"的区域列为结论,并在报告里写明所用的统计单元。

对率与对量打架。大村投诉量必然多,直接对量做热点找到的常常只是"人口热点"。对"万人投诉率"做分析才指向真问题。热点分析的输入字段选择,本质是研究设计的判断,不是软件操作。

⚠️ 常见坑:拿核密度图直接当热点结论汇报。密度图没有置信度概念,任何平滑参数下都能"画出"深浅斑块。正确的汇报语言是"热点分析显示 12 个村构成百分之九十九置信热区,核密度图呈现其空间形态"——前半句是结论,后半句是可视化。

💡 关键直觉:空间统计是给直觉装上刹车与放大镜。刹车在先——先问"是不是巧合",防止把噪声当信号;放大镜在后——显著成立才值得细看局部结构。

要点回顾

  • 三层工具各答一问:莫兰答有无、热点答在哪、密度答形态,密度不承担检验职能
  • 显著性的读法:z 过正负 2.58 对应百分之九十九置信,p 值给巧合概率
  • 秩序纪律:先全局后局部再表达,倒过来做容易把可视化当结论
  • 参数有据:距离阈值靠扫描选峰值,核密度半径讲明取值理由
  • 三个误读:显著不等于重大、警惕单元敏感、量与率要分清

第 6 章收束,栅格合奏与统计检验补齐了分析版图的最后一块。第 7 章把这六章积累的完整能力交给代码与云端——脚本化让分析链成为资产,Web GIS 让图层成为组织共享的语言。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U