mcpField
G
geostatspy

geostatspy

github.com/steadfastasart数据与数据库7371 次安装6 周前更新
代码仓库

关于 geostatspy

GeostatsPy 是面向空间数据分析和 GSLIB 工作流的 Python 地质统计库,提供变差函数分析、克里金、模拟、去聚类和可视化功能。

主要功能

  1. 01正态分数变换与反变换
  2. 02实验变差函数分析与建模
  3. 03二维和三维克里金
  4. 04序贯高斯与指示模拟
  5. 05去聚类和空间可视化

适用场景

  1. 01使用克里金估算空间数值
  2. 02生成实现以分析不确定性
  3. 03分析变差函数与各向异性
  4. 04通过去聚类调整聚集样本

安装

复制下面的命令,在终端中运行。

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

安装后在 Claude Code 中输入/geostatspy确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
gslib_programs.md
simulation_methods.md
scripts/
kriging_example.py

详细介绍

GeostatsPy - 地质统计分析

快速参考

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

关键函数

类别函数
可视化locmap、pixelplt、hist
变异函数gamv、vmodel
克里金kb2d、kb3d
模拟sgsim、sisim
变换nscore、backtr
去聚集declus

常见操作

1. 正态分数变换
df['npor'], tvpor, tnspor = geostats.nscore(df, 'porosity')
original = geostats.backtr(nscore_data, tvpor, tnspor, zmin=0, zmax=0.3)
2. 实验变异函数
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. 变异函数模型
# 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. 克里金(kb2d)
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. 序贯高斯模拟
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. 去聚集
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)

变异函数模型

代码模型用途
1球状模型最常见,有限变程
2指数模型渐近达到基台值
3高斯模型非常平滑,在原点附近呈抛物线状
4幂函数模型无界,类似分形

关键参数

参数描述
nug块金效应(测量误差 + 微尺度变化)
sill总方差(块金 + 结构贡献)
range相关性变得可忽略的距离
azimuth连续性最大的方向(相对北方的角度)
ktype0=简单克里金(均值已知),1=普通克里金

适用场景与替代方案

使用场景工具原因
GSLIB 风格的工作流GeostatsPy将 GSLIB 程序直接移植到 Python
SGSIM / SISIM 模拟GeostatsPy完整的 GSLIB 模拟引擎
空间数据去聚集GeostatsPy内置 declus 函数
现代变异函数 APIscikit-gstatAPI 更简洁,可集成 sklearn
仅进行克里金(不模拟)pykrige专注的 API,支持泛克里金
随机场生成gstools灵活的协方差模型和场生成
大规模 3D 地质建模SGeMS / Petrel基于 GUI,适用于工业工作流
指示变量模拟GeostatsPy(sisim)分类属性模拟

选择 GeostatsPy 的情况:需要在 Python 中使用兼容 GSLIB 的工作流,尤其是进行 序贯模拟(SGSIM/SISIM)、去聚集,或熟悉 GSLIB 参数约定时。最适用于储层表征工作流。

选择 scikit-gstat 的情况:偏好现代 scikit-learn 风格的变异函数分析与克里金 API, 并希望更好地集成到 Python 数据科学工作流中。

选择 pykrige 的情况:只需要克里金插值(不进行模拟),并且需要支持外部漂移或回归克里金的 泛克里金功能。

常见工作流

变异函数分析与克里金插值
  • 将空间数据加载到 pandas DataFrame
  • 使用 GSLIB.locmap() 和 GSLIB.hist() 探索数据
  • 检查聚集情况;如有需要,使用 geostats.declus() 进行去聚集
  • 使用 geostats.nscore() 应用正态分数变换
  • 使用 geostats.gamv() 计算实验变异函数(先计算各向同性)
  • 检查各方向的变异函数以判断各向异性(方位角 0、45、90、135)
  • 使用 GSLIB.make_variogram() 拟合变异函数模型
  • 将模型叠加到实验变异函数上,验证拟合效果
  • 使用 geostats.kb2d() 执行克里金(普通克里金使用 ktype=1)
  • 运行 SGSIM 量化不确定性(50-100 次实现)
  • 使用 geostats.backtr() 对结果进行反变换
  • 使用交叉验证或留出数据进行验证

常见问题

问题解决方案
变异函数未达到基台值增大 nlag 或 xlag,以覆盖完整变程
克里金产生负值在克里金之后而非之前进行反变换
SGSIM 出现伪影检查网格定义(xmn、xsiz)是否与数据范围一致
变异函数对数过少增大 atol(角度容差)或 xltol(滞后容差)
变异函数出现孔穴效应可能表示存在周期性;尝试使用嵌套结构

提示

  1. 始终转换为正态分数——大多数方法都假设数据服从高斯分布
  2. 从各向同性开始——只有在方向变差函数有依据时才添加各向异性
  3. 检查变差函数配对数——确保每个滞后距都有足够的配对数
  4. 进行多次实现——使用 50–100 次以上进行不确定性量化
  5. 最后进行反变换——仅应用于最终结果

参考资料

脚本

评论

支持 Markdown