AgentSkillsCN

geostatspy

借鉴GSLIB的地质统计学库,用于变异函数分析、克里金插值与模拟。当Claude需要执行以下操作时使用:(1) 计算实验变异函数;(2) 拟合变异函数模型;(3) 执行简单克里金或普通克里金插值;(4) 运行序贯高斯模拟(SGSIM);(5) 应用正态得分变换;(6) 对空间数据进行去聚类处理;(7) 生成多种实现方案以评估不确定性。

SKILL.md
--- frontmatter
name: geostatspy
description: |
  GSLIB-inspired geostatistics library for variogram analysis, kriging, and
  simulation. Use when Claude needs to: (1) Calculate experimental variograms,
  (2) Fit variogram models, (3) Perform simple/ordinary kriging, (4) Run
  sequential Gaussian simulation (SGSIM), (5) Apply normal score transforms,
  (6) Decluster spatial data, (7) Generate multiple realizations for uncertainty.

GeostatsPy - Geostatistical Analysis

Quick Reference

python
import geostatspy.GSLIB as GSLIB
import geostatspy.geostats as geostats
import pandas as pd

df = pd.read_csv('data.csv')
df['npor'], tvpor, tnspor = geostats.nscore(df, 'porosity')  # Transform

lag, gamma, npairs = geostats.gamv(df, 'X', 'Y', 'npor',      # Variogram
    tmin=-9999, tmax=9999, xlag=50, xltol=25, nlag=15,
    azm=0, atol=22.5, bandwh=9999, bandwd=9999)

vario = GSLIB.make_variogram(nug=0.0, nst=1, it1=1, cc1=1.0,  # Model
                              azi1=0, hmaj1=300, hmin1=300)

est, var = geostats.kb2d(df, 'X', 'Y', 'npor', ..., vario=vario)  # Krige

Key Functions

CategoryFunctions
Visualizationlocmap, pixelplt, hist
Variogramgamv, vmodel
Krigingkb2d, kb3d
Simulationsgsim, sisim
Transformsnscore, backtr
Declusteringdeclus

Common Workflows

1. Normal Score Transform

python
df['npor'], tvpor, tnspor = geostats.nscore(df, 'porosity')
original = geostats.backtr(nscore_data, tvpor, tnspor, zmin=0, zmax=0.3)

2. Experimental Variogram

python
lag, gamma, npairs = geostats.gamv(
    df, 'X', 'Y', 'npor',
    tmin=-9999, tmax=9999,    # Trimming limits
    xlag=50, xltol=25,        # Lag distance, tolerance
    nlag=15, azm=0, atol=22.5, bandwh=9999, bandwd=9999)

3. Variogram Model

python
# Types: 1=spherical, 2=exponential, 3=gaussian
vario = GSLIB.make_variogram(
    nug=0.0, nst=1,            # Nugget, number of structures
    it1=1, cc1=1.0,            # Type, sill contribution
    azi1=0, hmaj1=300, hmin1=300)  # Azimuth, major/minor range

4. Kriging (kb2d)

python
est, var = geostats.kb2d(
    df, 'X', 'Y', 'npor', tmin=-9999, tmax=9999,
    nx=50, xmn=25, xsiz=50,    # Grid X: ncells, origin, size
    ny=50, ymn=25, ysiz=50,    # Grid Y
    nxdis=1, nydis=1, ndmin=1, ndmax=10,
    radius=500, ktype=0, skmean=0.0, vario=vario)  # ktype: 0=simple, 1=ordinary

5. Sequential Gaussian Simulation

python
sim = geostats.sgsim(
    df, 'X', 'Y', 'npor', wcol=-1, scol=-1,
    tmin=-9999, tmax=9999, itrans=0,
    ismooth=0, dession=0, dmession=0,
    zmin=-4, zmax=4, ltail=1, ltpar=0, utail=1, utpar=0,
    nsim=1, nx=50, xmn=25, xsiz=50, ny=50, ymn=25, ysiz=50,
    nz=1, zmn=0, zsiz=1, seed=73073,
    ndmin=1, ndmax=10, nodmax=10, radius=500, radius1=500,
    sang1=0, sang2=0, sang3=0, mxctx=10, mxcty=10, mxctz=1,
    ktype=0, vario=vario)

6. Declustering

python
wts, cell_size, ncut = geostats.declus(
    df, 'X', 'Y', 'porosity', iminmax=1, noff=10, ncell=20, cmin=10, cmax=500)
declustered_mean = np.average(df['porosity'], weights=wts)

Variogram Models

CodeModelUse Case
1SphericalMost common, finite range
2ExponentialReaches sill asymptotically
3GaussianVery smooth, parabolic near origin
4PowerUnbounded, fractal-like

Key Parameters

ParameterDescription
nugNugget effect (measurement error + micro-scale variation)
sillTotal variance (nugget + structure contributions)
rangeDistance where correlation becomes negligible
azimuthDirection of maximum continuity (degrees from N)
ktype0=simple kriging (known mean), 1=ordinary kriging

Tips

  1. Always transform to normal scores - Most methods assume Gaussian
  2. Start isotropic - Add anisotropy only if justified by directional variograms
  3. Check variogram pairs - Ensure enough pairs at each lag
  4. Multiple realizations - Use 50-100+ for uncertainty quantification
  5. Back-transform last - Apply to final results only

References

Scripts