mcpField
V
verde

verde

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

verde について

Verdeは、散在する空間データのグリッド化に使うPythonスキルで、地球科学者やデータ分析者を対象とします。複数のグリッダーに、データ削減、トレンド処理、パイプライン、交差検証を組み合わせられます。

主な機能

  1. 01スプライン・線形・三次グリッド化
  2. 02密集データのブロック削減
  3. 03多項式トレンドの推定と除去
  4. 04組み合わせ可能な処理パイプライン
  5. 05グリッダー選択の交差検証
  6. 06距離に基づくマスキング

活用シーン

  1. 01散在する標高測定値の補間
  2. 02投影座標のグリッド化
  3. 03グリッド化前の集中サンプル削減
  4. 04補間方法の検証
  5. 05観測点から遠いグリッドセルのマスキング

インストール

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

$npx skills add https://github.com/steadfastasart/geoscience-skills --skill verde

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
cross_validation.md
gridders.md
scripts/
grid_data.py

詳細

Verde - 空間データのグリッディング

クイックリファレンス

import verde as vd

# Basic gridding
spline = vd.Spline()
spline.fit(coordinates, values)  # coordinates = (lon, lat) tuple
grid = spline.grid(spacing=0.1)  # Returns xarray Dataset

# Access result
elevation = grid.elevation.values

# Save output
grid.to_netcdf('output.nc')

主なクラス

クラス目的
Spline双調和スプライン補間(滑らかで、外挿に適しています)
LinearDelaunay 三角形分割(高速で、外挿はできません)
Cubic3 次補間(中程度の滑らかさ)
Chain処理ステップのパイプライン
BlockReduceデータをブロック平均値/中央値に間引きます
Trend多項式トレンドのフィッティングと除去
Vector2 成分ベクトルデータのグリッド化

基本操作

散布データをグリッド化する
coordinates = (longitude, latitude)  # Tuple of 1D arrays
values = elevation  # 1D array

spline = vd.Spline()
spline.fit(coordinates, values)
grid = spline.grid(spacing=0.1, data_names=['elevation'])
デカルト座標に投影する
import pyproj

projection = pyproj.Proj(proj='merc', lat_ts=data_lat.mean())
proj_coords = projection(longitude, latitude)

spline = vd.Spline()
spline.fit(proj_coords, values)
grid = spline.grid(spacing=1000)  # 1000m spacing
大規模データセットをブロック単位で間引く
import numpy as np

reducer = vd.BlockReduce(reduction=np.median, spacing=0.1)
coords_reduced, values_reduced = reducer.filter(coordinates, values)
グリッド化の前にトレンドを除去する
trend = vd.Trend(degree=2)  # Quadratic
trend.fit(coordinates, values)
residuals = values - trend.predict(coordinates)

# Grid residuals, then add trend back
処理パイプライン
chain = vd.Chain([
    ('trend', vd.Trend(degree=1)),
    ('reduce', vd.BlockReduce(np.median, spacing=0.05)),
    ('spline', vd.Spline())
])
chain.fit(coordinates, values)
grid = chain.grid(spacing=0.01)
クロスバリデーション
spline = vd.Spline()
scores = vd.cross_val_score(spline, coordinates, values, cv=5)
print(f"Mean R2: {scores.mean():.3f}")
データから離れた領域をマスクする
grid = spline.grid(spacing=0.1)
mask = vd.distance_mask(coordinates, maxdist=0.2, grid=grid)
grid_masked = grid.where(mask)

グリッドのパラメーター

パラメーター説明
spacingグリッドセルのサイズ(座標と同じ単位)
region境界(西、東、南、北)
shapeグリッドの寸法(n_north、n_east)
adjust'spacing' または 'region' - ぴったり収まるように調整する対象

グリッダーの比較

グリッダー速度滑らかさ外挿
Spline中高良好
Linear高速低なし
Cubic高速中なし

代替手段との使い分け

用途ツール理由
一般的な空間グリッド化VerdeML スタイルの API、パイプライン、クロスバリデーション
基本的な 1D/2D 補間scipy.interpolateよりシンプルな API で、空間データに特化していません
ポテンシャル場のグリッド化Harmonica重力/磁気データ向けに設計された等価ソース
コマンドラインでのバッチグリッド化GMT強力な CLI で、自動化スクリプトに適しています
地球統計学的補間scikit-gstat / pykrigeバリオグラムに基づき、不確実性を扱えます
非常に大規模なデータセット(1,000 万点以上)GMT / GDAL大規模データでのメモリ処理に優れています
ベクトルデータ(GPS 速度)Verde(Vector)2 成分ベクトルのグリッド化機能を内蔵
トレンド除去とグリッド化Verde(Chain)パイプラインで各ステップをすっきり統合できます

Verde を選ぶ場合:散布空間データのグリッド化に、クロスバリデーション、トレンド除去、パイプラインを組み込み、Python らしい scikit-learn スタイルの API を利用したい場合です。 探索的分析や再現可能なワークフローに最適です。

scipy.interpolate を選ぶ場合:空間座標や投影、検証を必要としない単純な補間タスクの場合です。

GMT を選ぶ場合:大規模データセットのコマンドラインによるバッチ処理が必要な場合、またはシェルベースのワークフローと統合し、surface や nearneighbor を使いたい場合です。

よくあるワークフロー

検証付きで散布空間データをグリッド化する
  • 散布点データ(座標+値)を読み込む
  • 必要に応じて地理座標をデカルト座標に投影する
  • データ分布を調べ、クラスターや欠損領域を特定する
  • BlockReduce を適用して、密集したクラスターを間引く
  • Trend(degree=1) または Trend(degree=2) で広域トレンドを除去する
  • cross_val_score() でグリッダーのパラメーターをクロスバリデーションする
  • CV スコアに基づいて Spline(damping=...) または Spline(mindist=...) を調整する
  • 選択したグリッダー(Spline、Linear、または Cubic)を残差にフィッティングする
  • .grid() で規則的な間隔のグリッドに変換する
  • グリッド化した残差にトレンドを戻す
  • distance_mask() を適用して、外挿によるアーティファクトを除去する
  • xarray のプロット機能でグリッドを可視化する:grid.elevation.plot()
  • grid.to_netcdf() で結果を NetCDF に保存する

よくある問題

問題解決方法
外挿の品質が低いdistance_mask() を使って、データから離れた領域をマスクします
大規模データで遅いまず BlockReduce を使います
広域トレンドグリッド化の前に Trend で除去します
間隔が不正座標の単位(度またはメートル)を確認します

参考資料

スクリプト

コメント