2. 温纳装置视电阻率数据格式转换与质量标记
温纳原始记录到 DAT 的字段映射
温纳装置野外记录通常以“测点号 + 电极距 a + 视电阻率 ρa”为主键,而 Res2DInv 的 DAT 文件要求按“测点位置 x、电极距 a、视电阻率、误差/质量标记”组织。转换的核心不是简单改扩展名,而是把野外记录中的排列参数换算成 Res2DInv 能识别的测点位置与层号,同时保留重复观测信息用于质量判定。
温纳排列中,四个电极 AMNB 等间距 a,测点位置取排列中心 x = (x_A + x_B)/2,视电阻率 ρa = 2πa·ΔV/I。Res2DInv 的 DAT 每行格式为:x a ρa err,其中 err 为百分比误差(0 表示无误差,负值表示该点被剔除)。因此转换时需保证 x 与 a 的对应关系与野外记录一致,不能把电极距误填为电极坐标。
转换脚本与质量标记实现
下面给出一个可直接运行的 Python 脚本,读取 CSV 格式的温纳原始记录,完成测点位置换算、重复观测合并、离群值标记,并输出 Res2DInv 可读的 DAT 文件。示例数据为教学假设值,用于演示流程,不代表真实实测结果。
import csv, statistics
# 输入:温纳原始记录 CSV,字段 line, xA, xB, a, rho
rows = []
with open("wenner_raw.csv", newline="", encoding="utf-8") as f:
for r in csv.DictReader(f):
rows.append({
"line": r["line"],
"xA": float(r["xA"]), "xB": float(r["xB"]),
"a": float(r["a"]), "rho": float(r["rho"])
})
# 1) 计算测点位置 x = (xA+xB)/2,按 (x, a) 分组
groups = {}
for r in rows:
x = (r["xA"] + r["xB"]) / 2.0
key = (round(x, 3), r["a"])
groups.setdefault(key, []).append(r["rho"])
# 2) 重复观测合并:取均值,相对偏差>5% 标 err=10
dat = []
for (x, a), vals in groups.items():
mean = statistics.mean(vals)
if len(vals) > 1:
dev = max(abs(v - mean) / mean for v in vals) * 100
err = 10 if dev > 5 else 0
else:
err = 0
dat.append({"x": x, "a": a, "rho": mean, "err": err})
# 3) 离群值检测:同一 a 层内,偏离中位数 >3σ 标 err=-1
by_a = {}
for d in dat:
by_a.setdefault(d["a"], []).append(d)
for a, lst in by_a.items():
rhos = [d["rho"] for d in lst]
med = statistics.median(rhos)
sigma = statistics.pstdev(rhos) if len(rhos) > 1 else 0
for d in lst:
if sigma > 0 and abs(d["rho"] - med) > 3 * sigma:
d["err"] = -1
# 4) 按 x 升序、a 升序输出 DAT
dat.sort(key=lambda d: (d["a"], d["x"]))
with open("line01.dat", "w", encoding="utf-8") as f:
for d in dat:
f.write(f"{d['x']:.2f} {d['a']:.1f} {d['rho']:.2f} {d['err']}\n")
print("DAT 行数:", len(dat))
运行后得到 line01.dat,每行四个字段。Res2DInv 读取时,err=0 表示正常参与反演,err=10 表示该点误差较大但仍参与(权重降低),err=-1 表示该点被剔除。这样既保留了原始观测信息,又让反演程序按质量自动处理。
质量标记判读与验证
转换完成后需做三项检查:① 同一 a 层内 x 是否连续、无重复;② 重复观测的相对偏差是否集中在 5% 以内,若大量超限说明采集质量差;③ 被标 err=-1 的点是否集中在某一电极附近,若是则可能是接地问题而非地质异常。下表为示例数据的检查结果(教学假设值)。
| 检查项 | 判据 | 示例结果 | 结论 |
|---|---|---|---|
| x 连续性 | 同层 x 间隔 = a | a=2 层 x=3,5,7,9,11 | 通过 |
| 重复观测偏差 | ≤5% | 48.2 与 47.9,偏差 0.6% | 通过,取均值 48.05 |
| 离群点 | 偏离中位数 >3σ | x=9, a=2 处 ρa=96.5 | 标 err=-1 剔除 |
| 剔除点分布 | 不集中于单电极 | 仅 1 点,孤立 | 可接受 |
若同一电极附近出现多个 err=-1 点,应先回查该电极的接地电阻记录,确认是接触问题后再决定是否整段剔除,避免误删真实地质异常。
不要把电极距 a 与电极坐标 x 混填。DAT 第二列必须是排列的电极间距(温纳为等间距 a),填错会导致反演层厚与深度比例整体失真。