mcpField
M
movement-trajectory

movement-trajectory

github.com/muendデータ・データベース3755 回インストール2 週間前に更新
リポジトリ

movement-trajectory について

タイムスタンプ付き位置点から、検証済みの移動、滞在、集計パターンを導く移動分析スキルです。サンプリング品質、座標と時刻の扱い、検証、プライバシー保護を重視します。

主な機能

  1. 01サンプリング間隔と軌跡品質の把握
  2. 02位置点のクリーニングと時間ギャップでの分割
  3. 03滞在の検出とトリップの導出
  4. 04道路ネットワークへのマップマッチング
  5. 05プライバシー制御を伴う移動データの集計

活用シーン

  1. 01速度分析前のGPS軌跡のクリーニング
  2. 02車両軌跡からの滞在とトリップの集計
  3. 03プライバシーに配慮した移動フローマップの作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/muend/geoai-skills --skill movement-trajectory

インストール後、Claude Code で/movement-trajectoryを入力して読み込まれたか確認します。

同梱ファイルagents/openai.yamlreferences/authoritative-sources.md

詳細

移動・軌跡分析

目的: ノイズの多いタイムスタンプ付きポイントを、防御可能な移動の事実に変えること。繰り返し発生する失敗パターンは、GPS ノイズ越しに計算された速度(テレポートするポイント → 時速 400 km の歩行者)、信号ドリフトによって捏造される停車、そして個人レベルの軌跡のプライバシーを無視した配信です。

まずデータモデル

軌跡 = オブジェクトごとの順序付けられたフィックス: (object_id, timestamp, x, y, [accuracy, ...])。分析の前に、オブジェクトごとに報告します: フィックス数、時間 範囲、サンプリング間隔の中央値、間隔の分布 — サンプリングレートがすべての手法選択を 左右します(1 秒の車両軌跡と 1 時間に 1 フィックスの動物タグは、同じスキーマを まとった別問題です)。

import movingpandas as mpd
import geopandas as gpd

gdf = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df.lon, df.lat),
                       crs=4326).to_crs(gdf_utm_epsg)
tc = mpd.TrajectoryCollection(gdf, "object_id", t="timestamp")
しきい値の前に CRS と時間基準を宣言する

このスキルにおけるあらゆる距離半径、速度制限、滞在時間は、2 つのことが 数値が使われる前に、回答の中で述べられるまで無意味です:

  1. 投影 CRS — すべての距離と速度の計算がその中で実行されるもの。生の経度/緯度の度に適用された「50 m の停車半径」はどこでも 50 m ではなく、誤差は緯度に比例して拡大します。CRS を明記してください(ローカルな車両群には estimate_utm_crs()、大陸規模の範囲には等距離投影)。
  2. タイムスタンプ基準 — タイムゾーン対応の UTC に正規化されたもの。車両群のログはローカル時刻、DST シフト、ナイーブな文字列が混在します。DST 境界をまたぐ滞在は 1 時間を獲得または失い、停車時間はひっそりと破損します。

半径や時間を提案する前に両方を述べてください。後から注意事項として付け足すのでは ありません。

宣言することは保留することではありません。 不明な CRS やタイムゾーンは、回答する代わりに立ち止まって尋ねる理由にはなりません。明示的に名前を付けた仮定として述べ、それでも手法を提供してください:

距離にはローカル UTM ゾーンを仮定し、タイムスタンプは UTC 正規化が必要なナイーブなローカル時刻であると仮定します — どちらも滞在時間を変えるため、確認してください。

そのうえで、クリーニング手順、パラメータ、感度チェックを示してください。CRS、タイムゾーン、またはファイルを手法の代わりに求める回答は、たとえその質問が妥当であっても、このスキルとしては失敗です。回答と並べて尋ねてください。決して代わりに尋ねてはいけません。ナイーブなタイムスタンプを UTC として黙って扱わないでください — ただし「黙って」が要点です。ラベルを付けて明示した仮定こそが、まさに求められているものです。

クリーニングパイプライン(順番どおりに)

  1. 重複排除: 同一の (object, timestamp) フィックスを削除します。
  2. 精度フィルター: その列が存在する場合、HDOP/精度のしきい値を超えるフィックスを削除します(しきい値と削除率 % を報告します)。
  3. 速度フィルター: そのモードでは不可能な速度を意味するフィックスを削除します(歩行 > 15 km/h が持続、車 > 200 km/h など)。反復してください — 1 つの不良フィックスが 2 つの不良セグメントを生みます(mpd.OutlierCleaner)。
  4. ギャップ分割: 時間的なギャップ(例: 間隔の中央値の 5 倍超)で軌跡を分割します — トンネル/電源オフをまたいで補間すると、移動を捏造します。
  5. ジッターの多い都市キャニオンデータには、オプションの平滑化(Kalman/移動中央値) — 外れ値除去の後、そして停車検出のチューニングより前には決して行いません。

各ステップの集計行: 入力フィックス → 出力フィックス。

停車とトリップ

停車 = 空間的な滞在: 最小継続時間のあいだ距離半径内にあるフィックス(mpd.TrajectoryStopDetector(max_diameter=50, min_duration=timedelta(minutes=5)))。この 2 つのパラメータが結果そのものです — それらを報告し、±50% の感度チェックを実行してください。都市キャニオンのドリフトは 移動を模倣するため、GPS ノイズレベル未満の直径では停車がゼロになります。

トリップ = 停車間のセグメント。トリップごとに提供します: 起点、目的地、 開始/終了時刻、継続時間、長さ、該当する場合は主要モードの推定。OD 行列: トリップ端点をゾーンに集約します(下記のプライバシーを参照)。 結果として得られるフローに関するアクセシビリティの質問 → network-accessibility-analysis。

マップマッチング

生の GPS は道路上にはありません。道路に紐づくあらゆる主張(走行距離、街路レベルの流動、速度超過)については、まずネットワークにマッチングしてください:

  • ツール:Valhalla(Meili)、OSRM の match、または mappymatch。HMM ベースのマッチャーが標準です。
  • サンプリング間隔が約 30 秒を超えるとマッチング精度が急激に低下します — マッチ信頼度と未マッチ点の割合を報告し、未マッチのジオメトリを黙って保持しないでください。
  • 動物のトラックやオフロードの移動をマップマッチングしてはいけません(当然ですが)— また、生のノイズの多いフィックスから「移動距離」を計算しないでください(ノイズは経路長を約 5〜20% 膨らませます)。まず平滑化し、手法を明記してください。

集計分析

  • フローマップ / デザイアライン:プロット前に OD ペアを集計します(配信には cartography-geoviz)。ヘアボール回避 = ゾーンレベルの集計 + 最小フロー閾値。
  • 密度:フィックスの KDE またはヘックスビンか、トリップのそれか — フィックスは低速移動を過大評価します(滞在 = 多数のフィックス)。トリップベースまたは時間加重密度を使用し、どちらかを明記してください。
  • 時空間クラスタリング(共在、コンボイ):ST-DBSCAN 系。空間と時間の両方のクラスターパラメータを一緒に報告します。
  • 系列 / 周期性:行動に関する主張を行う前に、オブジェクトクラスごとの時間帯 × 曜日の活動マトリクスを作成します。

プライバシー — 任意ではありません

個人の軌跡はほぼどこでも個人データであり(GDPR など)、再識別が容易であることで悪名高いです(自宅 / 職場のアンカーペアでほとんどの人が特定されます)。デフォルト:共有前に集計(ゾーンは k オブジェクト以上、k 未満のセルは抑制、典型的な k = 5〜10)、自宅付近のトリップ端点を切り捨て、明示的な許可なく生の個人トレースを公開しないこと。すべての成果物に適用した匿名化を明記してください。

検証プロトコル

  1. クリーニング後のモード別速度ヒストグラム — 裾は物理的に妥当でなければなりません。
  2. サンプル軌跡 3 件(生 vs クリーニング済み vs マッチング済み)をベースマップ上に表示。
  3. 停止検出の感度:パラメータ ±50%、停止数の変化を報告。
  4. OD 合計がトリップ数と整合する(アカウンティング)。

落とし穴チェックリスト

  • ギャップをまたいだ、または外れ値フィックスを通した速度計算。
  • 生の(平滑化・マッチングされていない)フィックスからの移動距離。
  • GPS ノイズ以下の半径で検出された停止、またはトリップとしてカウントされたドリフト。
  • 混在するタイムゾーン / DST の跳びによるファントムテレポート。
  • フィックス密度マップを移動密度マップとして読んでしまう。
  • 集計 / 抑制なしで出荷された個人トレース。
  • オブジェクト別には分割されているが、時間的ギャップ別には分割されていない軌跡。

実行契約

  • ワークフロー: 識別子、時刻、CRS を検証し、トラックをセグメント化し、不可能なフィックスを除去し、停止またはトリップを推定し、必要に応じてマップマッチングし、集計し、プライバシー制御を適用し、検証します。
  • 判断ルール: 観測されたタイムスタンプ付き移動には軌跡手法を、可能な経路やアクセスにはネットワーク分析を、系列と識別情報が欠如している場合には点パターン手法を使用します。
  • 検証プロトコル: 速度とギャップの分布を検査し、生とクリーニング済みのサンプルをマッピングし、停止パラメータを摂動させ、トリップ数と OD 数を整合させ、開示リスクを監査します。
  • 失敗モード: タイムゾーンの曖昧さ、長いギャップ、非現実的な速度、不十分なネットワークマッチング、疎なサンプリング、または再識別リスクがある場合、結果を抑制または限定します。
  • 成果物: クリーニング済み軌跡または承認済み集計、セグメンテーションルール、品質レポート、派生した停止 / トリップテーブル、プライバシー処理、マップ、および制限事項。
  • ソースの鮮度: フォーマット、ライブラリ、またはプライバシーに関するガイダンスを使用する前に権威あるソースレジストリを参照し、確認日を記録してください。

コメント