用机器学习实现《GB/T 13234 用能单位节能量计算方法》
目录
前言
2018 颁布了《GB/T 12345 用能单位节能量计算方法》,方中提到需要使用线性回归方法,来计算节能量。
规定:节能量energy savings
满足同等需要或达到相同目的的条件下,能源消耗/能源消费减少的数量。
因此,这个相同条件下,需要回归的方法来进行。
本文,原理方面不作介绍。着重讲解实现过程。
国际中提到归一法有三种方式,后推校准法,前推校准法和参考条件校准法,本文是以附录部分完整的实现整个过程,并记录成.ipynb文件。
同时用Excel方法按上述过程,一模一样的实现一次。两者结果完全一致。
机器学习部分
加载包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
%matplotlib inline
导入数据
# 一定要写encoding="gbk",否则乱码
data_2015=pd.read_csv("2015.csv",encoding="gbk",index_col="月份")
data_2016=pd.read_csv("2016.csv",encoding="gbk",index_col="月份")
查看数据
data_2015
data_2015.sum(0)
折百碱产量 117738.2
总能耗 42468.0
dtype: float64
这一步是为了保证数据正确
data_2016
data_2016.sum(0)
折百碱产量 205898.2
总能耗 65960.6
dtype: float64
可视化数据
进一步查看数据是否存在异常
data_2015.plot.scatter("折百碱产量","总能耗");
data_2016.plot.scatter("折百碱产量","总能耗");
分离数据
X_2015=data_2015['折百碱产量'].values.reshape(-1,1)
Y_2015=data_2015['总能耗']
X_2016=data_2016['折百碱产量'].values.reshape(-1,1)
Y_2016=data_2016['总能耗']
建模
model=LinearRegression()
model=model.fit(X_2015,Y_2015)
查看线性相关属性
截距
model.intercept_
67.955899928463168
系数
model.coef_
array([ 0.35377243])
相关系数 R 2 R^2 R2
score=model.score(X_2015,Y_2015)
score
0.99466645751800198
画回归曲线
Yh_2015=model.predict(X_2015)
plt.figure(figsize=(8, 6))
plt.scatter(X_2015, Y_2015, c ='black')
plt.plot(X_2015, Yh_2015,c ='blue', linewidth=2)
plt.xlabel("折百碱产量/t")
plt.ylabel("月度总能耗/tce")
plt.show()
最后的方程
此处按国际要求保留2位小数
#方程为
print("Y=%.2fX+%.2f"%(model.coef_[0],model.intercept_))
Y=0.35X+67.96
根据上述方程计算预测结果
# 如果直接用模型计算结果差异很大,是因为两位小数带来的精度问题
# Yh_2016=model.predict(X_2016)
# Yh_2016
# 如果与国标数据一致必须,用二位小数的值来计算
Yhx=0.35*X_2016+67.96
Yhx
array([[ 6212.21 ],
[ 6248.435],
[ 6727.655],
[ 6136.75 ],
[ 6599.065],
[ 6241.855],
[ 6505.44 ],
[ 5971.76 ],
[ 5084.79 ],
[ 5426.495],
[ 6656.99 ],
[ 5068.445]])
计算节能量
E=Yhx.ravel()-Y_2016
E.sum()
6919.289999999995
这个就是我们想要的结果。
Excel 部分
制作数据表
输入2015和2016相关数据
制作散点图
1.选择2015年的两个数据,注意不能包括总计
2.插入散点图
添加回归曲线和方程
1.选择图上散点,右键“添加趋势线”
2.选择“线性”,“显示公式”,“显示R平方值”
计算节能量
1.以2016年的折百碱产量,算出预测值,(输入相应的公式)
2.通过与2016年总能耗相差,即节能量
3.将一年的节能量进行求和,即得一年节能量。
总结
上文通过两种不同的方法,完成了用能单位节能量的计算,两者结果均为6919.29,与国际的方法结果完全一致,说明上述两种方法均是正确。
附件
包括 jupyter notebook 的.ipynb 完整的源文件和 制作过程的EXCEL文件。
以及《GBT13234-2018 用能单位节能量计算方法》的pdf文件