92 KiB
92 KiB
In [1]:
from sklearn.multioutput import MultiOutputRegressor import xgboost as xgb import pandas as pd import numpy as np from sklearn.metrics import mean_absolute_error, mean_squared_error, mean_absolute_percentage_error, r2_score from sklearn.model_selection import train_test_split
In [8]:
total_data = pd.read_excel('train_data.xlsx') total_data.tail(1)
Out[8]:
企业名称 | 机组编号 | 铭牌容量 (MW) | 机组类型 | 参数分类 | 冷凝器型式 | 入炉煤低位热值(kJ/kg) | 燃煤挥发份Var(%) | 燃煤灰份Aar(%) | 煤种 | 所处地区 | longitude | latitude | altitude | 发电碳排放因子(kg/kWh) | 供热碳排放因子(kg/MJ) | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
5740 | 榆能榆神热电有限公司 | 2 | 350.0 | 抽凝式 | 超临界 | 间接空冷 | 25514.0 | 38.84 | 7.28 | 烟煤 | 陕西省 | 109.820265 | 38.304383 | 1151 | 0.661759 | 0.091483 |
In [9]:
total_data.columns
Out[9]:
Index(['企业名称', '机组编号', '铭牌容量 (MW)', '机组类型', '参数分类', '冷凝器型式', '入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)', '煤种', '所处地区', 'longitude', 'latitude', 'altitude', '发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'], dtype='object')
In [10]:
num_cols = ['铭牌容量 (MW)', '入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)', 'longitude', 'latitude', 'altitude', '发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'] # object_cols = ['所处地区', '类型', '机组参数', '冷却型式'] object_cols = ['所处地区', '机组类型', '参数分类', '冷凝器型式'] # object_cols = ['所处地区', '机组类型', '参数分类', '冷凝器型式', '煤种']
In [ ]:
def change_str(x): if '空冷' in x: return '空冷' if '水冷' in x: return '水冷'
In [11]:
total_data = total_data[total_data['发电碳排放因子(kg/kWh)'] <= 0.9].copy()
In [12]:
use_cols = object_cols + [x for x in num_cols if '因子' not in x] use_cols
Out[12]:
['所处地区', '机组类型', '参数分类', '冷凝器型式', '铭牌容量 (MW)', '入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)', 'longitude', 'latitude', 'altitude']
In [13]:
total_data = total_data[~total_data['供热碳排放因子(kg/MJ)'].isna()].copy()
In [14]:
total_data.shape
Out[14]:
(5732, 16)
In [16]:
total_data.groupby(['企业名称', '机组编号']).count().shape
Out[16]:
(1092, 14)
In [17]:
total_data['入炉煤低位热值(kJ/kg)'] = total_data['入炉煤低位热值(kJ/kg)'].apply(lambda x: x * 1000 if x < 100 else x * 1) total_data['燃煤灰份Aar(%)'] = total_data['燃煤灰份Aar(%)'].apply(lambda x: x / 1000 if x > 10000 else x * 1) total_data['燃煤挥发份Var(%)'] = total_data['燃煤挥发份Var(%)'].apply(lambda x: x / 1000 if x > 10000 else x * 1)
In [18]:
total_data.altitude = total_data.altitude.apply(lambda x: 0 if x < 0 else x)
In [19]:
use_data = total_data[(total_data['供热碳排放因子(kg/MJ)'] > 0.01)&(total_data['供热碳排放因子(kg/MJ)'] < 0.1)].copy() use_data.shape
Out[19]:
(5629, 16)
In [20]:
import seaborn as sns
In [21]:
use_data['供热碳排放因子(kg/MJ)'].describe()
Out[21]:
count 5629.000000 mean 0.070915 std 0.009967 min 0.010464 25% 0.065467 50% 0.071533 75% 0.077513 max 0.099905 Name: 供热碳排放因子(kg/MJ), dtype: float64
In [22]:
train_data = use_data.groupby(use_cols)['发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'].mean().reset_index()
D:\miniconda3\envs\py37\lib\site-packages\ipykernel_launcher.py:1: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead. """Entry point for launching an IPython kernel.
In [23]:
train_data
Out[23]:
所处地区 | 机组类型 | 参数分类 | 冷凝器型式 | 铭牌容量 (MW) | 入炉煤低位热值(kJ/kg) | 燃煤挥发份Var(%) | 燃煤灰份Aar(%) | longitude | latitude | altitude | 发电碳排放因子(kg/kWh) | 供热碳排放因子(kg/MJ) | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 18366.00 | 26.05 | 15.70 | 121.471140 | 31.065113 | 3 | 0.537574 | 0.070992 |
1 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 18426.00 | 26.05 | 15.70 | 121.471140 | 31.065113 | 3 | 0.545516 | 0.072476 |
2 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 19507.00 | 26.40 | 14.95 | 121.471140 | 31.065113 | 3 | 0.595849 | 0.064745 |
3 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 19599.00 | 26.78 | 11.58 | 121.471140 | 31.065113 | 3 | 0.584432 | 0.068390 |
4 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 20125.00 | 24.92 | 14.90 | 121.471140 | 31.065113 | 3 | 0.605369 | 0.066996 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
3961 | 黑龙江省 | 纯凝式 | 超高压 | 水冷 | 200.0 | 15941.21 | 23.83 | 14.73 | 126.575647 | 45.918566 | 118 | 0.500172 | 0.064200 |
3962 | 黑龙江省 | 纯凝式 | 超高压 | 水冷 | 210.0 | 15355.00 | 42.00 | 36.70 | 131.695864 | 46.580444 | 91 | 0.518301 | 0.063249 |
3963 | 黑龙江省 | 背压式 | 超高压 | 水冷-开式循环 | 200.0 | 13396.00 | 23.39 | 15.66 | 123.639146 | 47.210696 | 151 | 0.224312 | 0.053770 |
3964 | 黑龙江省 | 背压式 | 超高压 | 水冷-闭式循环 | 215.0 | 15753.00 | 36.29 | 42.40 | 129.604803 | 44.608202 | 250 | 0.290814 | 0.068027 |
3965 | 黑龙江省 | 背压式 | 超高压 | 水冷-闭式循环 | 215.0 | 16471.11 | 30.10 | 38.67 | 129.604803 | 44.608202 | 250 | 0.321635 | 0.067798 |
3966 rows × 13 columns
In [24]:
for col in num_cols: if '因子' not in col: train_data[col] = np.log1p(train_data[col])
In [25]:
train_data = train_data[train_data['供热碳排放因子(kg/MJ)']<=0.1].copy()
In [26]:
train_data = pd.get_dummies(train_data, columns=object_cols).dropna()
In [27]:
for col in train_data.columns: train_data[col] = train_data[col].astype(float)
In [28]:
feature_cols = [x for x in train_data.columns if '因子' not in x] target_cols = [x for x in train_data.columns if '因子' in x]
In [29]:
train_data.to_csv('./train_data_processed.csv', encoding='utf-8-sig', index=False)
In [30]:
train, test = train_test_split(train_data.dropna(), test_size=0.1, shuffle=True, random_state=666) train, valid = train_test_split(train, test_size=0.2, shuffle=True, random_state=666)
In [31]:
train_X, train_y = train[feature_cols], train[target_cols] valid_X, valid_y = valid[feature_cols], valid[target_cols] test_X, test_y = test[feature_cols], test[target_cols]
In [32]:
from sklearn.model_selection import cross_val_score from xgboost import XGBRegressor from bayes_opt import BayesianOptimization
供电建模¶
In [33]:
params_xgb = {'objective': 'reg:squarederror', 'booster': 'gbtree', 'eta': 0.01, 'max_depth': 60, 'subsample': 0.85, 'colsample_bytree': 0.85, 'min_child_weight': 10, 'seed': 10} num_boost_round = 2000 dtrain = xgb.DMatrix(train_X, train_y.values[:, 0]) dvalid = xgb.DMatrix(valid_X, valid_y.values[:, 0]) watchlist = [(dtrain, 'train'), (dvalid, 'eval')] gb_model = xgb.train(params_xgb, dtrain, num_boost_round, evals=watchlist, early_stopping_rounds=200, verbose_eval=False)
In [34]:
y_pred_xgb = gb_model.predict(xgb.DMatrix(test_X)) y_true_xgb = test_y.values[:, 0]
In [35]:
MSE = mean_squared_error(y_true_xgb, y_pred_xgb) RMSE = np.sqrt(mean_squared_error(y_true_xgb, y_pred_xgb)) MAE = mean_absolute_error(y_true_xgb, y_pred_xgb) MAPE = mean_absolute_percentage_error(y_true_xgb, y_pred_xgb) R_2 = r2_score(y_true_xgb, y_pred_xgb) print('MSE:', format(MSE, '.1E')) print('RMSE:', round(RMSE, 4)) print('MAE:', round(MAE, 4)) print('MAPE:', round(MAPE*100, 2), '%') print('R_2:', round(R_2, 4)) #R方为负就说明拟合效果比平均值差a
MSE: 5.5E-04 RMSE: 0.0235 MAE: 0.0145 MAPE: 2.99 % R_2: 0.9011
In [36]:
power_eva_df = pd.DataFrame.from_records([y_true_xgb, y_pred_xgb]).T power_eva_df.to_csv('./发电测试结果.csv', index=False, encoding='utf-8-sig')
In [37]:
gb_model.save_model('./models/power_model.txt')
发热建模¶
In [38]:
def xgb_cv(max_depth, learning_rate, min_child_weight, subsample, colsample_bytree, reg_alpha, gamma): val = cross_val_score(estimator=XGBRegressor(max_depth=int(max_depth), learning_rate=learning_rate, n_estimators=2000, min_child_weight=min_child_weight, subsample=max(min(subsample, 1), 0), colsample_bytree=max(min(colsample_bytree, 1), 0), reg_alpha=max(reg_alpha, 0), gamma=gamma, objective='reg:squarederror', booster='gbtree', seed=10), X=train[feature_cols], y=train['供热碳排放因子(kg/MJ)'], scoring='r2', cv=10).max() return val
In [42]:
params_xgb = {'objective': 'reg:squarederror', 'booster': 'gbtree', 'eta': 0.01, 'max_depth': 30, 'subsample': 0.8, 'colsample_bytree': 0.9, 'min_child_weight': 10, 'seed': 108} num_boost_round = 2000 dtrain = xgb.DMatrix(train_X, train_y.values[:, 1]) dvalid = xgb.DMatrix(valid_X, valid_y.values[:, 1]) watchlist = [(dtrain, 'train'), (dvalid, 'eval')] gb_model_heat = xgb.train(params_xgb, dtrain, num_boost_round, evals=watchlist, early_stopping_rounds=200, verbose_eval=False)
In [43]:
y_pred_heat = gb_model_heat.predict(xgb.DMatrix(test_X)) y_true_heat = test_y.values[:, 1]
In [44]:
MSE = mean_squared_error(y_true_heat, y_pred_heat) RMSE = np.sqrt(mean_squared_error(y_true_heat, y_pred_heat)) MAE = mean_absolute_error(y_true_heat, y_pred_heat) MAPE = mean_absolute_percentage_error(y_true_heat, y_pred_heat) R_2 = r2_score(y_true_heat, y_pred_heat) print('MSE:', format(MSE, '.1E')) print('RMSE:', round(RMSE, 4)) print('MAE:', round(MAE, 4)) print('MAPE:', round(MAPE*100, 2), '%') print('R_2:', round(R_2, 4)) #R方为负就说明拟合效果比平均值差a
MSE: 2.9E-05 RMSE: 0.0054 MAE: 0.0024 MAPE: 5.19 % R_2: 0.7392
In [35]:
pd.DataFrame.from_records([y_true_heat, y_pred_heat]).T.to_csv('./供热测试结果.csv', index=False, encoding='utf-8-sig')
In [36]:
gb_model_heat.save_model('./models/heat_model.txt')
煤种标准化工程¶
In [37]:
new_values = use_data.groupby(['煤种', '入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)'])['发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'].mean()
D:\miniconda3\envs\py37\lib\site-packages\ipykernel_launcher.py:1: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead. """Entry point for launching an IPython kernel.
In [38]:
new_values
Out[38]:
发电碳排放因子(kg/kWh) | 供热碳排放因子(kg/MJ) | ||||
---|---|---|---|---|---|
煤种 | 入炉煤低位热值(kJ/kg) | 燃煤挥发份Var(%) | 燃煤灰份Aar(%) | ||
无烟煤 | 19827.00 | 11.18 | 2539.00 | 0.561424 | 0.087794 |
烟煤 | 16733.00 | 22.53 | 27.46 | 0.441511 | 0.064259 |
16740.00 | 18.99 | 37.00 | 0.487225 | 0.064535 | |
27.93 | 24.43 | 0.418457 | 0.064747 | ||
16741.00 | 26.69 | 25.92 | 0.433679 | 0.061822 | |
... | ... | ... | ... | ... | ... |
贫煤 | 22149.00 | 12.43 | 25.10 | 0.629733 | 0.082772 |
22272.51 | 11.83 | 22.97 | 0.627877 | 0.083234 | |
22475.97 | 8.90 | 23.98 | 0.620331 | 0.086574 | |
23215.00 | 11.00 | 19.31 | 0.682221 | 0.080249 | |
23791.00 | 11.00 | 19.31 | 0.701795 | 0.082240 |
3936 rows × 2 columns
In [39]:
coal_df = new_values.reset_index().drop(columns=['发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)']) coal_df
Out[39]:
煤种 | 入炉煤低位热值(kJ/kg) | 燃煤挥发份Var(%) | 燃煤灰份Aar(%) | |
---|---|---|---|---|
0 | 无烟煤 | 19827.00 | 11.18 | 2539.00 |
1 | 烟煤 | 16733.00 | 22.53 | 27.46 |
2 | 烟煤 | 16740.00 | 18.99 | 37.00 |
3 | 烟煤 | 16740.00 | 27.93 | 24.43 |
4 | 烟煤 | 16741.00 | 26.69 | 25.92 |
... | ... | ... | ... | ... |
3931 | 贫煤 | 22149.00 | 12.43 | 25.10 |
3932 | 贫煤 | 22272.51 | 11.83 | 22.97 |
3933 | 贫煤 | 22475.97 | 8.90 | 23.98 |
3934 | 贫煤 | 23215.00 | 11.00 | 19.31 |
3935 | 贫煤 | 23791.00 | 11.00 | 19.31 |
3936 rows × 4 columns
In [40]:
coal_params_dict = dict() for coal_type in coal_df['煤种'].unique().tolist(): options = coal_df[coal_df['煤种']==coal_type][['入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)']].values coal_params_dict[coal_type] = options
In [42]:
use_data
Out[42]:
电厂名称 | 机组编号 | 铭牌容量 (MW) | 机组类型 | 参数分类 | 冷凝器型式 | 入炉煤低位热值(kJ/kg) | 燃煤挥发份Var(%) | 燃煤灰份Aar(%) | 煤种 | 所处地区 | longitude | latitude | altitude | 发电碳排放因子(kg/kWh) | 供热碳排放因子(kg/MJ) | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 江苏利港电力有限公司 | 1 | 350.0 | 纯凝式 | 亚临界 | 水冷 | 21602.05000 | 26.09 | 16.80 | 烟煤 | 江苏省 | 120.096620 | 31.942361 | 1.0 | 0.586990 | 0.076843 |
1 | 江苏利港电力有限公司 | 1 | 350.0 | 纯凝式 | 亚临界 | 水冷 | 21926.81000 | 26.68 | 15.41 | 烟煤 | 江苏省 | 120.096620 | 31.942361 | 1.0 | 0.632859 | 0.077676 |
2 | 江苏利港电力有限公司 | 1 | 350.0 | 纯凝式 | 亚临界 | 水冷 | 21261.93062 | 26.46 | 15.18 | 烟煤 | 江苏省 | 120.096620 | 31.942361 | 1.0 | 0.609196 | 0.074823 |
3 | 江苏利港电力有限公司 | 1 | 350.0 | 纯凝式 | 亚临界 | 水冷 | 20840.00000 | 26.43 | 14.55 | 烟煤 | 江苏省 | 120.096620 | 31.942361 | 1.0 | 0.602178 | 0.081628 |
4 | 江苏利港电力有限公司 | 1 | 350.0 | 纯凝式 | 亚临界 | 水冷 | 20706.00000 | 26.43 | 14.96 | 烟煤 | 江苏省 | 120.096620 | 31.942361 | 1.0 | 0.590254 | 0.081103 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
5736 | 浙江浙能电力股份有限公司台州发电厂 | 8 | 350.0 | 纯凝式 | 亚临界 | NaN | 21973.00000 | 37.43 | 17.12 | 烟煤 | 浙江省 | 121.465840 | 28.704623 | 73.0 | 0.628300 | 0.078776 |
5737 | 浙江浙能电力股份有限公司台州发电厂 | 8 | 350.0 | 纯凝式 | 亚临界 | NaN | 21372.00000 | 39.87 | 18.01 | 烟煤 | 浙江省 | 121.465840 | 28.704623 | 73.0 | 0.595019 | 0.076622 |
5738 | 浙江浙能电力股份有限公司台州发电厂 | 8 | 350.0 | 纯凝式 | 亚临界 | NaN | 20856.00000 | 39.32 | 19.74 | 烟煤 | 浙江省 | 121.465840 | 28.704623 | 73.0 | 0.565718 | 0.074772 |
5739 | 榆能榆神热电有限公司 | 1 | 350.0 | 供热式 | 超临界 | 间接空冷 | 25514.00000 | 38.84 | 7.28 | 烟煤 | 陕西省 | 109.820265 | 38.304383 | 1151.0 | 0.664456 | 0.091482 |
5740 | 榆能榆神热电有限公司 | 2 | 350.0 | 供热式 | 超临界 | 间接空冷 | 25514.00000 | 38.84 | 7.28 | 烟煤 | 陕西省 | 109.820265 | 38.304383 | 1151.0 | 0.661759 | 0.091483 |
5629 rows × 16 columns
In [47]:
new_use_data = use_data.groupby(use_cols+['煤种'])['发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'].mean().reset_index().drop(columns=['入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)']) new_use_data
D:\miniconda3\envs\py37\lib\site-packages\ipykernel_launcher.py:1: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead. """Entry point for launching an IPython kernel.
Out[47]:
所处地区 | 机组类型 | 参数分类 | 冷凝器型式 | 铭牌容量 (MW) | longitude | latitude | altitude | 煤种 | 发电碳排放因子(kg/kWh) | 供热碳排放因子(kg/MJ) | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 121.471140 | 31.065113 | 3.0 | 烟煤 | 0.537574 | 0.070992 |
1 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 121.471140 | 31.065113 | 3.0 | 烟煤 | 0.545516 | 0.072476 |
2 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 121.471140 | 31.065113 | 3.0 | 烟煤 | 0.595849 | 0.064745 |
3 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 121.471140 | 31.065113 | 3.0 | 烟煤 | 0.584432 | 0.068390 |
4 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 121.471140 | 31.065113 | 3.0 | 烟煤 | 0.605369 | 0.066996 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
3075 | 黑龙江省 | 纯凝式 | 超高压 | 水冷 | 200.0 | 126.575647 | 45.918566 | 118.0 | 褐煤 | 0.500172 | 0.064200 |
3076 | 黑龙江省 | 纯凝式 | 超高压 | 水冷 | 200.0 | 129.604803 | 44.608202 | 250.0 | 褐煤 | 0.378298 | 0.069663 |
3077 | 黑龙江省 | 纯凝式 | 超高压 | 水冷 | 210.0 | 131.695864 | 46.580444 | 91.0 | 褐煤 | 0.518301 | 0.063249 |
3078 | 黑龙江省 | 纯凝式 | 超高压 | 水冷 | 215.0 | 129.604803 | 44.608202 | 250.0 | 褐煤 | 0.290814 | 0.068027 |
3079 | 黑龙江省 | 纯凝式 | 超高压 | 水冷 | 215.0 | 129.604803 | 44.608202 | 250.0 | 褐煤 | 0.321635 | 0.067798 |
3080 rows × 11 columns
In [48]:
new_use_data['coal_params'] = new_use_data['煤种'].apply(lambda x: coal_params_dict.get(x))
In [49]:
new_use_data.drop(columns='煤种', inplace=True)
In [50]:
new_data = new_use_data.explode(column='coal_params')
In [51]:
new_data
Out[51]:
所处地区 | 机组类型 | 参数分类 | 冷凝器型式 | 铭牌容量 (MW) | longitude | latitude | altitude | 发电碳排放因子(kg/kWh) | 供热碳排放因子(kg/MJ) | coal_params | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 121.471140 | 31.065113 | 3.0 | 0.537574 | 0.070992 | [16733.0, 22.53, 27.46] |
0 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 121.471140 | 31.065113 | 3.0 | 0.537574 | 0.070992 | [16740.0, 18.99, 37.0] |
0 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 121.471140 | 31.065113 | 3.0 | 0.537574 | 0.070992 | [16740.0, 27.93, 24.43] |
0 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 121.471140 | 31.065113 | 3.0 | 0.537574 | 0.070992 | [16741.0, 26.69, 25.92] |
0 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 121.471140 | 31.065113 | 3.0 | 0.537574 | 0.070992 | [16741.51, 19.51, 35.62] |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
3079 | 黑龙江省 | 纯凝式 | 超高压 | 水冷 | 215.0 | 129.604803 | 44.608202 | 250.0 | 0.321635 | 0.067798 | [16723.0, 40.63, 39.94] |
3079 | 黑龙江省 | 纯凝式 | 超高压 | 水冷 | 215.0 | 129.604803 | 44.608202 | 250.0 | 0.321635 | 0.067798 | [16725.0, 26.36, 28.51] |
3079 | 黑龙江省 | 纯凝式 | 超高压 | 水冷 | 215.0 | 129.604803 | 44.608202 | 250.0 | 0.321635 | 0.067798 | [16725.19, 34.59, 37.71] |
3079 | 黑龙江省 | 纯凝式 | 超高压 | 水冷 | 215.0 | 129.604803 | 44.608202 | 250.0 | 0.321635 | 0.067798 | [16725.85, 43.2, 12.0] |
3079 | 黑龙江省 | 纯凝式 | 超高压 | 水冷 | 215.0 | 129.604803 | 44.608202 | 250.0 | 0.321635 | 0.067798 | [16729.0, 51.42, 17.33] |
7151079 rows × 11 columns
In [52]:
new_data['入炉煤低位热值(kJ/kg)'] = new_data.coal_params.apply(lambda x: x[0]).values new_data['燃煤挥发份Var(%)'] = new_data.coal_params.apply(lambda x: x[1]).values new_data['燃煤灰份Aar(%)'] = new_data.coal_params.apply(lambda x: x[2]).values
In [53]:
norm_data = new_data.drop(columns='coal_params')
In [54]:
norm_data.head()
Out[54]:
所处地区 | 机组类型 | 参数分类 | 冷凝器型式 | 铭牌容量 (MW) | longitude | latitude | altitude | 发电碳排放因子(kg/kWh) | 供热碳排放因子(kg/MJ) | 入炉煤低位热值(kJ/kg) | 燃煤挥发份Var(%) | 燃煤灰份Aar(%) | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 121.47114 | 31.065113 | 3.0 | 0.537574 | 0.070992 | 16733.00 | 22.53 | 27.46 |
0 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 121.47114 | 31.065113 | 3.0 | 0.537574 | 0.070992 | 16740.00 | 18.99 | 37.00 |
0 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 121.47114 | 31.065113 | 3.0 | 0.537574 | 0.070992 | 16740.00 | 27.93 | 24.43 |
0 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 121.47114 | 31.065113 | 3.0 | 0.537574 | 0.070992 | 16741.00 | 26.69 | 25.92 |
0 | 上海市 | 供热式 | 亚临界 | 水冷 | 300.0 | 121.47114 | 31.065113 | 3.0 | 0.537574 | 0.070992 | 16741.51 | 19.51 | 35.62 |
In [56]:
for col in num_cols: norm_data[col] = np.log1p(norm_data[col]) # total_data[col] = (total_data[col] - total_data[col].min()) / (total_data[col].max() - total_data[col].min()) norm_data_dummpy = pd.get_dummies(norm_data, columns=object_cols)
In [59]:
norm_data_dummpy.drop(columns=['发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'], inplace=True)
In [61]:
new_xgb_data = xgb.DMatrix(norm_data_dummpy[feature_cols])
In [62]:
norm_data['power_co2_factor'] = gb_model.predict(new_xgb_data) norm_data['heat_co2_factor'] = gb_model_heat.predict(new_xgb_data)
In [65]:
normaled_data = norm_data.drop(columns=['入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)', '发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'])
In [66]:
normaled_data
Out[66]:
所处地区 | 机组类型 | 参数分类 | 冷凝器型式 | 铭牌容量 (MW) | longitude | latitude | altitude | power_co2_factor | heat_co2_factor | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 上海市 | 供热式 | 亚临界 | 水冷 | 5.707110 | 4.807875 | 3.467769 | 1.386294 | 0.492558 | 0.064411 |
0 | 上海市 | 供热式 | 亚临界 | 水冷 | 5.707110 | 4.807875 | 3.467769 | 1.386294 | 0.474082 | 0.062117 |
0 | 上海市 | 供热式 | 亚临界 | 水冷 | 5.707110 | 4.807875 | 3.467769 | 1.386294 | 0.489623 | 0.063859 |
0 | 上海市 | 供热式 | 亚临界 | 水冷 | 5.707110 | 4.807875 | 3.467769 | 1.386294 | 0.493615 | 0.064382 |
0 | 上海市 | 供热式 | 亚临界 | 水冷 | 5.707110 | 4.807875 | 3.467769 | 1.386294 | 0.470883 | 0.062354 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
3079 | 黑龙江省 | 纯凝式 | 超高压 | 水冷 | 5.375278 | 4.872176 | 3.820088 | 5.525453 | 0.388912 | 0.067787 |
3079 | 黑龙江省 | 纯凝式 | 超高压 | 水冷 | 5.375278 | 4.872176 | 3.820088 | 5.525453 | 0.388606 | 0.065639 |
3079 | 黑龙江省 | 纯凝式 | 超高压 | 水冷 | 5.375278 | 4.872176 | 3.820088 | 5.525453 | 0.380971 | 0.068147 |
3079 | 黑龙江省 | 纯凝式 | 超高压 | 水冷 | 5.375278 | 4.872176 | 3.820088 | 5.525453 | 0.401973 | 0.065844 |
3079 | 黑龙江省 | 纯凝式 | 超高压 | 水冷 | 5.375278 | 4.872176 | 3.820088 | 5.525453 | 0.386369 | 0.065845 |
7151079 rows × 10 columns
In [67]:
target_cols = ['power_co2_factor', 'heat_co2_factor']
In [69]:
save_data = normaled_data.groupby([x for x in normaled_data.columns if x not in target_cols])[target_cols].mean()
In [72]:
save_data.reset_index().to_csv('./results/去煤种化数据.csv', encoding='utf-8-sig', index=False)
In [ ]: