变压器DGA数据集详解:从Excel预处理到故障诊断实战
2026/9/1 11:21:49 网站建设 项目流程

简介:这份DGA数据集以Excel格式整理了357组变压器油中溶解气体的真实测量样本,覆盖7种不同故障类型及正常状态,可用于气体分析诊断法(DGA)下的故障识别与预测研究。数据分为两个工作表:Sheet1提供原始数据,便于探索性分析;Sheet2提供归一化数据,适合直接输入机器学习模型进行训练与验证。压缩包共含2000个文件,整体约81.36MB,除核心Excel数据表外,还包含php、js、css、png等网页展示与脚本处理文件,方便用户结合工具进行可视化或自动化分析。目前已有396人学习/浏览,适合电力系统研究人员、电气工程专业学生以及从事变压器状态维护的工程师使用。借助该数据集,可快速复现DGA故障诊断流程,对比不同算法效果,并为实际运维中的故障预警和状态评估提供数据支撑。 搞变压器故障诊断的人,电脑里如果没有一份像样的DGA数据集,就跟厨师没有案板一样。DGA(Dissolved Gas Analysis,油中溶解气体分析)是变压器状态评估最常用、也是最有效的手段之一。这套Excel格式的DGA数据集,整理的是典型的变压器油中溶解气体浓度记录,配合故障类型标签,可以直接用来做三比值法计算、机器学习模型训练、算法精度验证。不管你是做设备运维的工程师、搞数据分析的算法工程师,还是电力专业的学生,这套数据都能派上用场。

1. 项目整体解读:DGA数据为什么是变压器诊断的硬通货

1.1 先理解变压器为什么要做DGA分析

变压器内部一旦出现过热、放电等异常,绝缘油和固体绝缘材料就会发生裂解,产生氢气、甲烷、乙烷、乙烯、乙炔等特征气体,这些气体大部分会溶解在绝缘油里。DGA分析的核心逻辑就是:取一管油样,提取出溶解气体的组分和浓度,反推设备内部的运行状态。

这个逻辑之所以成立,是因为不同故障类型对应不同的气体产生路径。比如电弧放电会产生大量乙炔,局部放电主要产生氢气,高温过热则以乙烯和甲烷为主。气体组分就像设备内部留下的“指纹”,DGA就是读指纹的技术。更关键的是,这套方法不需要停电,不需要拆卸设备,一台运行中的变压器就能完成状态评估,在电力行业的日常运维里几乎是绕不开的步骤。

1.2 数据集的价值定位

这份Excel格式的DGA数据集,本质上是一份带标签的样本集合。每一行记录代表一次油样检测结果,包含多种特征气体浓度值和对应的故障类型标签。数据集的用途很直接:

  • 验证三比值法、罗杰斯比值法等经典诊断规则的准确率
  • 作为机器学习分类模型的训练集,比如随机森林、XGBoost、SVM
  • 做教学演示,让学生通过真实数据理解故障诊断的完整链路

从实际使用角度看,Excel格式是个非常务实的选择。对比CSV或数据库文件,Excel允许你在一个文件里放多个工作表、做颜色标注、写备注、插入原始记录截图,管理成本和理解成本都低。对于几百条到几千条的中小规模数据,Excel的承载能力完全够用。

2. 数据集字段解析:每一列都不是白给的

2.1 气体指标与辅助字段怎么看

拿一份典型的DGA数据集来看,除了样本编号、设备编号、采样日期这些基础字段外,核心的气体字段一般包括:H₂(氢气)、CH₄(甲烷)、C₂H₆(乙烷)、C₂H₄(乙烯)、C₂H₂(乙炔)、CO(一氧化碳)、CO₂(二氧化碳)。还有一类数据会直接给出总烃含量,或者标注产气速率。

不同气体代表的指向性差异很大。下面这张表整理了常见气体与故障类型的对应关系,日常做诊断时可以参考:

气体组分主要来源典型关联故障
H₂低能放电、电晕放电、油裂解局部放电、电弧放电初期
CH₄低温过热(<300℃)低温过热、轻微放电
C₂H₆中低温过热热性故障早期
C₂H₄高温过热(>500℃)高温过热、热点
C₂H₂电弧放电、高温裂解高能放电、电弧放电
CO / CO₂固体绝缘材料老化纸绝缘过热、老化

这里要提醒一句:单独看某一个气体的绝对值意义不大。比如乙炔浓度只要超过5μL/L就需要高度警惕,但不同电压等级、不同运行年限的变压器,气体标准阈值差异很大。所以数据集里如果带有设备电压等级或容量字段,处理时千万别丢,后面做诊断修正时会用到。

2.2 故障类型标签体系与编码约定

数据集的故障标签通常是分类编码,比如0代表正常,1代表低温过热,2代表中温过热,3代表高温过热,4代表局部放电,5代表低能放电,6代表高能放电。有些数据还会细分出“受潮”或“油流带电”等特殊类型,具体要看数据集的整理口径。

拿到数据后,第一件事就是检查标签分布。我见过不少数据集,标签分布严重不均衡,高能放电样本占了大半,局部放电只有可怜的几个样本。这种情况下直接训练分类模型,模型会偏向样本多的类别,准确率虚高。建议先做一次类别分布统计,如果某个类别样本太少,要么考虑过采样,要么干脆做二分类(故障/正常)降级处理。

3. 数据预处理实操:别拿到Excel就急着建模

3.1 加载Excel数据的正确姿势

从Excel加载数据这一步,看着简单,踩坑的人不在少数。用Python处理时,最常用的是pandas的read_excel函数。很多人遇到的第一个坑是“明明文件路径没错,就是读不出来”,大概率是文件后缀和实际格式不匹配。.xls.xlsx的内部结构不同,read_excel需要指定对应的engine,.xlsxopenpyxl.xlsxlrd

import pandas as pd # .xlsx文件 df = pd.read_excel("dga_dataset.xlsx", sheet_name="Sheet1", engine="openpyxl") # .xls文件 df = pd.read_excel("dga_dataset.xls", sheet_name="Sheet1", engine="xlrd")

读取之后也别急着往下走,先把列名统一。很多手工维护的Excel表里,列名带着空格、换行,甚至同一列在不同行里格式不一。建议第一步做列名清洗:

df.columns = [col.strip().replace(" ", "_").replace("\n", "") for col in df.columns]

还有一个隐患是合并单元格。Excel里的合并单元格在pandas读进来之后,只有左上角有值,其余全是NaN,如果不处理,后面算特征值就全是空。读取时设置header=0之后,最好用df.isnull().sum()检查一下空值分布,对有合并单元格的列做前向填充或删除处理。

3.2 日期字段、文本拼接与格式转换的坑

这份数据集里带采样日期字段,处理日期最容易出问题的是Excel的日期序列号。当你用pd.read_excel读取时,日期列的值已经是datetime类型,这个没问题。但如果你在Excel里手动处理过,或者把数据从其他工具导入Excel,日期可能变成一串数字,比如45000其实是某一天相对于1900年1月0日的序列号。这种时候需要在Excel里设置单元格格式,或者在Python里用pd.to_datetime转换,建议统一成YYYY-MM-DD格式再导出。

还有很多人做数据标注时,喜欢在Excel里用公式拼接文本和日期。比如在新增一列时写="采样日期为"&B2,结果出来的是采样日期为45000,日期变成了序列号。正确做法是用TEXT函数把日期先格式化:

="采样日期为"&TEXT(B2,"yyyy-mm-dd")

如果涉及到时分秒,格式代码要用到hh:mm:ss,完整的写法就是TEXT(B2,"yyyy-mm-dd hh:mm:ss")。别小看这个细节,我见过有人用这种拼接方式生成了几十行样本编号,等到后面做匹配的时候才发现编号全是错的。

这类Excel格式问题解决起来不复杂,核心是理解Excel内部的数据存储机制,日期和时间本质上是数字,展示成什么格式是单元格格式决定的。任何涉及日期拼接、条件筛选、透视表的操作,先确认底层类型是“日期”还是“文本”,否则结果一定会和预期不符。

4. 从数据到诊断:两种经典方法的实操计算

4.1 三比值法(IEC 60599)手动演算

拿到数据之后,最基础的分析手段就是三比值法。它的原理是用三组气体比值来编码故障类型,编码组合对应具体的故障分类。三个比值分别是:

  • 比值1:C₂H₂ / C₂H₄(乙炔/乙烯)
  • 比值2:CH₄ / H₂(甲烷/氢气)
  • 比值3:C₂H₄ / C₂H₆(乙烯/乙烷)

每个比值根据区间范围编码为0、1、2,三组编码组合成三位码,查表得到故障类型。IEC 60599的编码规则大致如下:

比值范围编码
<0.10
≥0.1且<11
≥1且<31(C₂H₄/C₂H₆编码不同,按标准查表)
≥32

实际计算时,我习惯用Python直接算,避免手算出错:

def three_ratio_code(c2h2, c2h4, ch4, h2, c2h6): r1 = c2h2 / c2h4 if c2h4 != 0 else float('inf') r2 = ch4 / h2 if h2 != 0 else float('inf') r3 = c2h4 / c2h6 if c2h6 != 0 else float('inf') # 按IEC 60599规则编码 code1 = 0 if r1 < 0.1 else (1 if r1 < 1 else 2) code2 = 0 if r2 < 0.1 else (1 if r2 < 1 else 2) code3 = 0 if r3 < 1 else (1 if r3 < 3 else 2) return f"{code1}{code2}{code3}"

举个例子,某次检测结果:H₂=150μL/L,CH₄=80μL/L,C₂H₆=20μL/L,C₂H₄=100μL/L,C₂H₂=5μL/L。计算得:

  • C₂H₂/C₂H₄ = 5/100 = 0.05,编码0
  • CH₄/H₂ = 80/150 ≈ 0.53,编码1
  • C₂H₄/C₂H₆ = 100/20 = 5,编码2

组合编码“012”,查表对应“高温过热”。这个结果和变压器油色谱在线监测的实际告警高度吻合,说明数据质量合格。

4.2 大卫三角形法的坐标投影

三比值法虽然经典,但存在边界问题——比值刚好落在临界点附近时,编码会跳变。大卫三角形法是对三比值法的一个重要补充,它把CH₄、C₂H₄、C₂H₂三种气体的相对百分比投影到三角形坐标里,按落点区域判断故障类型。

具体做法是计算三种气体的相对占比:

%CH₄ = CH₄ / (CH₄ + C₂H₄ + C₂H₂) %C₂H₄ = C₂H₄ / (CH₄ + C₂H₄ + C₂H₂) %C₂H₂ = C₂H₂ / (CH₄ + C₂H₄ + C₂H₂)

三个百分比加起来恒等于100%,所以只需要两个值就能在三角形中定位。判断规则是:

  • PD(局部放电):%CH₄ > 98%
  • D1(低能放电):%C₂H₂ > 13%,且%C₂H₄ < 23%
  • D2(高能放电):%C₂H₂ > 13%,且%C₂H₄ ≥ 23%
  • T1(低温过热):%CH₄ < 98%,%C₂H₄ < 20%
  • T2(中温过热):%C₂H₄ 在20%~50%之间
  • T3(高温过热):%C₂H₄ > 50%

在Excel里用散点图加判断公式就能完成这个分类,不需要额外工具。喜欢写代码的话,用matplotlib的tripcolor画三角形分布图,直观展示每个样本的落区,在做数据报告时特别加分。

5. 常见问题与排查技巧实录

5.1 高频问题速查表

数据处理过程中,有一些问题是反复出现的。我整理了一份高频问题速查表,按出现频率排序,供大家参考:

问题现象可能原因排查/解决方案
read_excel报错或返回空表文件是.xlsx但engine指定了xlrd;路径含中文显式指定engine;路径用英文;先os.path.exists检查
日期列读取后是数字Excel日期序列号未被识别pd.to_datetime指定unit='D',origin='1900-01-01'转换
气体浓度出现负值脱气过程计算错误或录入失误先做数据清洗,负值按异常值处理或删除
标签分布失衡故障类型样本采集不均匀统计类别频次,考虑过采样/欠采样或降级为二分类
Excel外部工具连接报“外部表不是预期的格式”文件是.xlsx但工具按.xls解析;首行有合并单元格另存为CSV或规范表格结构;去掉合并单元格后再连接
气体含量单位不统一部分样本用μL/L,部分用ppm统一换算成μL/L,1ppm≈1μL/L(气体在油中)

5.2 数据清洗阶段必须做的三件事

第一,检查气体浓度的逻辑关系。比如CO₂浓度不可能低于CO浓度,总烃含量必须大于等于各组分的加总,如果出现违反物理规律的记录,优先排查是否是单位或录入错误。

第二,处理零值和缺失值。很多变压器在正常运行状态下,乙炔浓度为0是正常的,不能直接删除。但如果多个特征同时为0,大概率是样本录入不完整,这种样本对模型训练没有意义,建议剔除。

第三,划分训练集和测试集时,注意按设备维度划分,而不是按样本维度随机切分。同一台变压器的多次采样数据之间存在相关性,随机切分会造成数据泄漏,模型评估结果虚高。这点做机器学习的人容易忽略,但对DGA数据来说特别关键,因为同一个设备不同时间点的油样气体浓度存在时间序列上的连续性。

结尾:一点个人心得

这份Excel格式的DGA数据集我用过几个场景:验证三比值法的准确率、给学生做变压器故障诊断实训、作为XGBoost分类模型的训练数据。整体体验下来,最有价值的不是数据本身,而是它把“理论诊断规则”和“实际数据”串成了一个闭环。你可以在同一份数据上看到某个样本的三比值编码指向局部放电,而大卫三角形法却落在了无故障区域,这种矛盾本身就是学习诊断算法的绝佳素材。

最后分享一个实操技巧:处理DGA数据时,建议把原始数据、清洗后数据、诊断结果分别放在Excel的三个工作表里,而不是一个表堆到底。这样既方便回溯,也方便给别人讲解。下次如果你发现某个样本的诊断结果和实际检修报告对不上,回原始表里翻一翻,往往能发现是录入时的小错误,而不是算法的问题。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询