mcpField
S
scikit-gstat

scikit-gstat

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

scikit-gstat について

scikit-gstatは、地理空間データ分析向けのPythonライブラリで、バリオグラム解析とクリギングを行います。方向性・時空間バリオグラム、ロバスト推定器、scikit-learn互換のインターフェースを備えています。

主な機能

  1. 01経験的・理論的バリオグラムの適合
  2. 02通常クリギングによる補間
  3. 03方向性・時空間パターンの分析
  4. 04ロバストなバリオグラム推定器
  5. 05scikit-learnワークフローとの連携

活用シーン

  1. 01測定値の空間相関のモデル化
  2. 02空間グリッド上の値の予測
  3. 03交差検証によるモデル評価

インストール

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

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

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

同梱ファイル

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

references/
kriging_methods.md
variogram_models.md
scripts/
variogram_analysis.py

詳細

SciKit-GStat - 地球統計学

クイックリファレンス

import skgstat as skg
import numpy as np

# Create variogram
V = skg.Variogram(coordinates=coords, values=values, n_lags=15)

# Fit model
V.model = 'spherical'
print(f"Range: {V.parameters[0]:.2f}, Sill: {V.parameters[1]:.2f}")

# Kriging interpolation
ok = skg.OrdinaryKriging(V)
predictions = ok.transform(grid_coords)

主なクラス

クラス用途
Variogram経験バリオグラムと理論バリオグラム
OrdinaryKriging空間相関を用いた補間
DirectionalVariogram異方性バリオグラム
SpaceTimeVariogram時空間解析

基本的な操作

バリオグラムの作成と適合
import skgstat as skg

V = skg.Variogram(
    coordinates=coords,      # (n, 2) array of x, y
    values=values,           # (n,) array of measurements
    n_lags=15,
    maxlag='median'          # or specific distance
)

# Fit model: 'spherical', 'exponential', 'gaussian', 'matern', 'stable'
V.model = 'spherical'

# Get parameters
print(f"Range: {V.parameters[0]:.2f}")
print(f"Sill: {V.parameters[1]:.2f}")
print(f"Nugget: {V.parameters[2]:.2f}")
print(f"RMSE: {V.rmse:.4f}")
通常クリギング
import skgstat as skg
import numpy as np

V = skg.Variogram(coords, values, model='spherical')
ok = skg.OrdinaryKriging(V)

# Create prediction grid
x = np.linspace(0, 100, 50)
y = np.linspace(0, 100, 50)
xx, yy = np.meshgrid(x, y)
grid_coords = np.column_stack([xx.ravel(), yy.ravel()])

# Predict
predictions = ok.transform(grid_coords)
Z = predictions.reshape(xx.shape)

# Get variance
ok.return_variance = True
predictions, variance = ok.transform(grid_coords)
方向性バリオグラム
import skgstat as skg

DV = skg.DirectionalVariogram(
    coordinates=coords,
    values=values,
    azimuth=45,          # Direction in degrees
    tolerance=22.5,      # Angular tolerance
    bandwidth='q33'      # Perpendicular bandwidth
)

# Check anisotropy
for az in [0, 45, 90, 135]:
    DV.azimuth = az
    print(f"Azimuth {az}: Range = {DV.parameters[0]:.2f}")
交差検証
import skgstat as skg
from sklearn.model_selection import cross_val_score

V = skg.Variogram(coords, values, model='spherical')
ok = skg.OrdinaryKriging(V)

scores = cross_val_score(ok, coords, values, cv=5, scoring='neg_mean_squared_error')
print(f"CV RMSE: {np.sqrt(-scores.mean()):.4f}")
ロバスト推定量
import skgstat as skg

# Use robust estimator for noisy data
V = skg.Variogram(
    coords, values,
    estimator='cressie'  # 'matheron', 'cressie', 'dowd', 'genton'
)

モデルのクイックリファレンス

モデル特性
spherical最も一般的で、原点付近では線形です
exponentialシルに到達せず、漸近的に近づきます
gaussian原点付近では放物線状で、滑らかです
matern滑らかさを柔軟に制御できます

代替手段との使い分け

ユースケースツール理由
バリオグラム解析とクリギングscikit-gstatモダンな API、sklearn 互換
GSLIB 形式のシミュレーション(SGSIM)GeostatsPyGSLIB シミュレーションエンジンを完備
トレンド/ドリフトを伴うクリギングpykrige普遍クリギング、回帰クリギング
確率場の生成gstools柔軟な共分散、SRF 生成
時空間バリオグラムscikit-gstatSpaceTimeVariogram を組み込み
本番環境の地質モデリングSGeMS / PetrelGUI、大規模な 3D モデル
ロバストなバリオグラム推定scikit-gstatCressie、Dowd、Genton 推定量
ML パイプラインとの統合scikit-gstatsklearn の fit/transform インターフェース

scikit-gstat を選ぶ場合:バリオグラムの適合とクリギングに、Pythonic で scikit-learn 互換の API が必要な場合に適しています。交差検証や ML パイプラインとの統合を伴う、探索的な地球統計解析に最適です。

GeostatsPy を選ぶ場合:GSLIB 互換のシミュレーションワークフロー(SGSIM、SISIM)が必要な場合や、従来の地球統計学の慣例に沿って作業する場合に適しています。

pykrige を選ぶ場合:外部ドリフト変数を用いた普遍クリギングや、地球統計学と機械学習の予測を組み合わせた回帰クリギングが必要な場合に適しています。

一般的なワークフロー

バリオグラムの適合と通常クリギング
  • 空間データを numpy 配列(座標と値)として読み込む
  • 適切な n_lags と maxlag を指定して Variogram オブジェクトを作成する
  • 推定量を比較する:matheron(デフォルト)と、ノイズの多いデータ向けの cressie(ロバスト)
  • 複数のモデル(spherical、exponential、gaussian)を適合させ、RMSE を比較する
  • 0、45、90、135 度の DirectionalVariogram で異方性を確認する
  • RMSE と視覚的な適合度に基づいて最適なモデルを選択する
  • 適合済みのバリオグラムから OrdinaryKriging オブジェクトを作成する
  • 予測グリッドを定義し、ok.transform(grid_coords) を実行する
  • クリギング分散を取得するには ok.return_variance = True を設定する
  • cross_val_score() で交差検証し、予測品質を評価する
  • 予測値とクリギング分散をマッピングする

よくある問題

問題解決策
バリオグラムが平坦または不安定n_lags と maxlag を調整する(maxlag='median' を試す)
モデルの適合度が低い(RMSE が高い)別のモデルタイプやネスト構造を試す
クリギングが遅すぎる条件付けに使う点の数またはグリッド解像度を減らす
ナゲットが大きすぎる測定誤差を示している可能性があります。ロバスト推定量を試してください
異方性が不明瞭DirectionalVariogram の角度許容差を小さくする

ヒント

  1. Maxlag は調査領域の対角線の約 50% に設定します
  2. ノイズの多いデータには ロバスト推定量(cressie、dowd)を使用します
  3. 複数のモデルを試し、RMSE を比較します
  4. クリギングの前に、方向性バリオグラムで 異方性を確認します

参考資料

スクリプト

コメント