关于 carto-spatial-autocorrelation
carto-spatial-autocorrelation 指导使用 CARTO 工作流计算 Moran's I,判断数值的空间聚集、离散或随机分布,并为位置分类。适用于空间数据分析人员,可按邻域和距离衰减设置分析参数。
主要功能
- 01计算局部 Moran's I 与显著性
- 02按 HH、HL、LH、LL 分类
- 03使用 H3 或 Quadbin 空间索引
- 04配置邻域半径与距离衰减
- 05筛选显著区域并保存结果
适用场景
- 01识别相似数值的空间聚集
- 02发现高低值空间异常点
- 03分析兴趣点的空间分布
- 04比较不同邻域参数下的结果
MCP 相关
该技能指导构建 CARTO 工作流;连接 MCP 服务时,可使用 `create_workflow`、`validate_workflow` 和 `run_workflow` 等工具,也可使用 CLI。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ cartodb/ agent-skills --skill carto-spatial-autocorrelation安装后在 Claude Code 中输入/carto-spatial-autocorrelation确认已加载。
详细介绍
使用 Moran's I 进行空间自相关分析
构建 CARTO 工作流,使用 Moran's I 衡量空间自相关,判断变量是否呈现聚类、离散或随机分布,并将每个位置划分到 HH/HL/LH/LL 象限。
前提条件:加载 carto-create-workflow,了解开发流程、JSON 结构和验证命令——它涵盖两种访问路径(已连接时使用 MCP 服务的工作流工具,例如 create_workflow、validate_workflow 和 run_workflow;否则使用 carto workflows CLI;路由信号见 carto-basics/references/access-paths.md)。
何时使用 Moran's I,何时使用 Getis-Ord Gi*:
- Moran's I:“是否存在聚类?”+ 将聚类划分为不同类型(HH、HL、LH、LL)+ 识别空间离群值(HL、LH)
- Getis-Ord Gi*:“热点/冷点在哪里?”+ 聚类程度(z 分数)
说明
Moran's I 工作流遵循以下流程:
Source Data -> (Filter) -> Spatial Indexing (H3) -> Aggregation -> Moran's I -> (Filter Significant) -> Save
步骤 1:加载源数据
使用 native.gettablebyname。输入表通常包含点几何或预先建立索引的网格数据。
成功条件:节点输出一个包含几何列(例如 geom)或现有空间索引列的表。
步骤 2:筛选(如有需要)
使用 native.wheresimplified 或 native.where 缩小数据集范围(例如按类别、日期范围或非空值筛选)。
成功条件:输出仅包含与分析相关的子集。
步骤 3:建立空间索引
使用 native.h3frompoint 将点几何转换为 H3 单元格。
分辨率指南——分辨率越高 = 单元格越小 = 模式越局部:
| 分辨率 | 单元格大小 | 使用场景 |
|---|---|---|
| H3 res 7 | 边长约 5 km | 区域/城市级模式 |
| H3 res 8 | 边长约 2 km | 街区级 |
| H3 res 9 | 边长约 500 m | 街道级(柏林 POI 教程中使用) |
成功条件:每一行都包含空间索引列(例如 h3)。
步骤 4:按单元格聚合
使用 native.groupby,为每个单元格生成一行,并包含一个数值:
- 分组依据:空间索引列(
h3) - 聚合:
geoid,count(或value_col,sum/value_col,avg)
成功条件:输出中每个唯一单元格恰好有一行,并包含一个数值列(例如 geoid_count)。
步骤 5:运行 Moran's I
使用 native.moransi,并设置以下参数:
| 输入 | 说明 | 默认值 |
|---|---|---|
indexcol | 包含 H3/Quadbin 索引的列 | h3 |
valuecol | 用于检测自相关的数值列 | geoid_count |
size | K 环邻域半径(跳数) | 3 |
decay | 空间权重的距离衰减函数 | uniform |
衰减选项:uniform、inverse、inverse_square、exponential。
uniform:K 环内所有邻居的权重相同exponential:权重随距离呈指数递减(柏林 POI 教程中使用)
K 环大小:越大 = 邻域范围越广 = 全局模式越平滑。越小 = 评估越局部。邻域大小的选择会显著影响结果。
成功条件:输出包含每个单元格对应的 index、morans_i、p_value 和 quadrant 列。(请参阅“注意事项”中的提供方大小写说明——Snowflake 会以大写形式显示这些列名。)
步骤 6:筛选显著结果(建议)
使用 native.where,仅保留具有统计显著性的单元格。象限分类仅对显著单元格有意义。
常见筛选条件:
p_value < 0.05——所有显著单元格(95% 置信度)p_value < 0.05 AND quadrant = 'HH'——仅保留高值聚类p_value < 0.05 AND (quadrant = 'HL' OR quadrant = 'LH')——仅保留空间离群值
成功条件:仅保留具有统计意义的空间模式单元格。
步骤 7:保存
使用 native.saveastable 持久化结果。无需转换几何,H3/Quadbin 列即可直接在 CARTO Builder 中可视化。
成功条件:工作流通过验证后,可通过 create_workflow(MCP)或 carto workflows create(CLI)上传。
输出列
| 列 | 含义 |
|---|---|
index | 空间索引单元 ID(H3 或 Quadbin) |
morans_i | 局部 Moran's I 值——正值表示邻近单元相似,负值表示邻近单元不同 |
p_value | 统计显著性——值越低,置信度越高 |
quadrant | 聚类分类:HH、HL、LH 或 LL |
解读结果
全局 Moran's I(整体模式):
- > 0 = 空间聚类(相似值彼此相邻)
- < 0 = 空间离散(不同值彼此相邻)
- 接近 0 = 空间随机分布
局部象限(逐单元分类):
| 象限 | 含义 | 解读 |
|---|---|---|
| HH | 高值被高值包围 | 聚类核心 |
| LL | 低值被低值包围 | 低值聚类 |
| HL | 高值被低值包围 | 空间异常值(高异常) |
| LH | 低值被高值包围 | 空间异常值(低异常) |
注意事项
- 提供商大小写规则和 SQL 方言。 此技能中的列名采用小写(BigQuery / Databricks / Postgres / Redshift 惯例)。在 Snowflake 上,未加引号的标识符会以大写形式显示——在表达式中请使用
H3、INDEX、MORANS_I、P_VALUE、QUADRANT、GEOID_COUNT。有关大小写规则和 SQL 方言对应关系,请参阅carto-create-workflow/references/providers/<provider>.md。 - Moran's I 组件需要 Analytics Toolbox。离线验证无法解析 AT 位置——运行前请通过远程验证确认:通过 MCP 使用
validate_workflow的method: verify,或在 CLI 上运行carto workflows verify-remote --connection <conn>。 - 输出列名为
index,而不是h3或quadbin。如果需要与原始数据联接,请重命名该列(例如使用native.renamecolumn)。 valuecol必须是数值型。如果要统计要素数量,分组步骤必须生成计数列——不要将原始索引列作为值传入。- 分辨率过高且区域过大 = 单元数量极多,可能导致运行缓慢或超出内存限制。请从中等分辨率开始,再逐步细化。
- Moran's I 对邻域定义很敏感。k 环大小和衰减函数的选择都会实质性地影响结果。请记录所选参数,并考虑测试其他选项。
- 象限分类只有对统计显著的单元才有意义。解读象限前,请务必按
p_value筛选——不显著的单元可能会因偶然而显示任意象限标签。 - 衰减输入参数名为
decay(不是kernel)。如有疑问,请检查组件架构。
参考模板
| 资源 | 描述 |
|---|---|
| BQ 教程 | 计算柏林 POI 位置的空间自相关(BigQuery) |
| SF 教程 | Snowflake 版同一教程 |
| 工作流模板 | “计算兴趣点位置的空间自相关”(可在 CARTO Workspace 中使用) |
常见变体
| 变体 | 方法 |
|---|---|
| 预索引数据 | 如果数据已有 H3/Quadbin 列,则跳过步骤 3 |
| 使用多边形而非点作为输入 | 使用 native.h3polyfill 而不是 native.h3frompoint |
| 完整网格(无空缺) | 先对研究区域边界进行 Polyfill,再用数据丰富网格(与热点分析采用相同方法) |
| 与 Getis-Ord 结合 | 对同一聚合网格运行两种分析,然后联接结果,以获得更全面的分析 |
| 仅筛选异常值 | 保留 HL 和 LH 象限,以查找异常位置 |