2. 实际采剥量数据清洗与日/班次口径统一

多源采剥量记录的口径差异从哪来

卡车计数、地磅称重和调度系统三路数据在进入偏差计算前,必须先统一到同一“计量对象 + 时间粒度 + 单位”上。露天矿常见的不一致有三类:重复计量(同一车次被地磅与调度各记一次,或重车/空车两次过磅被合并错误)、缺失记录(地磅故障、网络中断导致某班次无数据)、单位与口径混用(地磅给吨、卡车计数给车数、调度给立方米,且松散系数不同)。下面的图给出三源数据到统一日/班次口径的处理链与关键判据。

三源采剥量数据清洗与日/班次口径统一处理链 卡车计数记录 车次号 / 时间 / 台阶 单位:车 地磅称重记录 车牌 / 毛重 / 皮重 / 时间 单位:t 调度系统记录 车次 / 装载点 / 卸载点 单位:m³(松散体积) 清洗与口径统一 ① 车次号去重(保留地磅优先) ② 净重 = 毛重 − 皮重 ③ 体积→吨:×ρ×K(松散系数) ④ 车数→吨:×平均载重 缺失记录补缺 同班次同台阶均值插补 无参照则标记“待核”,不参与偏差 地磅故障班次用调度体积折算 时间归集 班次边界:08:00 / 20:00 跨零点车次归入起始班 日口径 = 两班次之和 按台阶/采区分别汇总 统一口径表 日期 / 班次 台阶 / 采区 采剥量(t) 数据来源标记 一致性校验(进入偏差计算前) 三源同班次偏差 > 5% → 回查原始记录 单班采剥量为负或超设备能力 → 标记异常 回查 关键参数与判据 ρ(原岩密度,t/m³):按矿岩类型取值,如铁矿石 3.3、废石 2.6;K(松散系数):1.25~1.45,调度体积 × ρ ÷ K 折算为原岩吨位。 平均载重:由近 7 天有效地磅净重均值估计,用于车数→吨换算;班次边界固定为 08:00 与 20:00,跨零点按起始班归属。 去重优先级:地磅净重 > 调度体积折算 > 车数×平均载重;同一车次号仅保留一条,来源标记写入统一口径表以便追溯。

清洗规则的具体实现

以某露天铁矿一个班次(08:00–20:00)的原始记录为例,说明去重、补缺与换算的落地方式。示例参数:原岩密度 ρ=3.3 t/m³,松散系数 K=1.35,平均载重按近 7 天地磅均值取 62 t/车。

原始记录问题处理动作统一后结果
车次 T1023:地磅净重 64.2 t;调度体积 26 m³同一车次双源重复保留地磅,调度记录标记为重复64.2 t(来源:地磅)
车次 T1045:仅调度体积 30 m³,无地磅地磅漏记体积折算:30×3.3÷1.3573.3 t(来源:调度折算)
车次 T1067:仅卡车计数 1 车无重量数据车数×平均载重:1×6262.0 t(来源:计数估算)
班次 14:00–16:00 地磅通信中断整段缺失用同班次调度体积折算补缺按折算值计入,标记“补缺”

去重与换算的核心逻辑可用如下 Python 片段表达(pandas 环境,输入为三张原始表):

import pandas as pd

RHO, K, AVG_LOAD = 3.3, 1.35, 62.0

def unify_shift(truck, weigh, dispatch):
    # 1) 地磅净重
    weigh = weigh.copy()
    weigh["net_t"] = weigh["gross_t"] - weigh["tare_t"]
    weigh["src"] = "地磅"

    # 2) 调度体积折算为原岩吨位
    dispatch = dispatch.copy()
    dispatch["net_t"] = dispatch["volume_m3"] * RHO / K
    dispatch["src"] = "调度折算"

    # 3) 车数估算
    truck = truck.copy()
    truck["net_t"] = truck["trips"] * AVG_LOAD
    truck["src"] = "计数估算"

    # 4) 按车次号合并,优先级:地磅 > 调度 > 计数
    order = {"地磅": 0, "调度折算": 1, "计数估算": 2}
    allrec = pd.concat([weigh, dispatch, truck], ignore_index=True)
    allrec["prio"] = allrec["src"].map(order)
    allrec = allrec.sort_values(["trip_id", "prio"]).drop_duplicates("trip_id", keep="first")

    # 5) 按班次、台阶汇总
    out = allrec.groupby(["shift_id", "bench"], as_index=False).agg(
        qty_t=("net_t", "sum"), src=("src", lambda s: "+".join(sorted(set(s)))))
    return out

# 示例调用
# result = unify_shift(truck_df, weigh_df, dispatch_df)
# print(result)
补缺时优先使用同班次同台阶的调度折算值;若调度也无记录,才用同班次同台阶其他车次的均值插补,并在来源字段写入“插补”,此类记录在偏差诊断中单独标注,避免把估算值当作实测值参与阈值判定。

口径统一后的校验与判读

统一口径表生成后,需做三项校验再交给偏差计算:其一,同一班次三源折算值互差超过 5% 时回查原始记录,常见原因是松散系数取值与矿岩类型不符;其二,单班采剥量为负或超过设备能力上限(如单台电铲班产 8000 t)时标记异常;其三,日口径应等于两个班次之和,若不等说明跨零点车次归属有误。校验通过的数据才进入后续时间序列对齐与偏差曲线构建。

  • 去重键:车次号 + 日期,避免同一车次在重车、空车两次过磅时被重复计入。
  • 单位链:m³(松散)→ ÷K → m³(原岩)→ ×ρ → t,方向不可颠倒。
  • 来源标记:每条汇总记录保留“地磅/调度折算/计数估算/插补”,供偏差诊断时区分实测与估算。