电力窃漏电用户自动识别
1 数据预处理
1.1 数据清洗
主要目的是筛选出需要的数据,将多余的数据过滤
(1) 将初始数据进行分布可视化分析后发展非居民用电类别不存在漏电窃电的行为,故将这一部分数据过滤;
(2) 结合实际情况,节假日用电比工作日用电明显偏低,为了避免将其认为是漏电现象,将此部分数据过滤。
1.2 缺失值处理
经观察原始数据发展存在数据缺失现象,若将此部分数据删除则将放弃很多有价值的信息,甚至影响计算结果,故本案例采用拉格朗日插值法对缺失值进行差补。
此处赘述一下拉格朗日插值法:
首先从原始数据集中确定因变量和自变量,取出缺失值前后五个数据,根据取出来的10个数据组成一组,采用拉格朗日插值公式:
为缺失值对应的下标号,为缺失值的插值结果,为非缺失值的下标序号。对全部缺失数据进行插补。代码如下:
importpandas aspd
from scipy.interpolateimport lagrange
import warnings
inputfile=r'demo\data\missing_data.xls'
outputfile=r'demo\tmp\missing_data_processed.xls'
data=pd.read_excel(inputfile,header=None)
#自定义列向量插值函数
#s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5
def ployinterp_column(s,n,k=5):
y=s[list(range(n-k,n))+list(range(n+1,n+1+k))]#取数
y=y[y.notnull()]#剔除空值
return lagrange(y.index,list(y))(n)
#逐个判断元素是否需要插值
for iin data.columns:
for jin range(len(data)):
if (data[i].isnull())[j]:
data[i][j]=ployinterp_column(data[i],j)
data.to_excel(outputfile,header=None,index=False)
原始数据与处理后的数据如下:(