关于 welly
welly 是用于管理和分析测井数据的 Python 工具包,适合处理单井或多井项目。它以井对象组织曲线、层位和元数据,并支持曲线处理与导出。
主要功能
- 01将 LAS 文件载入井对象
- 02管理曲线、层位和元数据
- 03处理并重采样测井曲线
- 04在多井项目中管理井
- 05导出为 LAS、DataFrame 或 CSV
适用场景
- 01检查多井项目中的曲线质量
- 02在解释前清理曲线
- 03按统一深度基准比较不同井
- 04导出处理后的井数据
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ steadfastasart/ geoscience-skills --skill welly安装后在 Claude Code 中输入/welly确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/curve_processing.mdproject_workflows.mdscripts/project_stats.pywell_qc.py详细介绍
welly - 井数据分析
这些示例已使用 welly 0.5.2 验证。此版本会导入
pkg_resources,因此其环境需要 setuptools<81。仓库的科学计算测试依赖项记录了其他经过测试的依赖项版本。
快速参考
from welly import Well, Project
# Load single well
w = Well.from_las('well.las')
# Access data
df = w.df() # DataFrame
gr = w.data['GR'] # Curve object
values = gr.values # numpy array
depth = gr.basis # depth array
# Well info
print(w.name, w.uwi)
print(w.data.keys()) # Available curves
# Load multiple wells
p = Project.from_las('wells/*.las')
for well in p:
print(well.name)
主要类
| 类 | 用途 |
|---|---|
Well | 单口井,包含曲线、位置和层位 |
Project | 由多口井组成的集合,用于多井工作流 |
Curve | 测井曲线,包含深度基准、单位和处理方法 |
基本操作
访问曲线数据
gr = w.data['GR']
print(gr.mnemonic, gr.units) # Metadata
print(gr.start, gr.stop, gr.step) # Depth range
处理曲线
import numpy as np
gr = w.data['GR']
# Clean and filter
gr_clean = gr.despike(window_length=5, z=2)
gr_smooth = gr_clean.apply(window_length=11, func1d=np.nanmean)
w.data['GR'] = gr_clean # Use the cleaned curve in subsequent well exports.
# Optional dimensionless display array; retain GR's physical API units in w.
values = gr_clean.as_numpy().ravel()
finite = np.isfinite(values)
gr_norm = np.full_like(values, np.nan, dtype=float)
if finite.any() and np.ptp(values[finite]) > 0:
gr_norm[finite] = (values[finite] - values[finite].min()) / np.ptp(values[finite])
gr_resampled = gr_clean.to_basis(step=0.5)
gr_window = gr_clean.to_basis(start=1500, stop=1510) # Outside support is NaN.
关于 despike、apply 和 to_basis 参数,请参阅 Curve API。在将处理后的曲线用作解释输入前,请检查滤波是否会影响薄层。
处理地层顶界
w.tops = {
'TopFormationA': 1500.0,
'TopFormationB': 1750.0,
}
for name, depth in w.tops.items():
print(f"{name}: {depth} m")
多井项目
from welly import Project
p = Project.from_las('wells/*.las')
print(f"Loaded {len(p)} wells")
# Filter and analyze
for w in p:
if 'GR' in w.data:
print(f"{w.name}: GR mean={w.data['GR'].values.mean():.1f}")
导出数据
# To DataFrame
df = w.df()
# To LAS file
w.to_las('output.las')
# To CSV
df.to_csv('well_data.csv')
常见曲线助记符
| 助记符 | 描述 | 单位 |
|---|---|---|
| GR | 伽马射线 | GAPI |
| NPHI | 中子孔隙度 | v/v |
| RHOB | 体积密度 | g/cc |
| DT | 声波 | us/ft |
| RT/ILD | 深探测电阻率 | ohm.m |
| CALI | 井径 | in |
提示
- 使用 Project 处理多井工作流——比管理单个文件更轻松
- 检查单位——welly 会跟踪单位,请确保单位一致
- 分析前去尖峰——使用
curve.despike()去除异常值 - 重采样到统一基准——使用
curve.resample()进行跨井比较 - welly 扩展了 lasio——可使用 lasio 的所有功能
何时使用及替代方案
| 工具 | 最适合 |
|---|---|
| welly | 多井项目、曲线处理、地层顶界管理 |
| lasio | 底层 LAS 文件 I/O、标头操作、格式错误的文件 |
| petropy | 岩石物理计算(Vsh、孔隙度、Sw、渗透率) |
需要将井作为包含曲线、顶界和元数据的对象进行管理时,使用 welly——尤其适用于通过 Project 进行多井质控和跨井分析。
仅需读取/写入 LAS 文件、处理格式错误的标头,或精细控制 LAS 格式时,改用 lasio。
重点是地层评价计算(泥质含量、孔隙度、含水饱和度),而非数据管理时,改用 petropy。
常见工作流
加载并质控多井项目
- [ ] Load wells with `Project.from_las('wells/*.las')`
- [ ] Check well count and names: `len(p)`, iterate wells
- [ ] Verify required curves exist in each well (`'GR' in w.data`)
- [ ] Despike and clean noisy curves: `curve.despike()`
- [ ] Resample to common depth basis for cross-well comparison
- [ ] Compute summary statistics per well (mean, min, max)
- [ ] Export cleaned data to LAS or DataFrame
参考资料
脚本
- scripts/well_qc.py - 检查井数据中的间隙和问题
- scripts/project_stats.py - 计算项目级统计数据
评论
支持 Markdown