| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #!/usr/bin/env python3
- """英文键名 -> 中文名映射,供把最终结果表/报告中文化使用。"""
- from __future__ import annotations
- META_CN = {
- "unit": "机组", "cylinder": "缸", "stage": "级", "side": "腔",
- "point_name": "测点", "point": "测点", "label": "测点全名",
- "wave_file_id": "文件ID", "sample_time": "时间", "date": "事件日期", "kind": "故障类型",
- "rpm": "转速", "n_samples": "点数", "p_min": "最小压力", "p_max": "最大压力",
- "p_span": "压力幅度", "bin": "角箱号", "bin_start": "角箱起点", "n_raw": "箱内点数",
- "family": "类别", "type": "类型", "candidate": "是否候选", "scope": "范围",
- "pre": "停机前", "post": "开机后", "delta": "变化量", "mad": "MAD倍数",
- "rel": "相对变化", "score": "总分", "n_metrics": "指标数", "max_mad": "最大MAD",
- "gap_days": "相隔天数", "pre_span_days": "前跨度天数",
- "pre_start": "前段起", "pre_end": "前段止", "post_start": "后段起", "post_end": "后段止",
- "metrics": "指标明细",
- }
- BIN_CN = {
- "mean": "均值", "range": "极差", "std": "标准差", "mad": "中位绝对偏差",
- "slope": "斜率", "roughness": "粗糙度", "p10": "10分位", "p50": "50分位", "p90": "90分位",
- "iqr": "四分位距", "skew": "偏度", "kurt": "峰度",
- "d_abs_mean": "平均|导数|", "d_abs_max": "最大|导数|", "d_rms": "导数RMS",
- "d2_rms": "二阶导RMS", "zero_cross": "导数过零数", "n_extrema": "极值数",
- "d2_abs_max": "二阶导最大", "tv": "总变差", "mean_cross": "过均次数",
- "mobility": "移动度", "complexity": "复杂度",
- }
- CYCLE_CN = {
- "p_suction": "吸气压力", "p_discharge": "排气压力", "pressure_ratio": "压比",
- "suction_frac": "吸气占比", "discharge_frac": "排气占比",
- "angle_min": "最小压力角", "angle_max": "最大压力角",
- "cross_up": "上升穿越角", "cross_down": "下降穿越角",
- "max_rise": "最大上升斜率", "max_fall": "最大下降斜率",
- "max_rise_angle": "最大上升角", "max_fall_angle": "最大下降角",
- }
- FAMILY_CN = {
- "bin": "分箱", "cycle": "整周期", "bin_trend": "分箱趋势", "cycle_trend": "整周期趋势",
- "event_pressure": "事件-整周期", "event_pressure_bin": "事件-分箱",
- "event_vib": "事件-振动", "corr": "日度相关",
- }
- METRIC_CN = {**META_CN, **BIN_CN, **CYCLE_CN}
- # 表头里与指标同名的列需覆盖(mad 列是"MAD倍数",不是"中位绝对偏差"指标)
- HEADER_CN = {
- "metric": "指标", "mad": "MAD倍数", "raw_score": "原始分数", "split": "突变时间",
- "before": "突变前", "after": "突变后", "volatile": "波动类", "day": "日期",
- }
- def col(name: str) -> str:
- return HEADER_CN.get(name, METRIC_CN.get(name, name))
- def metric_col(name: str) -> str:
- return METRIC_CN.get(name, name)
- def translate_headers(fieldnames: list[str]) -> list[str]:
- return [col(name) for name in fieldnames]
- import re as _re
- _METRIC_TOKEN = _re.compile(r"^(.*)(up|dn)(-?\d[0-9.eE+-]*)$")
- def translate_metrics_field(text: str) -> str:
- """把汇总里的 'd_rmsup23.1;stddn4.0;cross_updn4.3' 翻成 '导数RMS↑23.1;标准差↓4.0;上升穿越角↓4.3'。"""
- if not text:
- return text
- parts = []
- for token in str(text).split(";"):
- match = _METRIC_TOKEN.match(token)
- if match:
- name, direction, value = match.groups()
- parts.append(f"{metric_col(name)}{'↑' if direction == 'up' else '↓'}{value}")
- else:
- parts.append(token)
- return ";".join(parts)
|