关于 carto-gwr
carto-gwr 是用于构建 CARTO Workflows 的技能,可通过地理加权回归分析变量关系如何随地点变化,并指导数据准备、模型配置和结果保存。
主要功能
- 01从源数据构建 GWR 工作流
- 02按空间网格索引并聚合数据
- 03配置核函数和邻域范围
- 04生成局部系数与拟合指标
- 05保存结果以用于地图展示
适用场景
- 01比较不同街区的预测变量影响
- 02绘制局部回归系数地图
- 03检查模型残差和局部拟合度
MCP 相关
该技能指导用户在连接 MCP 服务时使用 CARTO 工作流工具,例如 create_workflow、validate_workflow 和 run_workflow。它不提供直接的 GWR MCP 工具。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ cartodb/ agent-skills --skill carto-gwr安装后在 Claude Code 中输入/carto-gwr确认已加载。
详细介绍
地理加权回归(GWR)
使用 GWR 构建 CARTO Workflows,以建模因变量与一个或多个自变量之间随空间位置变化的关系。与全局回归(整个研究区域使用一组系数)不同,GWR 会为每个空间单元生成局部系数,从而揭示关系如何随空间变化。例如:“在市中心,卧室数量会使房价增加 5 万美元;而在郊区只会增加 2 万美元。”
前置条件:加载 carto-create-workflow,以了解开发流程、JSON 结构和验证命令——其中涵盖两种访问方式(连接 MCP 服务时,使用 MCP 服务的工作流工具,例如 create_workflow、validate_workflow 和 run_workflow;否则使用 carto workflows CLI;路由信号见 carto-basics/references/access-paths.md)。
说明
GWR 工作流遵循以下流程:
Source Data -> (Filter) -> Spatial Indexing (H3/Quadbin) -> Aggregation (dependent + independent vars per cell) -> GWR -> Save
步骤 1:加载源数据
使用 native.gettablebyname。输入表必须至少包含一个数值型因变量和一个或多个数值型自变量(预测变量)。
成功标准:节点输出包含所需数值列的表。
步骤 2:筛选(如有需要)
使用 native.wheresimplified 或 native.where 缩小数据范围(例如,移除关键列中的空值,或按类别、日期范围筛选)。
成功标准:输出仅包含因变量和所有自变量均有效且非空的行。
步骤 3:空间索引
如果数据尚未建立索引,请将点几何转换为空间索引单元:
- H3 使用
native.h3frompoint - Quadbin 使用
native.quadbinfromgeopoint
如果数据已包含 H3 或 Quadbin 列(预聚合数据集常见),则跳过此步骤。
分辨率指南:
| 分辨率 | 单元大小 | 用途 |
|---|---|---|
| H3 res 7 | 边长约 5 km | 城市级关系 |
| H3 res 8 | 边长约 2 km | 街区级关系 |
| H3 res 9 | 边长约 500m | 街道级关系(需要密集数据) |
成功标准:每行都有一个空间索引列(例如 h3)。
步骤 4:按单元聚合
使用 native.groupby 按单元生成一行,并聚合因变量和所有自变量的值:
- 分组依据:空间索引列(
h3) - 聚合方式:
price,avg,bedrooms,avg,bathrooms,avg(根据实际列调整)
因变量应根据具体情况使用 avg 或 sum 聚合。自变量通常取平均值。
成功标准:输出中每个唯一单元恰好一行,包含目标变量和所有预测变量的数值列。
步骤 5:运行 GWR
使用 native.gwr,参数如下:
| 输入项 | 说明 | 默认值 |
|---|---|---|
index_column | 包含 H3/Quadbin 索引的列 | h3 |
label_column | 要建模的目标变量/因变量(必须为数值型) | - |
features_columns | 预测变量/自变量列(字符串数组) | - |
kernel_function | 邻居的加权函数 | gaussian |
kring_distance | K 环大小(以跳数表示的邻域半径) | 3 |
fit_intercept | 是否拟合截距项 | true |
核函数选项:gaussian(推荐——距离衰减平滑)、uniform、triangular、quadratic、quartic。
K 环大小:控制邻域半径。
- 太小(1-2):系数嘈杂且不稳定。
- 太大(5+):过度平滑,趋近全局回归。
- 建议从
3开始,作为较均衡的默认值。
成功标准:输出包含每个单元的列:index、intercept、每个自变量对应的系数列、r_squared 和 residual。(参见注意事项中的 Provider 大小写说明——Snowflake 会将这些列名显示为大写。)
第 6 步:保存
使用 native.saveastable 持久化结果。空间索引列可直接在 CARTO Builder 中可视化——按系数列为地图设置样式,创建展示空间变化的系数地图。
成功标志:已验证的工作流,可通过 create_workflow(MCP)或 carto workflows create(CLI)上传。
输出列
| 列 | 含义 |
|---|---|
index | 空间索引单元格 ID(H3 或 Quadbin) |
intercept | 局部截距项 |
<variable_name> | 每个自变量的局部系数 |
r_squared | 局部模型拟合度(0-1)——数值越高,局部解释能力越强 |
residual | 观测值与预测值之差 |
注意事项
- 提供商大小写规则与 SQL 方言。 本技能中的列名采用小写(BigQuery / Databricks / Postgres / Redshift 惯例)。在 Snowflake 中,未加引号的标识符会显示为大写——在表达式中引用
H3、INDEX、PRICE、R_SQUARED、INTERCEPT等。有关大小写规则和 SQL 方言对照,请参阅carto-create-workflow/references/providers/<provider>.md。 - GWR 组件需要 Analytics Toolbox。离线验证(通过 MCP 使用
validate_workflow,或使用carto workflows validate)无法解析 AT 位置——运行前请使用仅限 CLI 的carto workflows verify-remote --connection <conn>确认。 - 因变量必须是连续数值变量。分类目标需要采用其他方法(例如分类)。
- 任意变量(因变量或自变量)中含有 null 值的单元格都会从模型中排除。运行 GWR 前,请先筛选或填补 null 值。
- 自变量之间的多重共线性会降低结果质量。如果两个预测变量高度相关(例如
bedrooms和total_rooms),请删除其中一个或将其合并。纳入多个相似变量前,请检查相关性。 - 每个单元格的
r_squared表示局部模型拟合度。许多单元格的数值都很低,说明模型中可能缺少重要预测变量。 features_columns输入是一个列名数组(例如["bedrooms", "bathrooms"]),不是逗号分隔的字符串。- 输出列名为
index,而不是原始空间索引列名。如果要与原始数据联接,请使用native.renamecolumn重命名。 - 高分辨率下,稀疏数据会导致系数不可靠。选择高分辨率前,请确保有足够多的单元格包含所有变量的数据。
参考模板
| 资源 | 描述 |
|---|---|
| BQ 教程:Airbnb 房源价格(GWR) | BigQuery 分步教程:分析柏林 Airbnb 房价与卧室数、浴室数的关系,使用 H3 分辨率 7、kring 3 和 Gaussian 核 |
| SF 教程:Airbnb 房源价格(GWR) | Snowflake 分步教程:针对 Snowflake 调整的相同分析 |
工作流模板(可在 CARTO Workspace 中使用):“应用地理加权回归(GWR)来建模数据中的局部空间关系”
示例用例:分析洛杉矶的 Airbnb 评分——建模 overall_rating 与 value_review、cleanliness、location 的关系,并使用 Data Observatory 的社会人口统计数据进行丰富。使用 H3 分辨率 7、kring 3 和 Gaussian 核。
常见变体
| 变体 | 方法 |
|---|---|
| 预聚合数据(每个网格单元已对应一行) | 跳过第 3 至 4 步,直接运行 GWR |
| 使用 Data Observatory 丰富数据 | 在 GWR 之前添加 native.enrichgrid,纳入社会人口统计预测变量 |
| 比较系数 | 保存结果,然后使用 Builder 分别按各个系数列设置地图样式 |
| 按模型拟合度筛选 | 在 GWR 之后添加 native.where,仅保留 r_squared > 0.5(或其他阈值)的网格单元 |
| 结合热点分析 | 先运行 GWR,然后将残差作为输入传递给 Getis-Ord,以查找过度预测或预测不足的聚类 |