T85_code/.ipynb_checkpoints/xgboost多任务回归-checkpoint.ipynb

92 KiB
Raw Permalink Blame History

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 [ ]: