carto-spatial-autocorrelation について
carto-spatial-autocorrelation は、CARTO ワークフローで Moran's I を計算し、空間的な集積・分散・ランダム性を調べ、地点を分類する方法を案内します。近傍範囲や距離減衰を設定でき、空間データ分析に利用できます。
主な機能
- 01局所 Moran's I と有意性の計算
- 02HH・HL・LH・LL による地点分類
- 03H3 または 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 の I による空間的自己相関
Moran の I を使用して空間的自己相関を測定し、変数がクラスター化、分散、またはランダムのいずれを示すかを判定するとともに、各位置を HH/HL/LH/LL の象限に分類する CARTO Workflows を構築します。
前提条件:開発プロセス、JSON 構造、検証コマンドについては carto-create-workflow を読み込んでください。このドキュメントでは、両方のアクセス方法(接続時は MCP サーバーの create_workflow、validate_workflow、run_workflow などのワークフローツール、そうでない場合は carto workflows CLI、および carto-basics/references/access-paths.md のルーティングシグナル)を扱います。
Moran の I と Getis-Ord Gi の使い分け*:
- Moran の I:「クラスター化が見られるか」を判定し、クラスターの種類(HH、HL、LH、LL)に分類するとともに、空間的外れ値(HL、LH)を特定します。
- Getis-Ord Gi*:「ホットスポット/コールドスポットはどこか」を特定し、クラスター化の大きさ(z スコア)を測定します。
手順
Moran の I ワークフローは、次のパイプラインに従います。
Source Data -> (Filter) -> Spatial Indexing (H3) -> Aggregation -> Moran's I -> (Filter Significant) -> Save
ステップ 1:ソースデータを読み込む
native.gettablebyname を使用します。入力テーブルには通常、ポイントジオメトリまたは事前にインデックス化されたグリッドデータが含まれます。
成功条件:ノードが、ジオメトリ列(例:geom)または既存の空間インデックス列を含むテーブルを出力します。
ステップ 2:フィルタリングする(必要な場合)
native.wheresimplified または native.where を使用して、データセットを絞り込みます(例:カテゴリ、日付範囲、null 以外の値でフィルタリングします)。
成功条件:出力には、分析に関連するサブセットのみが含まれます。
ステップ 3:空間インデックスを作成する
native.h3frompoint を使用して、ポイントジオメトリを H3 セルに変換します。
解像度の目安 -- 解像度が高いほどセルが小さくなり、より局所的なパターンを捉えられます。
| 解像度 | セルサイズ | 用途 |
|---|---|---|
| H3 res 7 | 辺の長さ:約5 km | 地区/都市レベルのパターン |
| H3 res 8 | 辺の長さ:約2 km | 近隣レベル |
| H3 res 9 | 辺の長さ:約500m | 街路レベル(Berlin POI チュートリアルで使用) |
成功条件:すべての行に空間インデックス列(例:h3)があります。
ステップ 4:セルごとに集計する
native.groupby を使用して、セルごとに1行となる数値を含む結果を作成します。
- グループ化の対象:空間インデックス列(
h3) - 集計:
geoid,count(またはvalue_col,sum/value_col,avg)
成功条件:出力には、数値列(例:geoid_count)を含む、一意なセルごとにちょうど1行が含まれます。
ステップ 5:Moran の I を実行する
native.moransi を次の設定で使用します。
| 入力 | 説明 | デフォルト |
|---|---|---|
indexcol | H3/Quadbin インデックスを含む列 | h3 |
valuecol | 自己相関を検定する数値列 | geoid_count |
size | K リング近傍の半径(ホップ数) | 3 |
decay | 空間ウェイトの距離減衰関数 | uniform |
減衰オプション:uniform、inverse、inverse_square、exponential。
uniform:K リング内のすべての近傍に等しいウェイトを設定します。exponential:距離に応じてウェイトが指数関数的に減少します(Berlin POI チュートリアルで使用)。
K リングのサイズ:大きくすると近傍範囲が広がり、全体的なパターンが滑らかになります。小さくすると、より局所的な評価になります。近傍サイズの選択は結果に大きく影響します。
成功条件:出力には、すべてのセルについて index、morans_i、p_value、quadrant 列が含まれます。(Snowflake ではこれらが大文字で表示されることについては、「注意点」の Provider の大文字小文字に関する注記を参照してください。)
ステップ 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_workflowmethod: verifyを実行するか、CLI でcarto workflows verify-remote --connection <conn>を実行します。 - 出力列の名前は
h3やquadbinではなくindexです。元のデータと結合する必要がある場合は、名前を変更してください(例:native.renamecolumnを使用)。 valuecolは数値である必要があります。フィーチャーをカウントする場合、グループ化のステップでカウント列を生成する必要があります。未加工のインデックス列を値として渡さないでください。- 解像度が高すぎる状態で対象領域が広いと、セル数が非常に多くなり、処理が遅くなったり、メモリ制限に達したりする可能性があります。まず適度な解像度から始め、調整してください。
- Moran's I は近傍の定義に敏感です。k リングのサイズと減衰関数の選択は、どちらも結果に大きく影響します。選択内容を記録し、代替案のテストも検討してください。
- 象限分類が意味を持つのは、統計的に有意なセルのみです。象限を解釈する前に、必ず
p_valueでフィルタリングしてください。有意でないセルには、偶然どの象限ラベルも表示される可能性があります。 - 減衰の入力パラメーター名は
kernelではなくdecayです。不明な場合は、コンポーネントのスキーマを確認してください。
参照テンプレート
| リソース | 説明 |
|---|---|
| BQ チュートリアル | ベルリンの POI 位置の空間的自己相関を計算する方法(BigQuery) |
| SF チュートリアル | Snowflake 向けの同じチュートリアル |
| ワークフローテンプレート | 「ポイント・オブ・インタレスト位置の空間的自己相関の計算」(CARTO Workspace で利用可能) |
よくあるバリエーション
| バリエーション | 方法 |
|---|---|
| インデックス付け済みデータ | データに H3 / Quadbin 列がすでにある場合は、ステップ 3 を省略します |
| ポイントの代わりにポリゴンを入力 | native.h3frompoint の代わりに native.h3polyfill を使用します |
| 完全なグリッド(隙間なし) | まず対象領域の境界をポリフィルし、その後データで拡充します(ホットスポット分析と同じ方法) |
| Getis-Ord と組み合わせる | 同じ集計済みグリッドに両方の分析を実行し、結果を結合してより詳しく分析します |
| 外れ値のみをフィルタリング | HL と LH の象限を残し、異常な位置を見つけます |