From 8237af04c7dacbed6d643afe4c6ab2ca40d16c7b Mon Sep 17 00:00:00 2001 From: zhaojinghao Date: Thu, 11 May 2023 14:18:08 +0800 Subject: [PATCH] add code --- .../data_extract-checkpoint.ipynb | 682 ++++ .../get_altitude-checkpoint.ipynb | 137 + .../xgboost多任务回归-checkpoint.ipynb | 2972 ++++++++++++++++ .../两张表特征对齐-checkpoint.ipynb | 759 ++++ ...attention+LSTM对天数据建模-checkpoint.ipynb | 737 ++++ ...煤种标准化的数据建模及预测-checkpoint.ipynb | 2299 ++++++++++++ .../特征分组建模_lightgbm-checkpoint.ipynb | 3156 +++++++++++++++++ data_extract.ipynb | 892 +++++ evaluation.ipynb | 144 + extract_plant.ipynb | 149 + get_altitude.ipynb | 291 ++ xgboost多任务回归.ipynb | 1809 ++++++++++ 两张表特征对齐.ipynb | 591 +++ 基于attention+LSTM对天数据建模.ipynb | 737 ++++ 基于煤种标准化的数据建模及预测.ipynb | 1536 ++++++++ 特征分组建模_lightgbm.ipynb | 3155 ++++++++++++++++ 省际测试.ipynb | 235 ++ 计算碳排放.ipynb | 701 ++++ 18 files changed, 20982 insertions(+) create mode 100644 .ipynb_checkpoints/data_extract-checkpoint.ipynb create mode 100644 .ipynb_checkpoints/get_altitude-checkpoint.ipynb create mode 100644 .ipynb_checkpoints/xgboost多任务回归-checkpoint.ipynb create mode 100644 .ipynb_checkpoints/两张表特征对齐-checkpoint.ipynb create mode 100644 .ipynb_checkpoints/基于attention+LSTM对天数据建模-checkpoint.ipynb create mode 100644 .ipynb_checkpoints/基于煤种标准化的数据建模及预测-checkpoint.ipynb create mode 100644 .ipynb_checkpoints/特征分组建模_lightgbm-checkpoint.ipynb create mode 100644 data_extract.ipynb create mode 100644 evaluation.ipynb create mode 100644 extract_plant.ipynb create mode 100644 get_altitude.ipynb create mode 100644 xgboost多任务回归.ipynb create mode 100644 两张表特征对齐.ipynb create mode 100644 基于attention+LSTM对天数据建模.ipynb create mode 100644 基于煤种标准化的数据建模及预测.ipynb create mode 100644 特征分组建模_lightgbm.ipynb create mode 100644 省际测试.ipynb create mode 100644 计算碳排放.ipynb diff --git a/.ipynb_checkpoints/data_extract-checkpoint.ipynb b/.ipynb_checkpoints/data_extract-checkpoint.ipynb new file mode 100644 index 0000000..e47808f --- /dev/null +++ b/.ipynb_checkpoints/data_extract-checkpoint.ipynb @@ -0,0 +1,682 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "635" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "file_path = [x for x in os.listdir('./new_data/') if x.endswith('xls') and '经济性' in x]\n", + "len(file_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.read_excel(f'./new_data/{file_path[0]}', header=[3,4,5])" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['序号',\n", + " '机组编号',\n", + " '时间',\n", + " '发电量(万kWh)',\n", + " '供电量(万kWh)',\n", + " '标煤量(t)',\n", + " '发电用标煤量(t)',\n", + " '供热用标煤量(t)',\n", + " '利用小时(h)',\n", + " '平均负荷(MW)',\n", + " '出力系数(%)',\n", + " '出力系数(%)',\n", + " '出力系数(%)',\n", + " '工业供热量',\n", + " '工业热电比(%)',\n", + " '采暖供热量',\n", + " '采暖热电比(%)',\n", + " '总热电比(%)',\n", + " '总供热量',\n", + " '供热煤耗',\n", + " '给水泵汽轮机总耗热量',\n", + " '供电煤耗gce/(kWh)',\n", + " '综合厂用电率(%)',\n", + " '发电厂用电率(%)',\n", + " '供热厂用电率(%)',\n", + " '非生产厂用电率(%)',\n", + " '最新THA工况二类修正后汽机热耗率kJ/KWh',\n", + " '点火用油(kg/万kWh)',\n", + " '助燃用油(kg/万kWh)',\n", + " '主蒸汽压力(MPa)',\n", + " '主蒸汽温度(℃)',\n", + " '再热蒸汽温度(℃)',\n", + " '高加投入率(%)',\n", + " '给水温度(℃)',\n", + " '真空严密性V(Pa/min)',\n", + " '真空度(%)',\n", + " '凝汽器端差(℃)',\n", + " '凝结水过冷度(℃)',\n", + " '发电补给水率(%)',\n", + " '发电综合耗水率',\n", + " '排烟温度(℃)',\n", + " '飞灰含碳量(%)',\n", + " '空预器漏风率(%)',\n", + " '过热器减温水量(t/h)',\n", + " '再热器减温水量(t/h)',\n", + " '入厂煤低位热值(kJ/kg)',\n", + " '入炉煤低位热值(kJ/kg)',\n", + " '燃煤挥发份Var(%)',\n", + " '燃煤灰份Aar(%)',\n", + " '燃煤低位热值Qar,net(kJ/kg)',\n", + " '燃煤硫份Sar(%)',\n", + " '锅炉专业主要辅机耗电率 送风机耗电率(%)',\n", + " '锅炉专业主要辅机耗电率 引风机耗电率(%)',\n", + " '锅炉专业主要辅机耗电率 一次风机耗电率(%)',\n", + " '锅炉专业主要辅机耗电率 炉水泵耗电率(%)',\n", + " '锅炉专业主要辅机耗电率 给煤机耗电率(%)',\n", + " '锅炉专业主要辅机耗电率 磨煤机耗电率(%)',\n", + " '锅炉专业主要辅机耗电率 电除尘器耗电率(%)',\n", + " '锅炉专业主要辅机耗电率 除灰系统耗电率(%)',\n", + " '汽机专业主要辅机耗电率 凝结水泵耗电率(%)',\n", + " '汽机专业主要辅机耗电率 前置泵耗电率(%)',\n", + " '汽机专业主要辅机耗电率 电动给水泵耗电率(%)',\n", + " '汽机专业主要辅机耗电率 循环水泵耗电率(%)',\n", + " '汽机专业主要辅机耗电率 空冷风机耗电率(%)',\n", + " '汽机专业主要辅机耗电率 热网循环水泵耗电率(%)',\n", + " '环保专业耗电率 脱硫系统耗电率(%)',\n", + " '环保专业耗电率 脱销系统耗电率(%)',\n", + " '输煤专业耗电率输煤系统耗电率(%)',\n", + " '化学系统耗电率 (%)',\n", + " '化学系统耗电率 (%)']" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cols = [''.join([x for x in y if 'Unnamed' not in x]) for y in data.columns]\n", + "cols" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "data_list = list()\n", + "for file in file_path:\n", + " data = pd.read_excel(f'./new_data/{file}', header=[3,4,5])\n", + " data.columns = cols\n", + " plant = file.split('-')[0]\n", + " data['时间'] = data['时间'].astype(str)\n", + " use_data = data[~data['时间'].str.contains('半年')].copy()\n", + " use_data['电厂名称'] = plant\n", + " data_list.append(use_data)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
序号机组编号时间发电量(万kWh)供电量(万kWh)标煤量(t)发电用标煤量(t)供热用标煤量(t)利用小时(h)平均负荷(MW)...汽机专业主要辅机耗电率 电动给水泵耗电率(%)汽机专业主要辅机耗电率 循环水泵耗电率(%)汽机专业主要辅机耗电率 空冷风机耗电率(%)汽机专业主要辅机耗电率 热网循环水泵耗电率(%)环保专业耗电率 脱硫系统耗电率(%)环保专业耗电率 脱销系统耗电率(%)输煤专业耗电率输煤系统耗电率(%)化学系统耗电率 (%)化学系统耗电率 (%)电厂名称
011200890133.898438NaNNaNNaNNaN7210.709961113.171409...2.220.220NaNNaN1.1000.00.02NaNNaN万方发电厂(焦作爱依斯万方电力有限公司)
122200891543.898438NaNNaNNaNNaN7323.509766112.801718...2.280.220NaNNaN1.0000.00.02NaNNaN万方发电厂(焦作爱依斯万方电力有限公司)
231200788968.703125NaNNaNNaNNaN3550.750000109.667990...0.000.000NaNNaN0.0000.00.00NaNNaN万方发电厂(焦作爱依斯万方电力有限公司)
342200792342.750000NaNNaNNaNNaN3693.709961112.702716...0.000.000NaNNaN0.0000.00.00NaNNaN万方发电厂(焦作爱依斯万方电力有限公司)
0112021154638.030000146317.63597224.38398069.77199154.614418.229429204.300000...0.000.9360.00.311.0180.00.050.02NaN三河发电有限责任公司
..................................................................
101112005131498.000000NaNNaNNaNNaN6574.899902171.999827...0.000.000NaNNaN0.0000.00.00NaNNaN黔桂发电有限责任公司
111222005143572.000000NaNNaNNaNNaN7178.589844171.555440...0.000.000NaNNaN0.0000.00.00NaNNaN黔桂发电有限责任公司
121332005137886.000000NaNNaNNaNNaN6894.310059174.126182...0.000.000NaNNaN0.0000.00.00NaNNaN黔桂发电有限责任公司
131442005154531.000000NaNNaNNaNNaN7726.549805184.107277...0.000.000NaNNaN0.0000.00.00NaNNaN黔桂发电有限责任公司
141552005155969.000000NaNNaNNaNNaN7798.459961184.192211...0.000.000NaNNaN0.0000.00.00NaNNaN黔桂发电有限责任公司
\n", + "

15758 rows × 71 columns

\n", + "
" + ], + "text/plain": [ + " 序号 机组编号 时间 发电量(万kWh) 供电量(万kWh) 标煤量(t) 发电用标煤量(t) 供热用标煤量(t) \\\n", + "0 1 1 2008 90133.898438 NaN NaN NaN NaN \n", + "1 2 2 2008 91543.898438 NaN NaN NaN NaN \n", + "2 3 1 2007 88968.703125 NaN NaN NaN NaN \n", + "3 4 2 2007 92342.750000 NaN NaN NaN NaN \n", + "0 1 1 2021 154638.030000 146317.63 597224.38 398069.77 199154.61 \n", + ".. .. ... ... ... ... ... ... ... \n", + "10 11 1 2005 131498.000000 NaN NaN NaN NaN \n", + "11 12 2 2005 143572.000000 NaN NaN NaN NaN \n", + "12 13 3 2005 137886.000000 NaN NaN NaN NaN \n", + "13 14 4 2005 154531.000000 NaN NaN NaN NaN \n", + "14 15 5 2005 155969.000000 NaN NaN NaN NaN \n", + "\n", + " 利用小时(h) 平均负荷(MW) ... 汽机专业主要辅机耗电率 电动给水泵耗电率(%) \\\n", + "0 7210.709961 113.171409 ... 2.22 \n", + "1 7323.509766 112.801718 ... 2.28 \n", + "2 3550.750000 109.667990 ... 0.00 \n", + "3 3693.709961 112.702716 ... 0.00 \n", + "0 4418.229429 204.300000 ... 0.00 \n", + ".. ... ... ... ... \n", + "10 6574.899902 171.999827 ... 0.00 \n", + "11 7178.589844 171.555440 ... 0.00 \n", + "12 6894.310059 174.126182 ... 0.00 \n", + "13 7726.549805 184.107277 ... 0.00 \n", + "14 7798.459961 184.192211 ... 0.00 \n", + "\n", + " 汽机专业主要辅机耗电率 循环水泵耗电率(%) 汽机专业主要辅机耗电率 空冷风机耗电率(%) 汽机专业主要辅机耗电率 热网循环水泵耗电率(%) \\\n", + "0 0.220 NaN NaN \n", + "1 0.220 NaN NaN \n", + "2 0.000 NaN NaN \n", + "3 0.000 NaN NaN \n", + "0 0.936 0.0 0.31 \n", + ".. ... ... ... \n", + "10 0.000 NaN NaN \n", + "11 0.000 NaN NaN \n", + "12 0.000 NaN NaN \n", + "13 0.000 NaN NaN \n", + "14 0.000 NaN NaN \n", + "\n", + " 环保专业耗电率 脱硫系统耗电率(%) 环保专业耗电率 脱销系统耗电率(%) 输煤专业耗电率输煤系统耗电率(%) 化学系统耗电率 (%) \\\n", + "0 1.100 0.0 0.02 NaN \n", + "1 1.000 0.0 0.02 NaN \n", + "2 0.000 0.0 0.00 NaN \n", + "3 0.000 0.0 0.00 NaN \n", + "0 1.018 0.0 0.05 0.02 \n", + ".. ... ... ... ... \n", + "10 0.000 0.0 0.00 NaN \n", + "11 0.000 0.0 0.00 NaN \n", + "12 0.000 0.0 0.00 NaN \n", + "13 0.000 0.0 0.00 NaN \n", + "14 0.000 0.0 0.00 NaN \n", + "\n", + " 化学系统耗电率 (%) 电厂名称 \n", + "0 NaN 万方发电厂(焦作爱依斯万方电力有限公司) \n", + "1 NaN 万方发电厂(焦作爱依斯万方电力有限公司) \n", + "2 NaN 万方发电厂(焦作爱依斯万方电力有限公司) \n", + "3 NaN 万方发电厂(焦作爱依斯万方电力有限公司) \n", + "0 NaN 三河发电有限责任公司 \n", + ".. ... ... \n", + "10 NaN 黔桂发电有限责任公司 \n", + "11 NaN 黔桂发电有限责任公司 \n", + "12 NaN 黔桂发电有限责任公司 \n", + "13 NaN 黔桂发电有限责任公司 \n", + "14 NaN 黔桂发电有限责任公司 \n", + "\n", + "[15758 rows x 71 columns]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.concat(data_list, axis=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 机组信息" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['中国中信集团公司-32020-电厂机组数据查询-20220707.xls',\n", + " '中国中煤能源集团有限公司-34027-电厂机组数据查询-20220707.xls',\n", + " '中国华电集团有限公司-21060-电厂机组数据查询-20220707.xls',\n", + " '中国华能集团有限公司-17021-电厂机组数据查询-20220707.xls',\n", + " '中国大唐集团有限公司-61005-电厂机组数据查询-20220707.xls']" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "unit_data_files = [x for x in os.listdir('./new_data/') if '电厂机组' in x]\n", + "unit_data_files[:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['序号',\n", + " '企业编码',\n", + " '电厂名称',\n", + " '简称',\n", + " '机组编号',\n", + " '铭牌容量 (MW)',\n", + " '投产时间',\n", + " '机组类型',\n", + " '参数分类',\n", + " '所处地区',\n", + " '机组产地',\n", + " '锅炉制造厂家',\n", + " '汽轮机制造厂家',\n", + " '发电机制造厂家',\n", + " '主变压器制造厂家',\n", + " '二级公司',\n", + " '所属集团',\n", + " '所属电网',\n", + " '所属电网']" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "unit_samples = pd.read_excel(f'./new_data/{unit_data_files[0]}', header=[3,4])\n", + "unit_cols = [''.join([x for x in y if 'Unnamed' not in x]) for y in unit_samples.columns]\n", + "unit_cols" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "unit_list = list()\n", + "for file in unit_data_files:\n", + " data = pd.read_excel(f'./new_data/{file}', header=[3,4])\n", + " data.columns = cols\n", + " plant = file.split('-')[0]\n", + " data['时间'] = data['时间'].astype(str)\n", + " use_data = data[~data['时间'].str.contains('半年')].copy()\n", + " use_data['电厂名称'] = plant\n", + " unit_list.append(use_data)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.13" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/.ipynb_checkpoints/get_altitude-checkpoint.ipynb b/.ipynb_checkpoints/get_altitude-checkpoint.ipynb new file mode 100644 index 0000000..876ef39 --- /dev/null +++ b/.ipynb_checkpoints/get_altitude-checkpoint.ipynb @@ -0,0 +1,137 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "id": "888d089c-a9c8-4d2d-af74-dff1a8ccfefd", + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import json\n", + "import time\n", + "from typing import List\n", + "import requests\n", + "import pandas as pd\n", + "\n", + "\n", + "class GetElevation:\n", + "\n", + " @classmethod\n", + " def __SendQuery(cls, latLngString: str) -> json:\n", + " query = ('https://api.opentopodata.org/v1/mapzen?locations={}&interpolation=bilinear'.format(latLngString))\n", + " res = requests.get(query).json()\n", + " if res[\"status\"] != \"OK\":\n", + " raise Exception(res[\"error\"])\n", + " return res\n", + "\n", + " def GetSingleElevation(self, latitude: float, longitude: float) -> float:\n", + " \"\"\"\n", + " 获取单个高程,输入经纬度格式为数值类型,返回值为高程float类型\n", + " :param latitude: 纬度\n", + " :param longitude: 经度\n", + " :return: 高程\n", + " \"\"\"\n", + " if latitude < -90 or latitude > 90:\n", + " raise Exception(\"纬度的范围应在-90-90之间!请检查数据源!\")\n", + " latLngString = str(latitude) + \",\" + str(longitude)\n", + " res = self.__SendQuery(latLngString)\n", + " elevation = res[\"results\"][0][\"elevation\"]\n", + " return elevation\n", + "\n", + " def GetMultiElevation(self, latitude: List[float], longitude: List[float]) -> List[float]:\n", + " \"\"\"\n", + " 获取数组类型的高程,输入经纬度格式为经度数组和纬度数组,返回值为高程数组\n", + " :param latitude:纬度数组\n", + " :param longitude:经度数组\n", + " :return:高程数组\n", + " \"\"\"\n", + " if len(latitude) != len(longitude):\n", + " raise Exception(\"纬度数组和经度数组长度不一致!请检查数据源!\")\n", + " for lat in latitude:\n", + " if lat < -90 or lat > 90:\n", + " raise Exception(\"纬度的范围应在-90-90之间!请检查数据源!\")\n", + " elevationList = []\n", + " hundredNums = len(latitude) // 100\n", + " # 查询整百的高程\n", + " for i in range(hundredNums):\n", + " latLngString = \"\"\n", + " for idx in range(100 * i, 100 * (i + 1)):\n", + " latLngString += (str(latitude[idx]) + \",\" + str(longitude[idx]) + \"|\")\n", + " res = self.__SendQuery(latLngString)\n", + " for idx in range(100):\n", + " elevationList.append(res[\"results\"][idx][\"elevation\"])\n", + " time.sleep(1)\n", + " # 查询剩余的不到100的高程\n", + " latLngString = \"\"\n", + " for i in range(hundredNums * 100, len(latitude)):\n", + " latLngString += (str(latitude[i]) + \",\" + str(longitude[i]) + \"|\")\n", + " res = self.__SendQuery(latLngString)\n", + " for i in range(len(latitude) - hundredNums * 100):\n", + " elevationList.append(res[\"results\"][i][\"elevation\"])\n", + " return elevationList\n", + "\n", + " def ExportToXlsx(self, latLongDf: pd.DataFrame, elevationList: List[float], outputPath: str) -> None:\n", + " \"\"\"\n", + " 如果用户可以传入一个DataFrame数据,可以将返回得到的高程拼接并输出\n", + " :param latLongDf: DataFrame数据\n", + " :param elevationList: 高程数组\n", + " :param outputPath: 输出路径\n", + " :return: 无返回值\n", + " \"\"\"\n", + " latLongDf[\"elevation\"] = elevationList\n", + " latLongDf.to_excel(outputPath, index=False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "2a226b08-0c92-483e-b590-29a39dce6298", + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "data = pd.read_excel('./lat_lon.xlsx')\n", + "data.columns = ['plant', 'longitude', 'latitude']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "91afb581-1994-47c4-85ca-d3ea3e13e95d", + "metadata": {}, + "outputs": [], + "source": [ + "multiEle = ele.GetMultiElevation(data[\"latitude\"], data[\"longitude\"])\n", + "print(multiEle)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.ipynb_checkpoints/xgboost多任务回归-checkpoint.ipynb b/.ipynb_checkpoints/xgboost多任务回归-checkpoint.ipynb new file mode 100644 index 0000000..a810857 --- /dev/null +++ b/.ipynb_checkpoints/xgboost多任务回归-checkpoint.ipynb @@ -0,0 +1,2972 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "from sklearn.multioutput import MultiOutputRegressor\n", + "import xgboost as xgb\n", + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn.metrics import mean_absolute_error, mean_squared_error, mean_absolute_percentage_error, r2_score\n", + "from sklearn.model_selection import train_test_split" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
企业名称机组编号铭牌容量 (MW)机组类型参数分类冷凝器型式入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)煤种所处地区longitudelatitudealtitude发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)
5740榆能榆神热电有限公司2350.0抽凝式超临界间接空冷25514.038.847.28烟煤陕西省109.82026538.30438311510.6617590.091483
\n", + "
" + ], + "text/plain": [ + " 企业名称 机组编号 铭牌容量 (MW) 机组类型 参数分类 冷凝器型式 入炉煤低位热值(kJ/kg) \\\n", + "5740 榆能榆神热电有限公司 2 350.0 抽凝式 超临界 间接空冷 25514.0 \n", + "\n", + " 燃煤挥发份Var(%) 燃煤灰份Aar(%) 煤种 所处地区 longitude latitude altitude \\\n", + "5740 38.84 7.28 烟煤 陕西省 109.820265 38.304383 1151 \n", + "\n", + " 发电碳排放因子(kg/kWh) 供热碳排放因子(kg/MJ) \n", + "5740 0.661759 0.091483 " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data = pd.read_excel('train_data.xlsx')\n", + "total_data.tail(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['企业名称', '机组编号', '铭牌容量 (MW)', '机组类型', '参数分类', '冷凝器型式', '入炉煤低位热值(kJ/kg)',\n", + " '燃煤挥发份Var(%)', '燃煤灰份Aar(%)', '煤种', '所处地区', 'longitude', 'latitude',\n", + " 'altitude', '发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'],\n", + " dtype='object')" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "num_cols = ['铭牌容量 (MW)', '入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)', 'longitude', 'latitude', 'altitude', '发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)']\n", + "# object_cols = ['所处地区', '类型', '机组参数', '冷却型式']\n", + "object_cols = ['所处地区', '机组类型', '参数分类', '冷凝器型式']\n", + "# object_cols = ['所处地区', '机组类型', '参数分类', '冷凝器型式', '煤种']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def change_str(x):\n", + " if '空冷' in x:\n", + " return '空冷'\n", + " if '水冷' in x:\n", + " return '水冷'" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "total_data = total_data[total_data['发电碳排放因子(kg/kWh)'] <= 0.9].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['所处地区',\n", + " '机组类型',\n", + " '参数分类',\n", + " '冷凝器型式',\n", + " '铭牌容量 (MW)',\n", + " '入炉煤低位热值(kJ/kg)',\n", + " '燃煤挥发份Var(%)',\n", + " '燃煤灰份Aar(%)',\n", + " 'longitude',\n", + " 'latitude',\n", + " 'altitude']" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "use_cols = object_cols + [x for x in num_cols if '因子' not in x]\n", + "use_cols" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "total_data = total_data[~total_data['供热碳排放因子(kg/MJ)'].isna()].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(5732, 16)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(1092, 14)" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data.groupby(['企业名称', '机组编号']).count().shape" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "total_data['入炉煤低位热值(kJ/kg)'] = total_data['入炉煤低位热值(kJ/kg)'].apply(lambda x: x * 1000 if x < 100 else x * 1)\n", + "total_data['燃煤灰份Aar(%)'] = total_data['燃煤灰份Aar(%)'].apply(lambda x: x / 1000 if x > 10000 else x * 1)\n", + "total_data['燃煤挥发份Var(%)'] = total_data['燃煤挥发份Var(%)'].apply(lambda x: x / 1000 if x > 10000 else x * 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "total_data.altitude = total_data.altitude.apply(lambda x: 0 if x < 0 else x)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(5629, 16)" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "use_data = total_data[(total_data['供热碳排放因子(kg/MJ)'] > 0.01)&(total_data['供热碳排放因子(kg/MJ)'] < 0.1)].copy()\n", + "use_data.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import seaborn as sns" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "count 5629.000000\n", + "mean 0.070915\n", + "std 0.009967\n", + "min 0.010464\n", + "25% 0.065467\n", + "50% 0.071533\n", + "75% 0.077513\n", + "max 0.099905\n", + "Name: 供热碳排放因子(kg/MJ), dtype: float64" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "use_data['供热碳排放因子(kg/MJ)'].describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "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.\n", + " \"\"\"Entry point for launching an IPython kernel.\n" + ] + } + ], + "source": [ + "train_data = use_data.groupby(use_cols)['发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'].mean().reset_index()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
所处地区机组类型参数分类冷凝器型式铭牌容量 (MW)入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)longitudelatitudealtitude发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)
0上海市供热式亚临界水冷300.018366.0026.0515.70121.47114031.06511330.5375740.070992
1上海市供热式亚临界水冷300.018426.0026.0515.70121.47114031.06511330.5455160.072476
2上海市供热式亚临界水冷300.019507.0026.4014.95121.47114031.06511330.5958490.064745
3上海市供热式亚临界水冷300.019599.0026.7811.58121.47114031.06511330.5844320.068390
4上海市供热式亚临界水冷300.020125.0024.9214.90121.47114031.06511330.6053690.066996
..........................................
3961黑龙江省纯凝式超高压水冷200.015941.2123.8314.73126.57564745.9185661180.5001720.064200
3962黑龙江省纯凝式超高压水冷210.015355.0042.0036.70131.69586446.580444910.5183010.063249
3963黑龙江省背压式超高压水冷-开式循环200.013396.0023.3915.66123.63914647.2106961510.2243120.053770
3964黑龙江省背压式超高压水冷-闭式循环215.015753.0036.2942.40129.60480344.6082022500.2908140.068027
3965黑龙江省背压式超高压水冷-闭式循环215.016471.1130.1038.67129.60480344.6082022500.3216350.067798
\n", + "

3966 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " 所处地区 机组类型 参数分类 冷凝器型式 铭牌容量 (MW) 入炉煤低位热值(kJ/kg) 燃煤挥发份Var(%) \\\n", + "0 上海市 供热式 亚临界 水冷 300.0 18366.00 26.05 \n", + "1 上海市 供热式 亚临界 水冷 300.0 18426.00 26.05 \n", + "2 上海市 供热式 亚临界 水冷 300.0 19507.00 26.40 \n", + "3 上海市 供热式 亚临界 水冷 300.0 19599.00 26.78 \n", + "4 上海市 供热式 亚临界 水冷 300.0 20125.00 24.92 \n", + "... ... ... ... ... ... ... ... \n", + "3961 黑龙江省 纯凝式 超高压 水冷 200.0 15941.21 23.83 \n", + "3962 黑龙江省 纯凝式 超高压 水冷 210.0 15355.00 42.00 \n", + "3963 黑龙江省 背压式 超高压 水冷-开式循环 200.0 13396.00 23.39 \n", + "3964 黑龙江省 背压式 超高压 水冷-闭式循环 215.0 15753.00 36.29 \n", + "3965 黑龙江省 背压式 超高压 水冷-闭式循环 215.0 16471.11 30.10 \n", + "\n", + " 燃煤灰份Aar(%) longitude latitude altitude 发电碳排放因子(kg/kWh) \\\n", + "0 15.70 121.471140 31.065113 3 0.537574 \n", + "1 15.70 121.471140 31.065113 3 0.545516 \n", + "2 14.95 121.471140 31.065113 3 0.595849 \n", + "3 11.58 121.471140 31.065113 3 0.584432 \n", + "4 14.90 121.471140 31.065113 3 0.605369 \n", + "... ... ... ... ... ... \n", + "3961 14.73 126.575647 45.918566 118 0.500172 \n", + "3962 36.70 131.695864 46.580444 91 0.518301 \n", + "3963 15.66 123.639146 47.210696 151 0.224312 \n", + "3964 42.40 129.604803 44.608202 250 0.290814 \n", + "3965 38.67 129.604803 44.608202 250 0.321635 \n", + "\n", + " 供热碳排放因子(kg/MJ) \n", + "0 0.070992 \n", + "1 0.072476 \n", + "2 0.064745 \n", + "3 0.068390 \n", + "4 0.066996 \n", + "... ... \n", + "3961 0.064200 \n", + "3962 0.063249 \n", + "3963 0.053770 \n", + "3964 0.068027 \n", + "3965 0.067798 \n", + "\n", + "[3966 rows x 13 columns]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_data" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "for col in num_cols:\n", + " if '因子' not in col:\n", + " train_data[col] = np.log1p(train_data[col])" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "train_data = train_data[train_data['供热碳排放因子(kg/MJ)']<=0.1].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "train_data = pd.get_dummies(train_data, columns=object_cols).dropna()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "for col in train_data.columns:\n", + " train_data[col] = train_data[col].astype(float)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "feature_cols = [x for x in train_data.columns if '因子' not in x]\n", + "target_cols = [x for x in train_data.columns if '因子' in x]" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "train_data.to_csv('./train_data_processed.csv', encoding='utf-8-sig', index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "train, test = train_test_split(train_data.dropna(), test_size=0.1, shuffle=True, random_state=666)\n", + "train, valid = train_test_split(train, test_size=0.2, shuffle=True, random_state=666)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "train_X, train_y = train[feature_cols], train[target_cols]\n", + "valid_X, valid_y = valid[feature_cols], valid[target_cols]\n", + "test_X, test_y = test[feature_cols], test[target_cols]" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "from sklearn.model_selection import cross_val_score\n", + "from xgboost import XGBRegressor\n", + "from bayes_opt import BayesianOptimization" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### 供电建模" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "params_xgb = {'objective': 'reg:squarederror',\n", + " 'booster': 'gbtree',\n", + " 'eta': 0.01,\n", + " 'max_depth': 60,\n", + " 'subsample': 0.85,\n", + " 'colsample_bytree': 0.85,\n", + " 'min_child_weight': 10,\n", + " 'seed': 10}\n", + "\n", + "num_boost_round = 2000\n", + "\n", + "dtrain = xgb.DMatrix(train_X, train_y.values[:, 0])\n", + "dvalid = xgb.DMatrix(valid_X, valid_y.values[:, 0])\n", + "watchlist = [(dtrain, 'train'), (dvalid, 'eval')]\n", + "\n", + "gb_model = xgb.train(params_xgb, dtrain, num_boost_round, evals=watchlist,\n", + " early_stopping_rounds=200, verbose_eval=False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "y_pred_xgb = gb_model.predict(xgb.DMatrix(test_X))\n", + "y_true_xgb = test_y.values[:, 0]" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 5.5E-04\n", + "RMSE: 0.0235\n", + "MAE: 0.0145\n", + "MAPE: 2.99 %\n", + "R_2: 0.9011\n" + ] + } + ], + "source": [ + "MSE = mean_squared_error(y_true_xgb, y_pred_xgb)\n", + "RMSE = np.sqrt(mean_squared_error(y_true_xgb, y_pred_xgb))\n", + "MAE = mean_absolute_error(y_true_xgb, y_pred_xgb)\n", + "MAPE = mean_absolute_percentage_error(y_true_xgb, y_pred_xgb)\n", + "R_2 = r2_score(y_true_xgb, y_pred_xgb)\n", + "print('MSE:', format(MSE, '.1E'))\n", + "print('RMSE:', round(RMSE, 4))\n", + "print('MAE:', round(MAE, 4))\n", + "print('MAPE:', round(MAPE*100, 2), '%')\n", + "print('R_2:', round(R_2, 4)) #R方为负就说明拟合效果比平均值差a" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "power_eva_df = pd.DataFrame.from_records([y_true_xgb, y_pred_xgb]).T\n", + "power_eva_df.to_csv('./发电测试结果.csv', index=False, encoding='utf-8-sig')" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "gb_model.save_model('./models/power_model.txt')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### 发热建模" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "def xgb_cv(max_depth, learning_rate, min_child_weight, subsample, colsample_bytree, reg_alpha, gamma):\n", + " val = cross_val_score(estimator=XGBRegressor(max_depth=int(max_depth),\n", + " learning_rate=learning_rate,\n", + " n_estimators=2000,\n", + " min_child_weight=min_child_weight,\n", + " subsample=max(min(subsample, 1), 0),\n", + " colsample_bytree=max(min(colsample_bytree, 1), 0),\n", + " reg_alpha=max(reg_alpha, 0), gamma=gamma, objective='reg:squarederror',\n", + " booster='gbtree',\n", + " seed=10), X=train[feature_cols], y=train['供热碳排放因子(kg/MJ)'], scoring='r2',\n", + " cv=10).max()\n", + " return val" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "params_xgb = {'objective': 'reg:squarederror',\n", + " 'booster': 'gbtree',\n", + " 'eta': 0.01,\n", + " 'max_depth': 30,\n", + " 'subsample': 0.8,\n", + " 'colsample_bytree': 0.9,\n", + " 'min_child_weight': 10,\n", + " 'seed': 108}\n", + "\n", + "num_boost_round = 2000\n", + "\n", + "dtrain = xgb.DMatrix(train_X, train_y.values[:, 1])\n", + "dvalid = xgb.DMatrix(valid_X, valid_y.values[:, 1])\n", + "watchlist = [(dtrain, 'train'), (dvalid, 'eval')]\n", + "\n", + "gb_model_heat = xgb.train(params_xgb, dtrain, num_boost_round, evals=watchlist,\n", + " early_stopping_rounds=200, verbose_eval=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "y_pred_heat = gb_model_heat.predict(xgb.DMatrix(test_X))\n", + "y_true_heat = test_y.values[:, 1]" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 2.9E-05\n", + "RMSE: 0.0054\n", + "MAE: 0.0024\n", + "MAPE: 5.19 %\n", + "R_2: 0.7392\n" + ] + } + ], + "source": [ + "MSE = mean_squared_error(y_true_heat, y_pred_heat)\n", + "RMSE = np.sqrt(mean_squared_error(y_true_heat, y_pred_heat))\n", + "MAE = mean_absolute_error(y_true_heat, y_pred_heat)\n", + "MAPE = mean_absolute_percentage_error(y_true_heat, y_pred_heat)\n", + "R_2 = r2_score(y_true_heat, y_pred_heat)\n", + "print('MSE:', format(MSE, '.1E'))\n", + "print('RMSE:', round(RMSE, 4))\n", + "print('MAE:', round(MAE, 4))\n", + "print('MAPE:', round(MAPE*100, 2), '%')\n", + "print('R_2:', round(R_2, 4)) #R方为负就说明拟合效果比平均值差a" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "pd.DataFrame.from_records([y_true_heat, y_pred_heat]).T.to_csv('./供热测试结果.csv', index=False, encoding='utf-8-sig')" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "gb_model_heat.save_model('./models/heat_model.txt')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### 煤种标准化工程" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "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.\n", + " \"\"\"Entry point for launching an IPython kernel.\n" + ] + } + ], + "source": [ + "new_values = use_data.groupby(['煤种', '入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)'])['发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'].mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)
煤种入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)
无烟煤19827.0011.182539.000.5614240.087794
烟煤16733.0022.5327.460.4415110.064259
16740.0018.9937.000.4872250.064535
27.9324.430.4184570.064747
16741.0026.6925.920.4336790.061822
..................
贫煤22149.0012.4325.100.6297330.082772
22272.5111.8322.970.6278770.083234
22475.978.9023.980.6203310.086574
23215.0011.0019.310.6822210.080249
23791.0011.0019.310.7017950.082240
\n", + "

3936 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " 发电碳排放因子(kg/kWh) 供热碳排放因子(kg/MJ)\n", + "煤种 入炉煤低位热值(kJ/kg) 燃煤挥发份Var(%) 燃煤灰份Aar(%) \n", + "无烟煤 19827.00 11.18 2539.00 0.561424 0.087794\n", + "烟煤 16733.00 22.53 27.46 0.441511 0.064259\n", + " 16740.00 18.99 37.00 0.487225 0.064535\n", + " 27.93 24.43 0.418457 0.064747\n", + " 16741.00 26.69 25.92 0.433679 0.061822\n", + "... ... ...\n", + "贫煤 22149.00 12.43 25.10 0.629733 0.082772\n", + " 22272.51 11.83 22.97 0.627877 0.083234\n", + " 22475.97 8.90 23.98 0.620331 0.086574\n", + " 23215.00 11.00 19.31 0.682221 0.080249\n", + " 23791.00 11.00 19.31 0.701795 0.082240\n", + "\n", + "[3936 rows x 2 columns]" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_values" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
煤种入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)
0无烟煤19827.0011.182539.00
1烟煤16733.0022.5327.46
2烟煤16740.0018.9937.00
3烟煤16740.0027.9324.43
4烟煤16741.0026.6925.92
...............
3931贫煤22149.0012.4325.10
3932贫煤22272.5111.8322.97
3933贫煤22475.978.9023.98
3934贫煤23215.0011.0019.31
3935贫煤23791.0011.0019.31
\n", + "

3936 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " 煤种 入炉煤低位热值(kJ/kg) 燃煤挥发份Var(%) 燃煤灰份Aar(%)\n", + "0 无烟煤 19827.00 11.18 2539.00\n", + "1 烟煤 16733.00 22.53 27.46\n", + "2 烟煤 16740.00 18.99 37.00\n", + "3 烟煤 16740.00 27.93 24.43\n", + "4 烟煤 16741.00 26.69 25.92\n", + "... ... ... ... ...\n", + "3931 贫煤 22149.00 12.43 25.10\n", + "3932 贫煤 22272.51 11.83 22.97\n", + "3933 贫煤 22475.97 8.90 23.98\n", + "3934 贫煤 23215.00 11.00 19.31\n", + "3935 贫煤 23791.00 11.00 19.31\n", + "\n", + "[3936 rows x 4 columns]" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coal_df = new_values.reset_index().drop(columns=['发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'])\n", + "coal_df" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "coal_params_dict = dict()\n", + "for coal_type in coal_df['煤种'].unique().tolist():\n", + " options = coal_df[coal_df['煤种']==coal_type][['入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)']].values\n", + " coal_params_dict[coal_type] = options" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
电厂名称机组编号铭牌容量 (MW)机组类型参数分类冷凝器型式入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)煤种所处地区longitudelatitudealtitude发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)
0江苏利港电力有限公司1350.0纯凝式亚临界水冷21602.0500026.0916.80烟煤江苏省120.09662031.9423611.00.5869900.076843
1江苏利港电力有限公司1350.0纯凝式亚临界水冷21926.8100026.6815.41烟煤江苏省120.09662031.9423611.00.6328590.077676
2江苏利港电力有限公司1350.0纯凝式亚临界水冷21261.9306226.4615.18烟煤江苏省120.09662031.9423611.00.6091960.074823
3江苏利港电力有限公司1350.0纯凝式亚临界水冷20840.0000026.4314.55烟煤江苏省120.09662031.9423611.00.6021780.081628
4江苏利港电力有限公司1350.0纯凝式亚临界水冷20706.0000026.4314.96烟煤江苏省120.09662031.9423611.00.5902540.081103
...................................................
5736浙江浙能电力股份有限公司台州发电厂8350.0纯凝式亚临界NaN21973.0000037.4317.12烟煤浙江省121.46584028.70462373.00.6283000.078776
5737浙江浙能电力股份有限公司台州发电厂8350.0纯凝式亚临界NaN21372.0000039.8718.01烟煤浙江省121.46584028.70462373.00.5950190.076622
5738浙江浙能电力股份有限公司台州发电厂8350.0纯凝式亚临界NaN20856.0000039.3219.74烟煤浙江省121.46584028.70462373.00.5657180.074772
5739榆能榆神热电有限公司1350.0供热式超临界间接空冷25514.0000038.847.28烟煤陕西省109.82026538.3043831151.00.6644560.091482
5740榆能榆神热电有限公司2350.0供热式超临界间接空冷25514.0000038.847.28烟煤陕西省109.82026538.3043831151.00.6617590.091483
\n", + "

5629 rows × 16 columns

\n", + "
" + ], + "text/plain": [ + " 电厂名称 机组编号 铭牌容量 (MW) 机组类型 参数分类 冷凝器型式 入炉煤低位热值(kJ/kg) \\\n", + "0 江苏利港电力有限公司 1 350.0 纯凝式 亚临界 水冷 21602.05000 \n", + "1 江苏利港电力有限公司 1 350.0 纯凝式 亚临界 水冷 21926.81000 \n", + "2 江苏利港电力有限公司 1 350.0 纯凝式 亚临界 水冷 21261.93062 \n", + "3 江苏利港电力有限公司 1 350.0 纯凝式 亚临界 水冷 20840.00000 \n", + "4 江苏利港电力有限公司 1 350.0 纯凝式 亚临界 水冷 20706.00000 \n", + "... ... ... ... ... ... ... ... \n", + "5736 浙江浙能电力股份有限公司台州发电厂 8 350.0 纯凝式 亚临界 NaN 21973.00000 \n", + "5737 浙江浙能电力股份有限公司台州发电厂 8 350.0 纯凝式 亚临界 NaN 21372.00000 \n", + "5738 浙江浙能电力股份有限公司台州发电厂 8 350.0 纯凝式 亚临界 NaN 20856.00000 \n", + "5739 榆能榆神热电有限公司 1 350.0 供热式 超临界 间接空冷 25514.00000 \n", + "5740 榆能榆神热电有限公司 2 350.0 供热式 超临界 间接空冷 25514.00000 \n", + "\n", + " 燃煤挥发份Var(%) 燃煤灰份Aar(%) 煤种 所处地区 longitude latitude altitude \\\n", + "0 26.09 16.80 烟煤 江苏省 120.096620 31.942361 1.0 \n", + "1 26.68 15.41 烟煤 江苏省 120.096620 31.942361 1.0 \n", + "2 26.46 15.18 烟煤 江苏省 120.096620 31.942361 1.0 \n", + "3 26.43 14.55 烟煤 江苏省 120.096620 31.942361 1.0 \n", + "4 26.43 14.96 烟煤 江苏省 120.096620 31.942361 1.0 \n", + "... ... ... .. ... ... ... ... \n", + "5736 37.43 17.12 烟煤 浙江省 121.465840 28.704623 73.0 \n", + "5737 39.87 18.01 烟煤 浙江省 121.465840 28.704623 73.0 \n", + "5738 39.32 19.74 烟煤 浙江省 121.465840 28.704623 73.0 \n", + "5739 38.84 7.28 烟煤 陕西省 109.820265 38.304383 1151.0 \n", + "5740 38.84 7.28 烟煤 陕西省 109.820265 38.304383 1151.0 \n", + "\n", + " 发电碳排放因子(kg/kWh) 供热碳排放因子(kg/MJ) \n", + "0 0.586990 0.076843 \n", + "1 0.632859 0.077676 \n", + "2 0.609196 0.074823 \n", + "3 0.602178 0.081628 \n", + "4 0.590254 0.081103 \n", + "... ... ... \n", + "5736 0.628300 0.078776 \n", + "5737 0.595019 0.076622 \n", + "5738 0.565718 0.074772 \n", + "5739 0.664456 0.091482 \n", + "5740 0.661759 0.091483 \n", + "\n", + "[5629 rows x 16 columns]" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "use_data" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "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.\n", + " \"\"\"Entry point for launching an IPython kernel.\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
所处地区机组类型参数分类冷凝器型式铭牌容量 (MW)longitudelatitudealtitude煤种发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)
0上海市供热式亚临界水冷300.0121.47114031.0651133.0烟煤0.5375740.070992
1上海市供热式亚临界水冷300.0121.47114031.0651133.0烟煤0.5455160.072476
2上海市供热式亚临界水冷300.0121.47114031.0651133.0烟煤0.5958490.064745
3上海市供热式亚临界水冷300.0121.47114031.0651133.0烟煤0.5844320.068390
4上海市供热式亚临界水冷300.0121.47114031.0651133.0烟煤0.6053690.066996
....................................
3075黑龙江省纯凝式超高压水冷200.0126.57564745.918566118.0褐煤0.5001720.064200
3076黑龙江省纯凝式超高压水冷200.0129.60480344.608202250.0褐煤0.3782980.069663
3077黑龙江省纯凝式超高压水冷210.0131.69586446.58044491.0褐煤0.5183010.063249
3078黑龙江省纯凝式超高压水冷215.0129.60480344.608202250.0褐煤0.2908140.068027
3079黑龙江省纯凝式超高压水冷215.0129.60480344.608202250.0褐煤0.3216350.067798
\n", + "

3080 rows × 11 columns

\n", + "
" + ], + "text/plain": [ + " 所处地区 机组类型 参数分类 冷凝器型式 铭牌容量 (MW) longitude latitude altitude 煤种 \\\n", + "0 上海市 供热式 亚临界 水冷 300.0 121.471140 31.065113 3.0 烟煤 \n", + "1 上海市 供热式 亚临界 水冷 300.0 121.471140 31.065113 3.0 烟煤 \n", + "2 上海市 供热式 亚临界 水冷 300.0 121.471140 31.065113 3.0 烟煤 \n", + "3 上海市 供热式 亚临界 水冷 300.0 121.471140 31.065113 3.0 烟煤 \n", + "4 上海市 供热式 亚临界 水冷 300.0 121.471140 31.065113 3.0 烟煤 \n", + "... ... ... ... ... ... ... ... ... .. \n", + "3075 黑龙江省 纯凝式 超高压 水冷 200.0 126.575647 45.918566 118.0 褐煤 \n", + "3076 黑龙江省 纯凝式 超高压 水冷 200.0 129.604803 44.608202 250.0 褐煤 \n", + "3077 黑龙江省 纯凝式 超高压 水冷 210.0 131.695864 46.580444 91.0 褐煤 \n", + "3078 黑龙江省 纯凝式 超高压 水冷 215.0 129.604803 44.608202 250.0 褐煤 \n", + "3079 黑龙江省 纯凝式 超高压 水冷 215.0 129.604803 44.608202 250.0 褐煤 \n", + "\n", + " 发电碳排放因子(kg/kWh) 供热碳排放因子(kg/MJ) \n", + "0 0.537574 0.070992 \n", + "1 0.545516 0.072476 \n", + "2 0.595849 0.064745 \n", + "3 0.584432 0.068390 \n", + "4 0.605369 0.066996 \n", + "... ... ... \n", + "3075 0.500172 0.064200 \n", + "3076 0.378298 0.069663 \n", + "3077 0.518301 0.063249 \n", + "3078 0.290814 0.068027 \n", + "3079 0.321635 0.067798 \n", + "\n", + "[3080 rows x 11 columns]" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_use_data = use_data.groupby(use_cols+['煤种'])['发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'].mean().reset_index().drop(columns=['入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)'])\n", + "new_use_data" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_use_data['coal_params'] = new_use_data['煤种'].apply(lambda x: coal_params_dict.get(x))" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_use_data.drop(columns='煤种', inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_data = new_use_data.explode(column='coal_params')" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
所处地区机组类型参数分类冷凝器型式铭牌容量 (MW)longitudelatitudealtitude发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)coal_params
0上海市供热式亚临界水冷300.0121.47114031.0651133.00.5375740.070992[16733.0, 22.53, 27.46]
0上海市供热式亚临界水冷300.0121.47114031.0651133.00.5375740.070992[16740.0, 18.99, 37.0]
0上海市供热式亚临界水冷300.0121.47114031.0651133.00.5375740.070992[16740.0, 27.93, 24.43]
0上海市供热式亚临界水冷300.0121.47114031.0651133.00.5375740.070992[16741.0, 26.69, 25.92]
0上海市供热式亚临界水冷300.0121.47114031.0651133.00.5375740.070992[16741.51, 19.51, 35.62]
....................................
3079黑龙江省纯凝式超高压水冷215.0129.60480344.608202250.00.3216350.067798[16723.0, 40.63, 39.94]
3079黑龙江省纯凝式超高压水冷215.0129.60480344.608202250.00.3216350.067798[16725.0, 26.36, 28.51]
3079黑龙江省纯凝式超高压水冷215.0129.60480344.608202250.00.3216350.067798[16725.19, 34.59, 37.71]
3079黑龙江省纯凝式超高压水冷215.0129.60480344.608202250.00.3216350.067798[16725.85, 43.2, 12.0]
3079黑龙江省纯凝式超高压水冷215.0129.60480344.608202250.00.3216350.067798[16729.0, 51.42, 17.33]
\n", + "

7151079 rows × 11 columns

\n", + "
" + ], + "text/plain": [ + " 所处地区 机组类型 参数分类 冷凝器型式 铭牌容量 (MW) longitude latitude altitude \\\n", + "0 上海市 供热式 亚临界 水冷 300.0 121.471140 31.065113 3.0 \n", + "0 上海市 供热式 亚临界 水冷 300.0 121.471140 31.065113 3.0 \n", + "0 上海市 供热式 亚临界 水冷 300.0 121.471140 31.065113 3.0 \n", + "0 上海市 供热式 亚临界 水冷 300.0 121.471140 31.065113 3.0 \n", + "0 上海市 供热式 亚临界 水冷 300.0 121.471140 31.065113 3.0 \n", + "... ... ... ... ... ... ... ... ... \n", + "3079 黑龙江省 纯凝式 超高压 水冷 215.0 129.604803 44.608202 250.0 \n", + "3079 黑龙江省 纯凝式 超高压 水冷 215.0 129.604803 44.608202 250.0 \n", + "3079 黑龙江省 纯凝式 超高压 水冷 215.0 129.604803 44.608202 250.0 \n", + "3079 黑龙江省 纯凝式 超高压 水冷 215.0 129.604803 44.608202 250.0 \n", + "3079 黑龙江省 纯凝式 超高压 水冷 215.0 129.604803 44.608202 250.0 \n", + "\n", + " 发电碳排放因子(kg/kWh) 供热碳排放因子(kg/MJ) coal_params \n", + "0 0.537574 0.070992 [16733.0, 22.53, 27.46] \n", + "0 0.537574 0.070992 [16740.0, 18.99, 37.0] \n", + "0 0.537574 0.070992 [16740.0, 27.93, 24.43] \n", + "0 0.537574 0.070992 [16741.0, 26.69, 25.92] \n", + "0 0.537574 0.070992 [16741.51, 19.51, 35.62] \n", + "... ... ... ... \n", + "3079 0.321635 0.067798 [16723.0, 40.63, 39.94] \n", + "3079 0.321635 0.067798 [16725.0, 26.36, 28.51] \n", + "3079 0.321635 0.067798 [16725.19, 34.59, 37.71] \n", + "3079 0.321635 0.067798 [16725.85, 43.2, 12.0] \n", + "3079 0.321635 0.067798 [16729.0, 51.42, 17.33] \n", + "\n", + "[7151079 rows x 11 columns]" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_data" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_data['入炉煤低位热值(kJ/kg)'] = new_data.coal_params.apply(lambda x: x[0]).values\n", + "new_data['燃煤挥发份Var(%)'] = new_data.coal_params.apply(lambda x: x[1]).values\n", + "new_data['燃煤灰份Aar(%)'] = new_data.coal_params.apply(lambda x: x[2]).values" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "norm_data = new_data.drop(columns='coal_params')" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
所处地区机组类型参数分类冷凝器型式铭牌容量 (MW)longitudelatitudealtitude发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)
0上海市供热式亚临界水冷300.0121.4711431.0651133.00.5375740.07099216733.0022.5327.46
0上海市供热式亚临界水冷300.0121.4711431.0651133.00.5375740.07099216740.0018.9937.00
0上海市供热式亚临界水冷300.0121.4711431.0651133.00.5375740.07099216740.0027.9324.43
0上海市供热式亚临界水冷300.0121.4711431.0651133.00.5375740.07099216741.0026.6925.92
0上海市供热式亚临界水冷300.0121.4711431.0651133.00.5375740.07099216741.5119.5135.62
\n", + "
" + ], + "text/plain": [ + " 所处地区 机组类型 参数分类 冷凝器型式 铭牌容量 (MW) longitude latitude altitude \\\n", + "0 上海市 供热式 亚临界 水冷 300.0 121.47114 31.065113 3.0 \n", + "0 上海市 供热式 亚临界 水冷 300.0 121.47114 31.065113 3.0 \n", + "0 上海市 供热式 亚临界 水冷 300.0 121.47114 31.065113 3.0 \n", + "0 上海市 供热式 亚临界 水冷 300.0 121.47114 31.065113 3.0 \n", + "0 上海市 供热式 亚临界 水冷 300.0 121.47114 31.065113 3.0 \n", + "\n", + " 发电碳排放因子(kg/kWh) 供热碳排放因子(kg/MJ) 入炉煤低位热值(kJ/kg) 燃煤挥发份Var(%) 燃煤灰份Aar(%) \n", + "0 0.537574 0.070992 16733.00 22.53 27.46 \n", + "0 0.537574 0.070992 16740.00 18.99 37.00 \n", + "0 0.537574 0.070992 16740.00 27.93 24.43 \n", + "0 0.537574 0.070992 16741.00 26.69 25.92 \n", + "0 0.537574 0.070992 16741.51 19.51 35.62 " + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "norm_data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "for col in num_cols:\n", + " norm_data[col] = np.log1p(norm_data[col])\n", + " # total_data[col] = (total_data[col] - total_data[col].min()) / (total_data[col].max() - total_data[col].min())\n", + "norm_data_dummpy = pd.get_dummies(norm_data, columns=object_cols)" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [], + "source": [ + "norm_data_dummpy.drop(columns=['发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'], inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_xgb_data = xgb.DMatrix(norm_data_dummpy[feature_cols])" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [], + "source": [ + "norm_data['power_co2_factor'] = gb_model.predict(new_xgb_data)\n", + "norm_data['heat_co2_factor'] = gb_model_heat.predict(new_xgb_data)" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [], + "source": [ + "normaled_data = norm_data.drop(columns=['入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)', '发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'])" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
所处地区机组类型参数分类冷凝器型式铭牌容量 (MW)longitudelatitudealtitudepower_co2_factorheat_co2_factor
0上海市供热式亚临界水冷5.7071104.8078753.4677691.3862940.4925580.064411
0上海市供热式亚临界水冷5.7071104.8078753.4677691.3862940.4740820.062117
0上海市供热式亚临界水冷5.7071104.8078753.4677691.3862940.4896230.063859
0上海市供热式亚临界水冷5.7071104.8078753.4677691.3862940.4936150.064382
0上海市供热式亚临界水冷5.7071104.8078753.4677691.3862940.4708830.062354
.................................
3079黑龙江省纯凝式超高压水冷5.3752784.8721763.8200885.5254530.3889120.067787
3079黑龙江省纯凝式超高压水冷5.3752784.8721763.8200885.5254530.3886060.065639
3079黑龙江省纯凝式超高压水冷5.3752784.8721763.8200885.5254530.3809710.068147
3079黑龙江省纯凝式超高压水冷5.3752784.8721763.8200885.5254530.4019730.065844
3079黑龙江省纯凝式超高压水冷5.3752784.8721763.8200885.5254530.3863690.065845
\n", + "

7151079 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " 所处地区 机组类型 参数分类 冷凝器型式 铭牌容量 (MW) longitude latitude altitude \\\n", + "0 上海市 供热式 亚临界 水冷 5.707110 4.807875 3.467769 1.386294 \n", + "0 上海市 供热式 亚临界 水冷 5.707110 4.807875 3.467769 1.386294 \n", + "0 上海市 供热式 亚临界 水冷 5.707110 4.807875 3.467769 1.386294 \n", + "0 上海市 供热式 亚临界 水冷 5.707110 4.807875 3.467769 1.386294 \n", + "0 上海市 供热式 亚临界 水冷 5.707110 4.807875 3.467769 1.386294 \n", + "... ... ... ... ... ... ... ... ... \n", + "3079 黑龙江省 纯凝式 超高压 水冷 5.375278 4.872176 3.820088 5.525453 \n", + "3079 黑龙江省 纯凝式 超高压 水冷 5.375278 4.872176 3.820088 5.525453 \n", + "3079 黑龙江省 纯凝式 超高压 水冷 5.375278 4.872176 3.820088 5.525453 \n", + "3079 黑龙江省 纯凝式 超高压 水冷 5.375278 4.872176 3.820088 5.525453 \n", + "3079 黑龙江省 纯凝式 超高压 水冷 5.375278 4.872176 3.820088 5.525453 \n", + "\n", + " power_co2_factor heat_co2_factor \n", + "0 0.492558 0.064411 \n", + "0 0.474082 0.062117 \n", + "0 0.489623 0.063859 \n", + "0 0.493615 0.064382 \n", + "0 0.470883 0.062354 \n", + "... ... ... \n", + "3079 0.388912 0.067787 \n", + "3079 0.388606 0.065639 \n", + "3079 0.380971 0.068147 \n", + "3079 0.401973 0.065844 \n", + "3079 0.386369 0.065845 \n", + "\n", + "[7151079 rows x 10 columns]" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "normaled_data" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [], + "source": [ + "target_cols = ['power_co2_factor', 'heat_co2_factor']" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [], + "source": [ + "save_data = normaled_data.groupby([x for x in normaled_data.columns if x not in target_cols])[target_cols].mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [], + "source": [ + "save_data.reset_index().to_csv('./results/去煤种化数据.csv', encoding='utf-8-sig', index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.13" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/.ipynb_checkpoints/两张表特征对齐-checkpoint.ipynb b/.ipynb_checkpoints/两张表特征对齐-checkpoint.ipynb new file mode 100644 index 0000000..3384653 --- /dev/null +++ b/.ipynb_checkpoints/两张表特征对齐-checkpoint.ipynb @@ -0,0 +1,759 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "8950aafd-80e8-4078-874c-966efdc4b0ac", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "50832980-f7e1-4a19-a5e0-b8a378ebd39b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
电厂名称机组编号铭牌容量 (MW)机组类型参数分类冷凝器型式入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)煤种所处地区longitudelatitudealtitude发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)
0江苏利港电力有限公司1350.0纯凝式亚临界水冷21602.0500026.0916.80烟煤江苏省120.0966231.9423611.00.5869900.076843
1江苏利港电力有限公司1350.0纯凝式亚临界水冷21926.8100026.6815.41烟煤江苏省120.0966231.9423611.00.6328590.077676
2江苏利港电力有限公司1350.0纯凝式亚临界水冷21261.9306226.4615.18烟煤江苏省120.0966231.9423611.00.6091960.074823
\n", + "
" + ], + "text/plain": [ + " 电厂名称 机组编号 铭牌容量 (MW) 机组类型 参数分类 冷凝器型式 入炉煤低位热值(kJ/kg) 燃煤挥发份Var(%) \\\n", + "0 江苏利港电力有限公司 1 350.0 纯凝式 亚临界 水冷 21602.05000 26.09 \n", + "1 江苏利港电力有限公司 1 350.0 纯凝式 亚临界 水冷 21926.81000 26.68 \n", + "2 江苏利港电力有限公司 1 350.0 纯凝式 亚临界 水冷 21261.93062 26.46 \n", + "\n", + " 燃煤灰份Aar(%) 煤种 所处地区 longitude latitude altitude 发电碳排放因子(kg/kWh) \\\n", + "0 16.80 烟煤 江苏省 120.09662 31.942361 1.0 0.586990 \n", + "1 15.41 烟煤 江苏省 120.09662 31.942361 1.0 0.632859 \n", + "2 15.18 烟煤 江苏省 120.09662 31.942361 1.0 0.609196 \n", + "\n", + " 供热碳排放因子(kg/MJ) \n", + "0 0.076843 \n", + "1 0.077676 \n", + "2 0.074823 " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data = pd.read_csv('train_data.csv')\n", + "total_data.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "499cac72-c6a3-4b86-8aed-6fc010b12693", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(5741, 16)" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "7ab5d82e-19bd-4aa4-9cd6-d2004718b00d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
发电类型地区城市企业名称机组编号机组状态机组数量单机容量(MW)总容量(MW)核心设备类型汽轮机类型压力参数冷却方式
0煤电安徽省安庆市国能神皖安庆发电有限责任公司1在役1320.0320.0煤粉锅炉凝气式亚临界水冷-开式循环
1煤电安徽省安庆市国能神皖安庆发电有限责任公司2在役1320.0320.0煤粉锅炉凝气式亚临界水冷-开式循环
2煤电安徽省安庆市国能神皖安庆发电有限责任公司3在役11000.01000.0煤粉锅炉凝气式超超临界水冷-闭式循环
\n", + "
" + ], + "text/plain": [ + " 发电类型 地区 城市 企业名称 机组编号 机组状态 机组数量 单机容量(MW) 总容量(MW) 核心设备类型 \\\n", + "0 煤电 安徽省 安庆市 国能神皖安庆发电有限责任公司 1 在役 1 320.0 320.0 煤粉锅炉 \n", + "1 煤电 安徽省 安庆市 国能神皖安庆发电有限责任公司 2 在役 1 320.0 320.0 煤粉锅炉 \n", + "2 煤电 安徽省 安庆市 国能神皖安庆发电有限责任公司 3 在役 1 1000.0 1000.0 煤粉锅炉 \n", + "\n", + " 汽轮机类型 压力参数 冷却方式 \n", + "0 凝气式 亚临界 水冷-开式循环 \n", + "1 凝气式 亚临界 水冷-开式循环 \n", + "2 凝气式 超超临界 水冷-闭式循环 " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "unit_data = pd.read_excel('./data/煤电机组情况(含企业名称).xlsx')\n", + "unit_data.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "c4d54203-5343-43df-b594-f6a13e6f47a1", + "metadata": {}, + "outputs": [], + "source": [ + "total_data.rename(columns={'电厂名称':'企业名称'}, inplace=True)\n", + "total_data['机组编号'] = total_data['机组编号'].astype('str')\n", + "unit_data['机组编号'] = unit_data['机组编号'].astype('str')" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "757e26c3-cd1b-48a3-9668-78e13f40436f", + "metadata": {}, + "outputs": [], + "source": [ + "def change_type(x:str):\n", + " if pd.isna(x):\n", + " return x\n", + " x = x.strip()\n", + " if '纯凝' in x:\n", + " return '纯凝式'\n", + " if '供热' in x:\n", + " return '供热式'\n", + " if '煤粉' in x:\n", + " return '煤粉锅炉'\n", + " if x.startswith('循环流化床'):\n", + " return '循环流化床锅炉'\n", + " if '三废' in x:\n", + " return '三废炉'\n", + " if '直接空冷' in x:\n", + " return '直接空冷'\n", + " if '间接空冷' in x:\n", + " return '间接空冷'\n", + " return x" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "fcc7c556-ae7b-4be1-9163-709ce1ca084c", + "metadata": {}, + "outputs": [], + "source": [ + "merge_data = total_data.merge(unit_data[['企业名称','机组编号','汽轮机类型', '压力参数', '冷却方式']], how='left', on=['企业名称', '机组编号'])" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "3af6ad2f-a881-4ee6-9a27-ecbe75c97b31", + "metadata": {}, + "outputs": [], + "source": [ + "merge_data['机组类型'] = merge_data.apply(lambda x: x['机组类型'] if pd.isna(x['汽轮机类型']) else x['汽轮机类型'], axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "dec103bc-c868-4557-ba83-9bbb02f8e9f8", + "metadata": {}, + "outputs": [], + "source": [ + "merge_data['参数分类'] = merge_data.apply(lambda x: x['参数分类'] if pd.isna(x['压力参数']) else x['压力参数'], axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "454273f0-51ab-4a75-9c44-9ae8b7cc2a79", + "metadata": {}, + "outputs": [], + "source": [ + "merge_data['冷凝器型式'] = merge_data.apply(lambda x: x['冷凝器型式'] if pd.isna(x['冷却方式']) else x['冷却方式'], axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "d3c9cb26-63b4-4c72-9c5b-d90a2c5867ca", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "水冷-闭式循环 2143\n", + "水冷 1166\n", + "水冷-开式循环 1101\n", + "空冷-直接空冷 492\n", + "直接空冷 241\n", + "空冷-间接空冷 154\n", + "间接空冷 74\n", + "空冷 19\n", + "其他 2\n", + "Name: 冷凝器型式, dtype: int64" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "merge_data['冷凝器型式'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "30b2d793-7b44-434a-96e3-c6ce15295881", + "metadata": {}, + "outputs": [], + "source": [ + "use_data = merge_data[merge_data.columns[:-3]].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "fbdf13c0-6174-463b-9dd0-9ed736e6d126", + "metadata": {}, + "outputs": [], + "source": [ + "for col in ['机组类型', '参数分类', '冷凝器型式']:\n", + " use_data[col] = use_data[col].apply(change_type)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "9697f501-1fef-4f24-b9d9-bece28e2c867", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
企业名称机组编号铭牌容量 (MW)机组类型参数分类冷凝器型式入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)煤种所处地区longitudelatitudealtitude发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)
0江苏利港电力有限公司1350.0凝气式亚临界水冷-开式循环21602.0500026.0916.80烟煤江苏省120.09662031.9423611.00.5869900.076843
1江苏利港电力有限公司1350.0凝气式亚临界水冷-开式循环21926.8100026.6815.41烟煤江苏省120.09662031.9423611.00.6328590.077676
2江苏利港电力有限公司1350.0凝气式亚临界水冷-开式循环21261.9306226.4615.18烟煤江苏省120.09662031.9423611.00.6091960.074823
3江苏利港电力有限公司1350.0凝气式亚临界水冷-开式循环20840.0000026.4314.55烟煤江苏省120.09662031.9423611.00.6021780.081628
4江苏利港电力有限公司1350.0凝气式亚临界水冷-开式循环20706.0000026.4314.96烟煤江苏省120.09662031.9423611.00.5902540.081103
...................................................
5736浙江浙能电力股份有限公司台州发电厂8350.0凝气式亚临界水冷-开式循环21973.0000037.4317.12烟煤浙江省121.46584028.70462373.00.6283000.078776
5737浙江浙能电力股份有限公司台州发电厂8350.0凝气式亚临界水冷-开式循环21372.0000039.8718.01烟煤浙江省121.46584028.70462373.00.5950190.076622
5738浙江浙能电力股份有限公司台州发电厂8350.0凝气式亚临界水冷-开式循环20856.0000039.3219.74烟煤浙江省121.46584028.70462373.00.5657180.074772
5739榆能榆神热电有限公司1350.0抽凝式超临界间接空冷25514.0000038.847.28烟煤陕西省109.82026538.3043831151.00.6644560.091482
5740榆能榆神热电有限公司2350.0抽凝式超临界间接空冷25514.0000038.847.28烟煤陕西省109.82026538.3043831151.00.6617590.091483
\n", + "

5741 rows × 16 columns

\n", + "
" + ], + "text/plain": [ + " 企业名称 机组编号 铭牌容量 (MW) 机组类型 参数分类 冷凝器型式 入炉煤低位热值(kJ/kg) \\\n", + "0 江苏利港电力有限公司 1 350.0 凝气式 亚临界 水冷-开式循环 21602.05000 \n", + "1 江苏利港电力有限公司 1 350.0 凝气式 亚临界 水冷-开式循环 21926.81000 \n", + "2 江苏利港电力有限公司 1 350.0 凝气式 亚临界 水冷-开式循环 21261.93062 \n", + "3 江苏利港电力有限公司 1 350.0 凝气式 亚临界 水冷-开式循环 20840.00000 \n", + "4 江苏利港电力有限公司 1 350.0 凝气式 亚临界 水冷-开式循环 20706.00000 \n", + "... ... ... ... ... ... ... ... \n", + "5736 浙江浙能电力股份有限公司台州发电厂 8 350.0 凝气式 亚临界 水冷-开式循环 21973.00000 \n", + "5737 浙江浙能电力股份有限公司台州发电厂 8 350.0 凝气式 亚临界 水冷-开式循环 21372.00000 \n", + "5738 浙江浙能电力股份有限公司台州发电厂 8 350.0 凝气式 亚临界 水冷-开式循环 20856.00000 \n", + "5739 榆能榆神热电有限公司 1 350.0 抽凝式 超临界 间接空冷 25514.00000 \n", + "5740 榆能榆神热电有限公司 2 350.0 抽凝式 超临界 间接空冷 25514.00000 \n", + "\n", + " 燃煤挥发份Var(%) 燃煤灰份Aar(%) 煤种 所处地区 longitude latitude altitude \\\n", + "0 26.09 16.80 烟煤 江苏省 120.096620 31.942361 1.0 \n", + "1 26.68 15.41 烟煤 江苏省 120.096620 31.942361 1.0 \n", + "2 26.46 15.18 烟煤 江苏省 120.096620 31.942361 1.0 \n", + "3 26.43 14.55 烟煤 江苏省 120.096620 31.942361 1.0 \n", + "4 26.43 14.96 烟煤 江苏省 120.096620 31.942361 1.0 \n", + "... ... ... .. ... ... ... ... \n", + "5736 37.43 17.12 烟煤 浙江省 121.465840 28.704623 73.0 \n", + "5737 39.87 18.01 烟煤 浙江省 121.465840 28.704623 73.0 \n", + "5738 39.32 19.74 烟煤 浙江省 121.465840 28.704623 73.0 \n", + "5739 38.84 7.28 烟煤 陕西省 109.820265 38.304383 1151.0 \n", + "5740 38.84 7.28 烟煤 陕西省 109.820265 38.304383 1151.0 \n", + "\n", + " 发电碳排放因子(kg/kWh) 供热碳排放因子(kg/MJ) \n", + "0 0.586990 0.076843 \n", + "1 0.632859 0.077676 \n", + "2 0.609196 0.074823 \n", + "3 0.602178 0.081628 \n", + "4 0.590254 0.081103 \n", + "... ... ... \n", + "5736 0.628300 0.078776 \n", + "5737 0.595019 0.076622 \n", + "5738 0.565718 0.074772 \n", + "5739 0.664456 0.091482 \n", + "5740 0.661759 0.091483 \n", + "\n", + "[5741 rows x 16 columns]" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "use_data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ff803c5a-5e56-462b-81fc-639877395d69", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/.ipynb_checkpoints/基于attention+LSTM对天数据建模-checkpoint.ipynb b/.ipynb_checkpoints/基于attention+LSTM对天数据建模-checkpoint.ipynb new file mode 100644 index 0000000..10dda4d --- /dev/null +++ b/.ipynb_checkpoints/基于attention+LSTM对天数据建模-checkpoint.ipynb @@ -0,0 +1,737 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "outputs": [ + { + "ename": "ImportError", + "evalue": "cannot import name 'get_config' from 'tensorflow.python.eager.context' (C:\\Users\\zhaojh\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow\\python\\eager\\context.py)", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mImportError\u001B[0m Traceback (most recent call last)", + "\u001B[1;32m~\\AppData\\Local\\Temp\\ipykernel_7812\\4169542727.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 1\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mnumpy\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0mnp\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 2\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mpandas\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0mpd\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m----> 3\u001B[1;33m \u001B[1;32mimport\u001B[0m \u001B[0mkeras\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 4\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mkeras\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mlayers\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mDense\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mConv1D\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mInput\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mBidirectional\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mLSTM\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mMultiply\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mDropout\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mFlatten\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mSoftmax\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mLambda\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 5\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mkeras\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mmodels\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mModel\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32m~\\AppData\\Roaming\\Python\\Python37\\site-packages\\keras\\__init__.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 23\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 24\u001B[0m \u001B[1;31m# See b/110718070#comment18 for more details about this import.\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 25\u001B[1;33m \u001B[1;32mfrom\u001B[0m \u001B[0mkeras\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mmodels\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 26\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 27\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mkeras\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mengine\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0minput_layer\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mInput\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32m~\\AppData\\Roaming\\Python\\Python37\\site-packages\\keras\\models.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 17\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 18\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mtensorflow\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mcompat\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mv2\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0mtf\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 19\u001B[1;33m \u001B[1;32mfrom\u001B[0m \u001B[0mkeras\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mbackend\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 20\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mkeras\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mmetrics\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0mmetrics_module\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 21\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mkeras\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0moptimizer_v1\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32m~\\AppData\\Roaming\\Python\\Python37\\site-packages\\keras\\backend.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 35\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mtensorflow\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mpython\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mdistribute\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mdistribute_coordinator\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0mdc\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 36\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mtensorflow\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mpython\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mdistribute\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mdistribute_coordinator_context\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0mdc_context\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 37\u001B[1;33m \u001B[1;32mfrom\u001B[0m \u001B[0mtensorflow\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mpython\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0meager\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mcontext\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mget_config\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 38\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mtensorflow\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mpython\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mframework\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mconfig\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 39\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mkeras\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mbackend_config\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;31mImportError\u001B[0m: cannot import name 'get_config' from 'tensorflow.python.eager.context' (C:\\Users\\zhaojh\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow\\python\\eager\\context.py)" + ] + } + ], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import keras\n", + "from keras.layers import Dense, Conv1D, Input, Bidirectional, LSTM, Multiply, Dropout, Flatten, Softmax, Lambda\n", + "from keras.models import Model" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "data = pd.read_csv('./train_data_processed.csv')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 3, + "outputs": [], + "source": [ + "obj_cols = data.columns[-32:]\n", + "num_cols = [x for x in data.columns if x not in obj_cols]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 4, + "outputs": [], + "source": [ + "maxs = data[num_cols].max()\n", + "mins = data[num_cols].min()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 5, + "outputs": [], + "source": [ + "for col in num_cols:\n", + " data[col] = (data[col] - mins[col]) / (maxs[col] - mins[col])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 6, + "outputs": [], + "source": [ + "optim = keras.optimizers.Adam(learning_rate=5e-4)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 7, + "outputs": [], + "source": [ + "def build_model(n_features, n_outs):\n", + " inputs = Input(shape=(1, n_features))\n", + " x = Conv1D(filters=64, kernel_size=1, activation='relu')(inputs)\n", + " x = Dropout(rate=0.1)(x)\n", + " lstm_out = Bidirectional(LSTM(units=128, return_sequences=True))(x)\n", + " attention_pre = Dense(1, name='attention_vec')(lstm_out)\n", + " attention_probs = Softmax()(attention_pre)\n", + " attention_mul = Multiply()([attention_probs, lstm_out])\n", + " attention_mul = Flatten()(attention_mul)\n", + " output = Dense(32, activation='relu')(attention_mul)\n", + " output = Dense(n_outs, activation='sigmoid')(output)\n", + " model = Model(inputs=[inputs], outputs=output)\n", + " model.summary()\n", + " model.compile(loss='mse', optimizer=optim,)\n", + " return model" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 8, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"model_1\"\n", + "__________________________________________________________________________________________________\n", + "Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + "input_1 (InputLayer) (None, 1, 251) 0 \n", + "__________________________________________________________________________________________________\n", + "conv1d_1 (Conv1D) (None, 1, 64) 16128 input_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "dropout_1 (Dropout) (None, 1, 64) 0 conv1d_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "bidirectional_1 (Bidirectional) (None, 1, 256) 197632 dropout_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "attention_vec (Dense) (None, 1, 1) 257 bidirectional_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "softmax_1 (Softmax) (None, 1, 1) 0 attention_vec[0][0] \n", + "__________________________________________________________________________________________________\n", + "multiply_1 (Multiply) (None, 1, 256) 0 softmax_1[0][0] \n", + " bidirectional_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "flatten_1 (Flatten) (None, 256) 0 multiply_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "dense_1 (Dense) (None, 32) 8224 flatten_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "dense_2 (Dense) (None, 1) 33 dense_1[0][0] \n", + "==================================================================================================\n", + "Total params: 222,274\n", + "Trainable params: 222,274\n", + "Non-trainable params: 0\n", + "__________________________________________________________________________________________________\n" + ] + } + ], + "source": [ + "model = build_model(len(data.columns) - 1, 1)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 9, + "outputs": [], + "source": [ + "from tensorflow.python.keras.utils.vis_utils import plot_model" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 10, + "outputs": [ + { + "data": { + "image/png": "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AXs75n6LiFCmf1+INrX4Tm3IUYIg1NXVab91OTeuhQCyFiIEwCQbP+wAEWJ+MEGV4a44RECEcgBCks3QkQNggggBMEGEAJggQgBMECEAJogQABNECIAJIgTABBECYIIIATBBhACYIEIATBAhACYc3qnd2tra49dEgEpRlPgfdgC+Mt0KFRcXT548OcMrzV2KomzZsuXAgQNpWn44HN6zZ09nZ2ealm88ZWVlI0aM+NaoHr9vATh6+umne/XqtXv37jQt//Dhw/369fvlL3+ZpuWbASKUvT755JM+ffr86le/SutannrqqT59+hw4cCCtazGwTH+DD+jU1dU1ffr0r7/+euvWrVarNX0rOn/+/HXXXXfttddu2rQpfWsxMNyRy1K//e1vt23btn79+rTmhxBSUFDwX//1Xy+//PLbb7+d1hUZFVqhbLR3797rr7/+8ccff/zxxzOzxrvvvnvv3r07d+5Md2KNBxHKOl1dXTNmzDh58uS2bdsydkDv379/3LhxDofjgQceyMwaDQMduazz3HPPeb3edevWZbJB+N73vvev//qvy5cv//LLLzO2UmNAhLLLgQMH7Ha7JEk33nhjhlf9+OOPWyyWX/3qVxleb65DRy6LdHV1zZw586uvvvrLX/5SUFCQ+QKef/75n/70p7t377766qszv/YchQhlkeeff/6hhx5qbW2dOHEilwI6Ojquv/76sWPH4ncDEsD1v1Jw0YEDB/r372+32/mWQX+QmP5cNuiBVigrKIoya9asQ4cOffjhh7179+ZbzIwZMxRF+eMf/8i3jFyB2wlZYc2aNU1NTevXr+eeH0LIk08+2dzc/P777/MuJDegFeJPluXvf//7DzzwwFNPPcW7lm/Mnj372LFj27Ztw+cseoQIcaYoyp133inL8o4dO7KhCaI++uijG264YdOmTffccw/vWrIdIsSZy+Wy2WzNzc233HIL71q+ZcGCBR999NFHH32Ul5fHu5ashgjxdOTIkfHjxy9duvSZZ57hXUukvXv3jhs3bsOGDfSH5qE7iBBPs2fP3r9//44dO/r06cO7lhjuvffeHTt27N6922LBbaduYddw8+KLL77zzjtr167NzvyQCz9h/4c//IF3IVkNrRAfR44cufbaa5csWVJTU8O7lnjKy8v37dv34Ycf4tZcdxAhPu655x56sd63b1/etcSzc+fOG264oaGh4a677uJdS5ZChDjYsGHDj3/8482bN0+bNo13LT370Y9+dPTo0a1bt/IuJEshQpl29OjR8ePHL1y48D//8z9516LLtm3bJk2atHnz5hkzZvCuJRshQpk2d+7cHTt2fPTRR/369eNdi15Tp0699NJLX3vtNd6FZCPckcuol1566dVXX3U6nTmUH0LIQw895PF4PvnkE96FZCO0Qplz/Pjx8ePHl5eXP//887xrSUxXV9fo0aNnzZqVc5VnAFqhzKmurqZfrci7kIRZLJYHH3zwxRdf/OKLL3jXknUQoQypr69/+eWXnU5n//79edeSjCVLlhQUFLhcLt6FZB105DLh+PHj11577d1337169WretSTvZz/7WV1d3YEDB/DGUy1EKBMqKir+/Oc/7969u7CwkHctydu/f/+oUaNef/312bNn864liyBCadfQ0HD33Xe/+eabs2bN4l0Lq5kzZw4cOPDVV1/lXUgWQYTS64svvhg/frwoisa4inC73YsWLZJlediwYbxryRa4nZBeDz74YF5e3q9//WvehaTG3LlzBw0atH79et6FZBFEKGUOHjwY8W26r7/++ksvvfTCCy8MGjSIV1WpVVBQcO+997pcrq6uLt61ZAtEKGXWr18/ZswY9V0woVDIZrP9+Mc//tGPfsS3sNS6//77Dxw4sHnzZt6FZAtEKGXee++948eP33333fPnz//iiy8efPDBrq6uZ599lnddKTZu3LibbrrppZde4l1ItsDthNQ4e/bsgAEDwuEwIcRqtfbt27erq2vDhg2lpaW8S0s9h8PxH//xH36/n8sXf2cbtEKp0dLSQvNDCAmHwydOnDhx4sSaNWuOHDnCt7B0qKioCIVC7777Lu9CsgIilBpbtmzRnpLp1fZ77703ZswYp9PJr660GDFiRHFxcV1dHe9CsgIilBrvvvvu+fPnI0aGw+FTp079y7/8S2VlpcFuYVVUVLz22mtnzpzhXQh/iFAKnD59evv27TGfysvLGz58+MMPP2yw75GaN2/e6dOn33rrLd6F8Geo15WXP//5zx0dHdHjLRbLHXfc8dFHH/3gBz/IfFVpNXTo0FtuuQWfYyWIUEps3rw54t5UXl6exWKx2+0ej8cw/1eNMGvWrHfffRd3dBGhFIi4ELJarZdddllzc/MTTzxhsP6b1g9/+MOjR4/6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sOkhG+d+mhadmES1KvHvyNFZGhsb6VzBYJDGhl4b5OjeSChCTz/99He/+12dExtPCu7I0R6Cei2kKIrf76f3UonmZgOJolw4jCRJUo8J9an4gxHz0vtRag8q4nysHRNnW6LLo3qMkKIobW1t6iZLkqS9cM/FvZFQhJYtWzZ58mSdExuPoHTz7f2CINTV1Zn2O7VNrr6+vqKiortjI8KCBQvOnTv3yiuvpLuq7IQPOwCro0ePDh06lHcV3CBCwOrzzz8fMmQI7yq4MdFXrsR/Y5jOTgtEO3r06OWXX867Cm5MFCGEJB3OnDkTCoXQkQNI0tGjRwkhiBBAkg4ePEgufGrQnBAhYLJ///5LLrnEzLcTECFgsn///u9973s5+pUPKYEIAZP9+/f/wz/8A+8qeEKEgMnf//73733ve7yr4AkRAia0I8e7Cp4QIUjeiRMnvvjiC0QIIEn0gxWjRo3iXQhPiBAkb/v27f369UOEAJK0Y8eOG2+80WIx9VFk6o0HRh9++OGNN97IuwrOECFIUjgc3r179w033MC7EM7ifWo1w6VAton/3nafz3fDDTfs2rXr2muvzVhJWajbDzvQT8+DHq+88sobb7zx7LPPDhw4kHctmdPa2tqvX78xY8bwLoSzblsh0O/06dPf//73J06cWF9fz7uWzJk7d+65c+def/113oVwhmuhFLjkkktcLtemTZteffVV3rVkSGdn55YtW26//XbehfCHCKXGzJkzFy9e/JOf/OSrr77iXUsm/OUvf/nyyy8RIYIIpdDKlSstFsujjz7Ku5BMeP/996+44opx48bxLoQ/RChlBg4cuHLlynXr1r333nu8a0m7119/fdasWbyryAq4nZBic+fO/fDDD3ft2mXgH5E/cuTI8OHDGxoa7rrrLt618IdWKMX++7//OxQKLV++nHchafSHP/yhb9++JSUlvAvJCohQig0dOvQ3v/nNypUrW1paeNeSLq+99tqsWbN69+7Nu5CsgI5c6imKMmvWrPb2dp/P16tXL97lpFgwGBwyZMjatWurqqp415IV0AqlniAIa9asOXz48NNPP827ltR7+eWXLRaL+uuGgFYoXX77298+9thj27dvN9hbyG677bZBgwZt2rSJdyHZAhFKl66urmnTpoXD4ZaWlry8PN7lpMbnn38+YsSI+vr6OXPm8K4lW6Ajly4Wi2Xt2rU7d+587rnneNeSMm63u2/fvnfeeSfvQrIIIpRGY8aMeeyxxyRJ+vvf/867ltT4/e9/X1ZW1qdPH96FZBF05NKro6PjpptuGjRoUGNjY65/BOvDDz+cOHHiBx98cMstt/CuJYugFUqv/Pz8NWvWNDc3/8///A/vWlitW7fummuumTJlCu9CsgsilHY333zzv/3bv/30pz/97LPPeNeSvDNnzrjd7vvuuy/X29KUQ0cuE06fPj1hwoSxY8c2NDTwriVJv//97//5n//50KFDZv4Rh5gQoQzZsmXLzJkz6+vry8rKeNeSjOLi4uHDh2/cuJF3IVkHEcqc++67r6Gh4W9/+9tll13Gu5bEeL3eKVOm4EZCTIhQ5oRCofHjx99+++0vvvgi71oSM3/+/H379v31r3/lXUg2wu2EzBk4cODq1av/93//95133uFdSwI+++yzV1555aGHHuJdSJZCK5Rp8+bN27Zt265du/r378+7Fl1+/vOf//73vz9w4EBBQQHvWrIRWqFMe+GFF06fPi1JEu9CdDl9+vS6det+8pOfID/dQYQy7bLLLvvNb37z/PPPf/DBB7xr6dmLL754+vTppUuX8i4ke6Ejx8edd9554MABn8+XzZ/9VBRl3Lhx06ZNW7NmDe9ashdaIT7WrFlz5MiRp556inch8bz55puffPLJT37yE96FZDW0Qtw899xzP/3pT7dt25a1P44wbdq0Sy655O233+ZdSFZDhLjp6uqaPn36qVOntm3bZrVaeZcTafPmzTNnzmxubp46dSrvWrIaIsRTW1vb9ddf/8tf/vJnP/sZ71oi3XrrrXl5ee+//z7vQrKeAlytWLGiT58+n376Ke9CvoXeLdyyZQvvQnIAWiHOOjo6Jk2a1L9//82bN2fP5whuu+22rq6uzZs38y4kB+COHGf5+fnr1q1raWlxuVy8a/mG1+ttamoy9heyphAixN/111//0EMP/exnPzt8+LA68rPPPsvMOxi+/vrr4uLiP/3pT+qY5cuXT5kyZcaMGRlYuxHw7kmCoijK2bNnx4wZ80//9E+KonR1da1Zs6Zv3755eXmhUCjdq966dSs9EubMmbNv3z6v10sIef/999O9XsNAhLLFli1bBEH47W9/+4//+I8Wi4VeF7311lvpXu+6devo19xZrdb8/PwJEyZMmjQp3Ss1EnTkssXUqVPvvPPORx99dOvWrV1dXYqiFBQUaPtXabJnzx4aoXA43NHR8be//W3Pnj3PPPPM2bNn071qY0CEssKuXbt+8IMfvP322+FwOBwO05Hnz59vbGxM96p9Pt/58+fVwXA4fOrUqccff/yqq6763e9+p+CGbY94N4Nmd/bsWUmS8vLyYr5BwWq1nj59Oq0FdPcpdNqT/H//7/+lde0GgFaIszfffPPXv/51V1eX2vhohcNh9XI/Hb788svjx4939+ySJUvsdnv61m4MiBBn99xzT0tLyxVXXBGzFSooKGhubk7f2nfv3t3dU48++ui6devy8/PTt3ZjQIT4mzhxos/nmz59usUS+XKEw+Gmpqb0rXr37t0RIREEwWKxrFq16umnn86ed0tkM0QoK3znO9959913n3rqKXoEq+MVRWltbdVe7qfWnj17tDnJy8srKCh47bXXbDZbmtZoPIhQthAE4ec///nrr7/er18/bafu3Llz27dvT9NKd+zYoV6D5efn9+3bt7GxEb/jnRBEKLvMnj17165d3//+99X+VVovh/bs2UMfWK3WoUOHbtu2DV+2mChEKOuMHDmypaWlurqaECIIQkdHx5YtW9Kxos8///zEiROEEKvVOmrUqNbW1muuuSYdKzI2RCgb9erV67nnnlu7dq3ValUU5U9/+lNnZ2fK10JvxwmCMH369G3btl1xxRUpX4UZGOTzQl6v99lnn+VdReoFg8E///nPZ86cKSkpKSwsTO3CP/300507d1555ZUTJ06MvhloAJn5En2D7LhDhw4Z8jeoCwsLb7/99ssvv/zYsWMpX/iJEyfGjh170003GS8/hw8fztjxYKh/nBn1pzsURdm6devkyZNTu9iWlhaj/mRdfX19RUVFZtZltNOPIQmCkPL8EEKMmp8MQ4QAmCBCAEwQIQAmiBAAE0QIgAkiBMAEEQJggggBMEGEAJggQgBMECEAJogQABNECIAJIpSwQCBQW1tbWlra3QR2u13PNxj2uJwcYuZ9YqjPC2XG8uXLV69erR0TCoUKCwsT/fxv9HKSEwqFPv744127dnk8noaGBp1zab/7yuv1Rn+YorW1tbi4WB2Mv3XZtk8yiuOXEadQXV1dJrclYtfRA5d9OcmRJEn9Ma+EZpRlmc5ls9min1W/Ss7v9+tZWlbtk0weD+jIsQqFQnx/43HF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\n", + "text/plain": "" + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "plot_model(model, to_file='model.png')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 18, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 19, + "outputs": [ + { + "data": { + "text/plain": "251" + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "feature_cols = [x for x in data.columns if x != '燃料消耗量']\n", + "len(feature_cols)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 20, + "outputs": [], + "source": [ + "train_data, valid = train_test_split(data, test_size=0.2, shuffle=True, random_state=666)\n", + "valid_data, test_data = train_test_split(valid, test_size=0.5, shuffle=True, random_state=666)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 21, + "outputs": [], + "source": [ + "X_train, Y_train = train_data[feature_cols], train_data['燃料消耗量']\n", + "X_valid, Y_valid = valid_data[feature_cols], valid_data['燃料消耗量']\n", + "X_test, Y_test = test_data[feature_cols], test_data['燃料消耗量']" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 22, + "outputs": [ + { + "data": { + "text/plain": "((922, 1, 251), (922, 1))" + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x_train = np.expand_dims(X_train.values, axis=1)\n", + "y_train = Y_train.values.reshape(-1, 1)\n", + "x_train.shape, y_train.shape" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 23, + "outputs": [], + "source": [ + "x_valid = np.expand_dims(X_valid.values, axis=1)\n", + "y_valid = Y_valid.values.reshape(-1, 1)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 24, + "outputs": [], + "source": [ + "x_test = np.expand_dims(X_test.values, axis=1)\n", + "y_test = Y_test.values.reshape(-1, 1)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 25, + "outputs": [], + "source": [ + "callbacks = [keras.callbacks.EarlyStopping(monitor='val_loss', patience=int(10)),\n", + " keras.callbacks.ModelCheckpoint('./best_model.h5', monitor='val_loss', verbose=0, save_best_only=False, save_weights_only=False, mode='auto', period=1)]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 26, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train on 922 samples, validate on 116 samples\n", + "Epoch 1/100\n", + "922/922 [==============================] - 1s 1ms/step - loss: 0.0396 - val_loss: 0.0128\n", + "Epoch 2/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0074 - val_loss: 0.0057\n", + "Epoch 3/100\n", + "922/922 [==============================] - 0s 78us/step - loss: 0.0048 - val_loss: 0.0040\n", + "Epoch 4/100\n", + "922/922 [==============================] - 0s 61us/step - loss: 0.0035 - val_loss: 0.0028\n", + "Epoch 5/100\n", + "922/922 [==============================] - 0s 77us/step - loss: 0.0030 - val_loss: 0.0023\n", + "Epoch 6/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0025 - val_loss: 0.0020\n", + "Epoch 7/100\n", + "922/922 [==============================] - 0s 86us/step - loss: 0.0023 - val_loss: 0.0020\n", + "Epoch 8/100\n", + "922/922 [==============================] - 0s 78us/step - loss: 0.0023 - val_loss: 0.0018\n", + "Epoch 9/100\n", + "922/922 [==============================] - 0s 67us/step - loss: 0.0022 - val_loss: 0.0017\n", + "Epoch 10/100\n", + "922/922 [==============================] - 0s 61us/step - loss: 0.0019 - val_loss: 0.0016\n", + "Epoch 11/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0019 - val_loss: 0.0016\n", + "Epoch 12/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0019 - val_loss: 0.0017\n", + "Epoch 13/100\n", + "922/922 [==============================] - 0s 52us/step - loss: 0.0019 - val_loss: 0.0017\n", + "Epoch 14/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0018 - val_loss: 0.0015\n", + "Epoch 15/100\n", + "922/922 [==============================] - 0s 87us/step - loss: 0.0018 - val_loss: 0.0015\n", + "Epoch 16/100\n", + "922/922 [==============================] - 0s 52us/step - loss: 0.0016 - val_loss: 0.0013\n", + "Epoch 17/100\n", + "922/922 [==============================] - 0s 68us/step - loss: 0.0015 - val_loss: 0.0014\n", + "Epoch 18/100\n", + "922/922 [==============================] - 0s 73us/step - loss: 0.0014 - val_loss: 0.0013\n", + "Epoch 19/100\n", + "922/922 [==============================] - 0s 52us/step - loss: 0.0017 - val_loss: 0.0014\n", + "Epoch 20/100\n", + "922/922 [==============================] - 0s 70us/step - loss: 0.0017 - val_loss: 0.0013\n", + "Epoch 21/100\n", + "922/922 [==============================] - 0s 73us/step - loss: 0.0015 - val_loss: 0.0013\n", + "Epoch 22/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0014 - val_loss: 0.0013\n", + "Epoch 23/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0014 - val_loss: 0.0012\n", + "Epoch 24/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0013 - val_loss: 0.0014\n", + "Epoch 25/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0013 - val_loss: 0.0012\n", + "Epoch 26/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0013 - val_loss: 0.0011\n", + "Epoch 27/100\n", + "922/922 [==============================] - 0s 65us/step - loss: 0.0013 - val_loss: 0.0012\n", + "Epoch 28/100\n", + "922/922 [==============================] - 0s 89us/step - loss: 0.0013 - val_loss: 0.0013\n", + "Epoch 29/100\n", + "922/922 [==============================] - 0s 52us/step - loss: 0.0013 - val_loss: 0.0011\n", + "Epoch 30/100\n", + "922/922 [==============================] - 0s 70us/step - loss: 0.0013 - val_loss: 0.0012\n", + "Epoch 31/100\n", + "922/922 [==============================] - 0s 60us/step - loss: 0.0014 - val_loss: 0.0013\n", + "Epoch 32/100\n", + "922/922 [==============================] - 0s 70us/step - loss: 0.0012 - val_loss: 0.0012\n", + "Epoch 33/100\n", + "922/922 [==============================] - 0s 51us/step - loss: 0.0013 - val_loss: 0.0012\n", + "Epoch 34/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0012 - val_loss: 0.0012\n", + "Epoch 35/100\n", + "922/922 [==============================] - 0s 60us/step - loss: 0.0013 - val_loss: 0.0014\n", + "Epoch 36/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0012 - val_loss: 0.0011\n", + "Epoch 37/100\n", + "922/922 [==============================] - 0s 62us/step - loss: 0.0011 - val_loss: 0.0011\n", + "Epoch 38/100\n", + "922/922 [==============================] - 0s 77us/step - loss: 0.0012 - val_loss: 0.0012\n", + "Epoch 39/100\n", + "922/922 [==============================] - 0s 60us/step - loss: 0.0013 - val_loss: 0.0011\n", + "Epoch 40/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0012 - val_loss: 0.0011\n", + "Epoch 41/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0012 - val_loss: 0.0014\n", + "Epoch 42/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0013 - val_loss: 0.0014\n", + "Epoch 43/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0013 - val_loss: 0.0011\n", + "Epoch 44/100\n", + "922/922 [==============================] - 0s 51us/step - loss: 0.0012 - val_loss: 0.0011\n", + "Epoch 45/100\n", + "922/922 [==============================] - 0s 95us/step - loss: 0.0011 - val_loss: 0.0011\n", + "Epoch 46/100\n", + "922/922 [==============================] - 0s 68us/step - loss: 0.0011 - val_loss: 0.0011\n", + "Epoch 47/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0011 - val_loss: 0.0012\n", + "Epoch 48/100\n", + "922/922 [==============================] - 0s 66us/step - loss: 0.0011 - val_loss: 0.0010\n", + "Epoch 49/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 9.9569e-04 - val_loss: 9.4151e-04\n", + "Epoch 50/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0010 - val_loss: 0.0011\n", + "Epoch 51/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0010 - val_loss: 0.0011\n", + "Epoch 52/100\n", + "922/922 [==============================] - 0s 77us/step - loss: 0.0010 - val_loss: 9.9602e-04\n", + "Epoch 53/100\n", + "922/922 [==============================] - 0s 52us/step - loss: 9.3358e-04 - val_loss: 0.0012\n", + "Epoch 54/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0010 - val_loss: 9.6337e-04\n", + "Epoch 55/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 9.9897e-04 - val_loss: 9.9428e-04\n", + "Epoch 56/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0010 - val_loss: 9.1976e-04\n", + "Epoch 57/100\n", + "922/922 [==============================] - 0s 60us/step - loss: 9.8333e-04 - val_loss: 0.0011\n", + "Epoch 58/100\n", + "922/922 [==============================] - 0s 86us/step - loss: 0.0011 - val_loss: 0.0010\n", + "Epoch 59/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0010 - val_loss: 0.0010\n", + "Epoch 60/100\n", + "922/922 [==============================] - 0s 51us/step - loss: 9.6106e-04 - val_loss: 9.5494e-04\n", + "Epoch 61/100\n", + "922/922 [==============================] - 0s 87us/step - loss: 9.1071e-04 - val_loss: 8.9771e-04\n", + "Epoch 62/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 9.1379e-04 - val_loss: 9.4967e-04\n", + "Epoch 63/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 9.3075e-04 - val_loss: 9.1627e-04\n", + "Epoch 64/100\n", + "922/922 [==============================] - 0s 78us/step - loss: 8.8605e-04 - val_loss: 9.3663e-04\n", + "Epoch 65/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 9.5708e-04 - val_loss: 0.0011\n", + "Epoch 66/100\n", + "922/922 [==============================] - 0s 68us/step - loss: 9.5701e-04 - val_loss: 8.9826e-04\n", + "Epoch 67/100\n", + "922/922 [==============================] - 0s 60us/step - loss: 9.4454e-04 - val_loss: 0.0011\n", + "Epoch 68/100\n", + "922/922 [==============================] - 0s 74us/step - loss: 9.5393e-04 - val_loss: 9.7981e-04\n", + "Epoch 69/100\n", + "922/922 [==============================] - 0s 104us/step - loss: 9.5125e-04 - val_loss: 0.0010\n", + "Epoch 70/100\n", + "922/922 [==============================] - 0s 78us/step - loss: 9.5720e-04 - val_loss: 9.7615e-04\n", + "Epoch 71/100\n", + "922/922 [==============================] - 0s 64us/step - loss: 9.2241e-04 - val_loss: 0.0010\n" + ] + }, + { + "data": { + "text/plain": "" + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.fit(x_train, y_train, epochs=100, batch_size=32, validation_data=(x_test, y_test), shuffle=True,\n", + " callbacks=callbacks)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 27, + "outputs": [], + "source": [ + "y_pred = model.predict(x_test)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 28, + "outputs": [ + { + "data": { + "text/plain": "array([0.30161506, 0.12067786, 0.43900865, 0.4143401 , 0.11434203,\n 0.87028706, 0.15387392, 0.86223227, 0.8570186 , 0.4433931 ,\n 0.7649788 , 0.36369222, 0.33063045, 0.7437426 , 0.3493362 ,\n 0.7671248 , 0.7743846 , 0.12363896, 0.4528606 , 0.75037146,\n 0.45131576, 0.34990048, 0.7552419 , 0.7508755 , 0.7558205 ,\n 0.3391131 , 0.76618046, 0.38217723, 0.30887872, 0.36930698,\n 0.3591324 , 0.83817935, 0.9321221 , 0.35430533, 0.11836711,\n 0.764429 , 0.7478696 , 0.74976325, 0.3656214 , 0.3482211 ,\n 0.3658831 , 0.35415024, 0.29030812, 0.7965492 , 0.9372817 ,\n 0.11179626, 0.33758143, 0.305908 , 0.12149343, 0.41378874,\n 0.09611899, 0.36266702, 0.76215094, 0.41939664, 0.7642038 ,\n 0.36630815, 0.36369124, 0.775969 , 0.7431689 , 0.49149197,\n 0.35072863, 0.7608663 , 0.88904417, 0.11546668, 0.32508087,\n 0.78478754, 0.2949888 , 0.9328996 , 0.26087016, 0.15387377,\n 0.7867287 , 0.35840425, 0.8485855 , 0.36474293, 0.86086893,\n 0.85082245, 0.37929475, 0.88898706, 0.44798538, 0.74498856,\n 0.7642088 , 0.9374167 , 0.24628928, 0.1150094 , 0.35409844,\n 0.34573317, 0.1182591 , 0.35334843, 0.8806509 , 0.3744196 ,\n 0.12240422, 0.7410463 , 0.3571657 , 0.44970232, 0.8927134 ,\n 0.76465344, 0.7640152 , 0.33744502, 0.7715051 , 0.44094718,\n 0.33831298, 0.93699497, 0.30656263, 0.10126469, 0.8242742 ,\n 0.85100025, 0.42451733, 0.362445 , 0.77677643, 0.40487826,\n 0.78558755, 0.339495 , 0.8240729 , 0.7534524 , 0.93057597,\n 0.3128613 ], dtype=float32)" + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y_pred = np.squeeze(y_pred)\n", + "y_pred" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 29, + "outputs": [], + "source": [ + "from sklearn.metrics import mean_absolute_error, mean_squared_error, mean_absolute_percentage_error, r2_score" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 30, + "outputs": [], + "source": [ + "y_true = np.squeeze(y_test)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 31, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 1.02E-03\n", + "RMSE: 0.032\n", + "MAE: 0.0236\n", + "MAPE: 7.07%\n", + "R_2: 0.9858\n" + ] + } + ], + "source": [ + "MSE = mean_squared_error(y_true, y_pred)\n", + "RMSE = np.sqrt(mean_squared_error(y_true, y_pred))\n", + "MAE = mean_absolute_error(y_true, y_pred)\n", + "MAPE = mean_absolute_percentage_error(y_true, y_pred)\n", + "R_2 = r2_score(y_true, y_pred)\n", + "print(f\"MSE: {format(MSE, '.2E')}\")\n", + "print(f'RMSE: {round(RMSE, 4)}')\n", + "print(f'MAE: {round(MAE, 4)}')\n", + "print(f'MAPE: {round(MAPE * 100, 2)}%')\n", + "print(f'R_2: {round(R_2, 4)}')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 32, + "outputs": [], + "source": [ + "def recover(x, col='燃料消耗量'):\n", + " return np.expm1(x * (maxs[col] - mins[col]) + mins[col])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 33, + "outputs": [], + "source": [ + "y_true_recover = recover(y_true)\n", + "y_pred_recover = recover(y_pred)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 34, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 7.76E+04\n", + "RMSE: 278.5442\n", + "MAE: 166.5543\n", + "MAPE: 9.54%\n", + "R_2: 0.9717\n" + ] + } + ], + "source": [ + "MSE = mean_squared_error(y_true_recover, y_pred_recover)\n", + "RMSE = np.sqrt(mean_squared_error(y_true_recover, y_pred_recover))\n", + "MAE = mean_absolute_error(y_true_recover, y_pred_recover)\n", + "MAPE = mean_absolute_percentage_error(y_true_recover, y_pred_recover)\n", + "R_2 = r2_score(y_true_recover, y_pred_recover)\n", + "print(f\"MSE: {format(MSE, '.2E')}\")\n", + "print(f'RMSE: {round(RMSE, 4)}')\n", + "print(f'MAE: {round(MAE, 4)}')\n", + "print(f'MAPE: {round(MAPE * 100, 2)}%')\n", + "print(f'R_2: {round(R_2, 4)}')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/.ipynb_checkpoints/基于煤种标准化的数据建模及预测-checkpoint.ipynb b/.ipynb_checkpoints/基于煤种标准化的数据建模及预测-checkpoint.ipynb new file mode 100644 index 0000000..8a018b7 --- /dev/null +++ b/.ipynb_checkpoints/基于煤种标准化的数据建模及预测-checkpoint.ipynb @@ -0,0 +1,2299 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import xgboost as xgb\n", + "import seaborn as sns\n", + "from sklearn.model_selection import train_test_split" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
所处地区机组类型参数分类冷凝器型式铭牌容量 (MW)longitudelatitudealtitudepower_co2_factorheat_co2_factor
0上海市供热式亚临界水冷5.7071104.8078753.4677691.3862940.5743320.072680
1上海市凝气式亚临界水冷5.7071104.8078753.4677691.3862940.5821640.072391
2上海市凝气式亚临界水冷5.7714414.8089393.4768861.0986120.5692810.071041
3上海市凝气式超超临界水冷6.9087554.8073563.4583731.6094380.5062500.070460
4上海市纯凝式亚临界水冷5.8607864.8078393.4786272.8332130.5652260.073717
\n", + "
" + ], + "text/plain": [ + " 所处地区 机组类型 参数分类 冷凝器型式 铭牌容量 (MW) longitude latitude altitude \\\n", + "0 上海市 供热式 亚临界 水冷 5.707110 4.807875 3.467769 1.386294 \n", + "1 上海市 凝气式 亚临界 水冷 5.707110 4.807875 3.467769 1.386294 \n", + "2 上海市 凝气式 亚临界 水冷 5.771441 4.808939 3.476886 1.098612 \n", + "3 上海市 凝气式 超超临界 水冷 6.908755 4.807356 3.458373 1.609438 \n", + "4 上海市 纯凝式 亚临界 水冷 5.860786 4.807839 3.478627 2.833213 \n", + "\n", + " power_co2_factor heat_co2_factor \n", + "0 0.574332 0.072680 \n", + "1 0.582164 0.072391 \n", + "2 0.569281 0.071041 \n", + "3 0.506250 0.070460 \n", + "4 0.565226 0.073717 " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = pd.read_csv('./results/去煤种化数据.csv')\n", + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(['所处地区', '机组类型', '参数分类', '冷凝器型式'],\n", + " Index(['铭牌容量 (MW)', 'longitude', 'latitude', 'altitude'], dtype='object'))" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "object_cols = data.columns[:4].tolist()\n", + "num_cols = data.columns[4:8]\n", + "object_cols, num_cols" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "test_data = pd.read_excel('./data/煤电机组情况(含企业名称).xlsx',)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "test_geo_info = pd.read_excel('./data/电厂地理信息.xlsx')\n", + "test_geo_info.rename(columns={'name':'企业名称'}, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "test_data = test_data.merge(test_geo_info, how='left', on='企业名称').drop(columns='address')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "test_data_cp = test_data.copy()\n", + "test_data = test_data[['地区', '汽轮机类型', '压力参数', '冷却方式', '单机容量(MW)', 'lat', 'lng', 'altitude']].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "test_data.columns = data.columns[:8].tolist()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "test_data['na_cols'] = test_data.isna().sum(axis=1).values" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "110838.446" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test_data[test_data.na_cols <= 1]['铭牌容量 (MW)'].sum() /10" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_test_data = test_data[test_data.na_cols <= 1].drop(columns='na_cols').reset_index(drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "水冷 413\n", + "空冷 110\n", + "其他 1\n", + "Name: 冷凝器型式, dtype: int64" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data['冷凝器型式'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "水冷-闭式循环 2125\n", + "其他 1076\n", + "水冷-开式循环 972\n", + "空冷-直接空冷 586\n", + "空冷-间接空冷 264\n", + "水冷 52\n", + "空冷 14\n", + "间接空冷 4\n", + "直接空冷 2\n", + "Name: 冷凝器型式, dtype: int64" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_test_data['冷凝器型式'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "def change_type(x:str):\n", + " if '水冷' in x:\n", + " return '水冷'\n", + " elif '空冷' in x:\n", + " return \"空冷\"\n", + " else:\n", + " return '其他'" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_test_data.fillna('其他', inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_test_data['冷凝器型式'] = new_test_data['冷凝器型式'].apply(change_type)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "亚临界 265\n", + "超临界 156\n", + "超超临界 69\n", + "超高压 32\n", + "高压 2\n", + "Name: 参数分类, dtype: int64" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data['参数分类'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "高压 1538\n", + "亚临界 1075\n", + "中压 1069\n", + "超临界 608\n", + "超高压 447\n", + "超超临界 358\n", + "Name: 参数分类, dtype: int64" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_test_data['参数分类'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_test_data['机组类型'] = new_test_data['机组类型'].apply(lambda x: x if x.endswith('式') else x + '式')" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "for col in num_cols:\n", + " new_test_data[col] = new_test_data[col].apply(lambda x: 0 if x<0 else x)\n", + " new_test_data[col] = np.log1p(new_test_data[col])" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
所处地区机组类型参数分类冷凝器型式铭牌容量 (MW)longitudelatitudealtitude
0安徽省凝气式亚临界水冷5.7714413.4515834.7720942.397895
1安徽省凝气式亚临界水冷5.7714413.4515834.7720942.397895
2安徽省凝气式超超临界水冷6.9087553.4515834.7720942.397895
3安徽省凝气式超超临界水冷6.9087553.4515834.7720942.397895
4安徽省抽凝式高压水冷3.7135723.4515834.7720942.397895
...........................
5090重庆市抽凝式高压水冷3.9120233.4274894.6823535.645447
5091重庆市抽凝式高压水冷3.2580973.4276664.6823065.627621
5092重庆市抽背式高压水冷3.2580973.4276664.6823065.627621
5093重庆市背压式高压其他3.4339873.4287154.6822085.690359
5094重庆市抽凝式高压水冷4.8362823.4287154.6822085.690359
\n", + "

5095 rows × 8 columns

\n", + "
" + ], + "text/plain": [ + " 所处地区 机组类型 参数分类 冷凝器型式 铭牌容量 (MW) longitude latitude altitude\n", + "0 安徽省 凝气式 亚临界 水冷 5.771441 3.451583 4.772094 2.397895\n", + "1 安徽省 凝气式 亚临界 水冷 5.771441 3.451583 4.772094 2.397895\n", + "2 安徽省 凝气式 超超临界 水冷 6.908755 3.451583 4.772094 2.397895\n", + "3 安徽省 凝气式 超超临界 水冷 6.908755 3.451583 4.772094 2.397895\n", + "4 安徽省 抽凝式 高压 水冷 3.713572 3.451583 4.772094 2.397895\n", + "... ... ... ... ... ... ... ... ...\n", + "5090 重庆市 抽凝式 高压 水冷 3.912023 3.427489 4.682353 5.645447\n", + "5091 重庆市 抽凝式 高压 水冷 3.258097 3.427666 4.682306 5.627621\n", + "5092 重庆市 抽背式 高压 水冷 3.258097 3.427666 4.682306 5.627621\n", + "5093 重庆市 背压式 高压 其他 3.433987 3.428715 4.682208 5.690359\n", + "5094 重庆市 抽凝式 高压 水冷 4.836282 3.428715 4.682208 5.690359\n", + "\n", + "[5095 rows x 8 columns]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_test_data" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
所处地区机组类型参数分类冷凝器型式铭牌容量 (MW)longitudelatitudealtitudepower_co2_factorheat_co2_factor
0上海市供热式亚临界水冷5.7071104.8078753.4677691.3862940.5743320.072680
1上海市凝气式亚临界水冷5.7071104.8078753.4677691.3862940.5821640.072391
2上海市凝气式亚临界水冷5.7714414.8089393.4768861.0986120.5692810.071041
3上海市凝气式超超临界水冷6.9087554.8073563.4583731.6094380.5062500.070460
4上海市纯凝式亚临界水冷5.8607864.8078393.4786272.8332130.5652260.073717
.................................
5090重庆市抽凝式高压水冷3.9120233.4274894.6823535.645447NaNNaN
5091重庆市抽凝式高压水冷3.2580973.4276664.6823065.627621NaNNaN
5092重庆市抽背式高压水冷3.2580973.4276664.6823065.627621NaNNaN
5093重庆市背压式高压其他3.4339873.4287154.6822085.690359NaNNaN
5094重庆市抽凝式高压水冷4.8362823.4287154.6822085.690359NaNNaN
\n", + "

5619 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " 所处地区 机组类型 参数分类 冷凝器型式 铭牌容量 (MW) longitude latitude altitude \\\n", + "0 上海市 供热式 亚临界 水冷 5.707110 4.807875 3.467769 1.386294 \n", + "1 上海市 凝气式 亚临界 水冷 5.707110 4.807875 3.467769 1.386294 \n", + "2 上海市 凝气式 亚临界 水冷 5.771441 4.808939 3.476886 1.098612 \n", + "3 上海市 凝气式 超超临界 水冷 6.908755 4.807356 3.458373 1.609438 \n", + "4 上海市 纯凝式 亚临界 水冷 5.860786 4.807839 3.478627 2.833213 \n", + "... ... ... ... ... ... ... ... ... \n", + "5090 重庆市 抽凝式 高压 水冷 3.912023 3.427489 4.682353 5.645447 \n", + "5091 重庆市 抽凝式 高压 水冷 3.258097 3.427666 4.682306 5.627621 \n", + "5092 重庆市 抽背式 高压 水冷 3.258097 3.427666 4.682306 5.627621 \n", + "5093 重庆市 背压式 高压 其他 3.433987 3.428715 4.682208 5.690359 \n", + "5094 重庆市 抽凝式 高压 水冷 4.836282 3.428715 4.682208 5.690359 \n", + "\n", + " power_co2_factor heat_co2_factor \n", + "0 0.574332 0.072680 \n", + "1 0.582164 0.072391 \n", + "2 0.569281 0.071041 \n", + "3 0.506250 0.070460 \n", + "4 0.565226 0.073717 \n", + "... ... ... \n", + "5090 NaN NaN \n", + "5091 NaN NaN \n", + "5092 NaN NaN \n", + "5093 NaN NaN \n", + "5094 NaN NaN \n", + "\n", + "[5619 rows x 10 columns]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "merge_data = pd.concat([data, new_test_data], axis=0)\n", + "merge_data" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
铭牌容量 (MW)longitudelatitudealtitudepower_co2_factorheat_co2_factor所处地区_上海市所处地区_云南省所处地区_内蒙古所处地区_内蒙古自治区...机组类型_背压式参数分类_中压参数分类_亚临界参数分类_超临界参数分类_超超临界参数分类_超高压参数分类_高压冷凝器型式_其他冷凝器型式_水冷冷凝器型式_空冷
05.7071104.8078753.4677691.3862940.5743320.0726801000...0010000010
15.7071104.8078753.4677691.3862940.5821640.0723911000...0010000010
25.7714414.8089393.4768861.0986120.5692810.0710411000...0010000010
36.9087554.8073563.4583731.6094380.5062500.0704601000...0000100010
45.8607864.8078393.4786272.8332130.5652260.0737171000...0010000010
..................................................................
50903.9120233.4274894.6823535.645447NaNNaN0000...0000001010
50913.2580973.4276664.6823065.627621NaNNaN0000...0000001010
50923.2580973.4276664.6823065.627621NaNNaN0000...0000001010
50933.4339873.4287154.6822085.690359NaNNaN0000...1000001100
50944.8362823.4287154.6822085.690359NaNNaN0000...0000001010
\n", + "

5619 rows × 63 columns

\n", + "
" + ], + "text/plain": [ + " 铭牌容量 (MW) longitude latitude altitude power_co2_factor \\\n", + "0 5.707110 4.807875 3.467769 1.386294 0.574332 \n", + "1 5.707110 4.807875 3.467769 1.386294 0.582164 \n", + "2 5.771441 4.808939 3.476886 1.098612 0.569281 \n", + "3 6.908755 4.807356 3.458373 1.609438 0.506250 \n", + "4 5.860786 4.807839 3.478627 2.833213 0.565226 \n", + "... ... ... ... ... ... \n", + "5090 3.912023 3.427489 4.682353 5.645447 NaN \n", + "5091 3.258097 3.427666 4.682306 5.627621 NaN \n", + "5092 3.258097 3.427666 4.682306 5.627621 NaN \n", + "5093 3.433987 3.428715 4.682208 5.690359 NaN \n", + "5094 4.836282 3.428715 4.682208 5.690359 NaN \n", + "\n", + " heat_co2_factor 所处地区_上海市 所处地区_云南省 所处地区_内蒙古 所处地区_内蒙古自治区 ... \\\n", + "0 0.072680 1 0 0 0 ... \n", + "1 0.072391 1 0 0 0 ... \n", + "2 0.071041 1 0 0 0 ... \n", + "3 0.070460 1 0 0 0 ... \n", + "4 0.073717 1 0 0 0 ... \n", + "... ... ... ... ... ... ... \n", + "5090 NaN 0 0 0 0 ... \n", + "5091 NaN 0 0 0 0 ... \n", + "5092 NaN 0 0 0 0 ... \n", + "5093 NaN 0 0 0 0 ... \n", + "5094 NaN 0 0 0 0 ... \n", + "\n", + " 机组类型_背压式 参数分类_中压 参数分类_亚临界 参数分类_超临界 参数分类_超超临界 参数分类_超高压 参数分类_高压 \\\n", + "0 0 0 1 0 0 0 0 \n", + "1 0 0 1 0 0 0 0 \n", + "2 0 0 1 0 0 0 0 \n", + "3 0 0 0 0 1 0 0 \n", + "4 0 0 1 0 0 0 0 \n", + "... ... ... ... ... ... ... ... \n", + "5090 0 0 0 0 0 0 1 \n", + "5091 0 0 0 0 0 0 1 \n", + "5092 0 0 0 0 0 0 1 \n", + "5093 1 0 0 0 0 0 1 \n", + "5094 0 0 0 0 0 0 1 \n", + "\n", + " 冷凝器型式_其他 冷凝器型式_水冷 冷凝器型式_空冷 \n", + "0 0 1 0 \n", + "1 0 1 0 \n", + "2 0 1 0 \n", + "3 0 1 0 \n", + "4 0 1 0 \n", + "... ... ... ... \n", + "5090 0 1 0 \n", + "5091 0 1 0 \n", + "5092 0 1 0 \n", + "5093 1 0 0 \n", + "5094 0 1 0 \n", + "\n", + "[5619 rows x 63 columns]" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "use_data = pd.get_dummies(merge_data, columns=object_cols)\n", + "use_data" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "use_data.to_csv('./去煤种化后的训练数据.csv', encoding='utf-8-sig', index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "train_set = use_data[~use_data.power_co2_factor.isna()].copy()\n", + "test_set = use_data[use_data.power_co2_factor.isna()].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "feature_cols = [x for x in train_set.columns if 'factor' not in x]" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "train_data = train_set.copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": {}, + "outputs": [], + "source": [ + "train, valid = train_test_split(train_data.dropna(), test_size=0.1, shuffle=True, random_state=42)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dtest = xgb.DMatrix(test_set[feature_cols])" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "params_xgb = {'objective': 'reg:squarederror',\n", + " 'booster': 'gbtree',\n", + " 'eta': 0.005,\n", + " 'max_depth': 15,\n", + " 'subsample': 0.9,\n", + " 'colsample_bytree': 0.9,\n", + " 'min_child_weight': 1,\n", + " 'seed': 42}\n", + "\n", + "num_boost_round = 1200\n", + "\n", + "dtrain = xgb.DMatrix(train[feature_cols], train['power_co2_factor'].values)\n", + "dvalid = xgb.DMatrix(valid[feature_cols], valid['power_co2_factor'].values)\n", + "watchlist = [(dtrain, 'train'), (dvalid, 'eval')]\n", + "\n", + "gb_model_power = xgb.train(params_xgb, dtrain, num_boost_round, evals=watchlist,\n", + " early_stopping_rounds=100, verbose_eval=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 129, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_test_data['power_co2_factor'] = gb_model_power.predict(dtest)" + ] + }, + { + "cell_type": "code", + "execution_count": 130, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
所处地区机组类型参数分类冷凝器型式铭牌容量 (MW)longitudelatitudealtitudepredictionpower_co2_factor
0安徽省凝气式亚临界水冷5.7714413.4515834.7720942.3978950.5632670.513529
1安徽省凝气式亚临界水冷5.7714413.4515834.7720942.3978950.5632670.513529
2安徽省凝气式超超临界水冷6.9087553.4515834.7720942.3978950.5588720.478943
3安徽省凝气式超超临界水冷6.9087553.4515834.7720942.3978950.5588720.478943
4安徽省抽凝式高压水冷3.7135723.4515834.7720942.3978950.5635010.510681
.................................
5090重庆市抽凝式高压水冷3.9120233.4274894.6823535.6454470.5624920.512501
5091重庆市抽凝式高压水冷3.2580973.4276664.6823065.6276210.5624920.512513
5092重庆市抽背式高压水冷3.2580973.4276664.6823065.6276210.5625970.514091
5093重庆市背压式高压其他3.4339873.4287154.6822085.6903590.5605150.509951
5094重庆市抽凝式高压水冷4.8362823.4287154.6822085.6903590.5619200.511886
\n", + "

5095 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " 所处地区 机组类型 参数分类 冷凝器型式 铭牌容量 (MW) longitude latitude altitude \\\n", + "0 安徽省 凝气式 亚临界 水冷 5.771441 3.451583 4.772094 2.397895 \n", + "1 安徽省 凝气式 亚临界 水冷 5.771441 3.451583 4.772094 2.397895 \n", + "2 安徽省 凝气式 超超临界 水冷 6.908755 3.451583 4.772094 2.397895 \n", + "3 安徽省 凝气式 超超临界 水冷 6.908755 3.451583 4.772094 2.397895 \n", + "4 安徽省 抽凝式 高压 水冷 3.713572 3.451583 4.772094 2.397895 \n", + "... ... ... ... ... ... ... ... ... \n", + "5090 重庆市 抽凝式 高压 水冷 3.912023 3.427489 4.682353 5.645447 \n", + "5091 重庆市 抽凝式 高压 水冷 3.258097 3.427666 4.682306 5.627621 \n", + "5092 重庆市 抽背式 高压 水冷 3.258097 3.427666 4.682306 5.627621 \n", + "5093 重庆市 背压式 高压 其他 3.433987 3.428715 4.682208 5.690359 \n", + "5094 重庆市 抽凝式 高压 水冷 4.836282 3.428715 4.682208 5.690359 \n", + "\n", + " prediction power_co2_factor \n", + "0 0.563267 0.513529 \n", + "1 0.563267 0.513529 \n", + "2 0.558872 0.478943 \n", + "3 0.558872 0.478943 \n", + "4 0.563501 0.510681 \n", + "... ... ... \n", + "5090 0.562492 0.512501 \n", + "5091 0.562492 0.512513 \n", + "5092 0.562597 0.514091 \n", + "5093 0.560515 0.509951 \n", + "5094 0.561920 0.511886 \n", + "\n", + "[5095 rows x 10 columns]" + ] + }, + "execution_count": 130, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_test_data" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "metadata": {}, + "outputs": [], + "source": [ + "params_xgb = {'objective': 'reg:squarederror',\n", + " 'booster': 'gbtree',\n", + " 'eta': 0.01,\n", + " 'max_depth': 30,\n", + " 'subsample': 0.8,\n", + " 'colsample_bytree': 0.9,\n", + " 'min_child_weight': 10,\n", + " 'seed': 108}\n", + "\n", + "num_boost_round = 1200\n", + "\n", + "dtrain = xgb.DMatrix(train[feature_cols], train['heat_co2_factor'].values)\n", + "dvalid = xgb.DMatrix(valid[feature_cols], valid['heat_co2_factor'].values)\n", + "watchlist = [(dtrain, 'train'), (dvalid, 'eval')]\n", + "\n", + "gb_model_heat = xgb.train(params_xgb, dtrain, num_boost_round, evals=watchlist,\n", + " early_stopping_rounds=100, verbose_eval=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "metadata": {}, + "outputs": [], + "source": [ + "new_test_data['heat_co2_factor'] = gb_model_heat.predict(dtest)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "import datetime as dt\n", + "\n", + "plt.rcParams['font.sans-serif'] = ['SimHei']\n", + "plt.rcParams['axes.unicode_minus'] = False" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "plot_data = new_test_data[['地区', 'prediction']].copy()\n", + "plot_data['地区'] = plot_data['地区'].apply(lambda x: jieba.lcut(x.strip(), cut_all=True)[0] if not pd.isna(x) else pd.NA)\n", + "plot_data.columns = ['省份', 'CO2排放强度(kg/MJ)']\n", + "total_plot_data = pd.concat([plot_data, add_data])" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "total_plot_data['CO2排放强度(kg/MJ)'] = total_plot_data['CO2排放强度(kg/MJ)'].astype(float)\n", + "total_plot_data['省份'] = total_plot_data['省份'].apply(lambda x: x if x != '内蒙' else '内蒙古')" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
省份CO2排放强度(kg/MJ)
0安徽0.224686
1安徽0.198733
2安徽0.198733
3安徽0.224686
4安徽0.224686
.........
848新疆0.196452
849辽宁0.185688
850内蒙古0.181214
851山东0.347570
852浙江0.251777
\n", + "

3156 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " 省份 CO2排放强度(kg/MJ)\n", + "0 安徽 0.224686\n", + "1 安徽 0.198733\n", + "2 安徽 0.198733\n", + "3 安徽 0.224686\n", + "4 安徽 0.224686\n", + ".. ... ...\n", + "848 新疆 0.196452\n", + "849 辽宁 0.185688\n", + "850 内蒙古 0.181214\n", + "851 山东 0.347570\n", + "852 浙江 0.251777\n", + "\n", + "[3156 rows x 2 columns]" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_plot_data" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "image/png": "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y6bGjRurf//+DuGAUTUhye1UZcaUV5kZN26cw7Jy5co53Xb8+PEu+9Kkpqbqiy++kOT4jP/666+Kj49XwYIFzWU2m03ffPONJk2aJG9vb9WrV0+7d+9W586dNX36dIfKEmeMigxPwpeUlBSdOHFCZ8+eNSvJvv/+e23fvl1NmjQxt/v555919epVVa5c2WWYWbNmTY0dO1bDhg3T22+/rfj4eBUrVkxff/21R89hep4E8Dt37tQ333yjwMBA9ejRQ8uWLdPixYt14MABzZo1y2n/m88//1xxcXF67bXX7NZHRUWZIcugQYOUL18+zZo1S+3bt9fkyZNVrVo1VapUKcvnCAAA8FcgTAEAAHgEjNDCkwbxxoCbpwNCRniRPXt2j5s0GwOp7oIPZ15++WV17txZ33zzjcqVK6c33njDYZvExMRMz1X6n3vSoEEDc7qWoKAghYSEeDR/v4+Pj0JCQjRhwgQdPXpUW7Zs8ej+eso414dpQO9qgDg1NdWcbihjECD9z70xmsJnxlUo5uzn+9JLL3m0T098/PHH+uWXXzRz5kynDa6d2b17t86fP6/ixYubTciNKoNdu3apZMmSCgkJ0R9//KHPPvtMK1euVNu2bfXGG2/oiy++0NKlSxUSEqKhQ4cqMjJSkydPVv369c0m6adPnzYH3Pv162dX7bBy5UpzKryXX35ZM2fONKsVjJ4aUtqz9cUXX2jcuHFavHixpk2bprVr12r16tXKmTOnqlSporCwMOXKlcthirGLFy9q8+bNWrlypa5du6bAwED16dNHzz//vCZMmKBvvvlGy5YtM9/if/nll10GWyVLlnQbLAYFBUmS9uzZo549e7oNXdatW6dNmzbp6NGj2rVrl8N++vfv71AR4EpAQID69u2rvn37ZrqtUSH0Z3nyO8rV70p3v0O//PJLnT17VuXLlze/3/PmzdOlS5e0f/9+STKbnZ84cUITJkzQoUOHlDdvXs2YMUNVq1ZVv379tGvXLr3++uvq3r27unTp4jIoiYuL04oVKyRJTzzxhFJSUvT777/r5s2bunHjhq5cuaILFy6YgdPx48f15ptvysvLS88884yCg4O1a9cujR07VnXr1jWnQjOC3ldffdXltZ46dUo///yzAgICFBcXJyktXN24caNq166t0qVLu+0/Y7VaZbFY5O/vrzNnzkiSy+3Xr1+vjz/+WFarVZ999pmKFi2qnj17Klu2bBo3bpzefPNNTZo0ya5/y7p167R582ZJUrdu3czlSUlJGjhwoOLj49WhQwfz51GuXDm9++67mjhxooYMGaJ169YpKChIMTExevDggfbt22deIwAAwN+JMAUAAOARMAYE3b2Z7eoznm63du1arV279k+dV1YMGTJEp0+f1kcffaR8+fKpQYMGduubN2+uMmXKmAPl6aV/g95isSggIEDPPPOMRo8eraeeekpVqlTxqJeEoW3btlq+fLnat2/v0PT6YRnn+jAN6F1N0zR37lydPXtW5cqVczrVlvFzKVCggDlg7szt27cVHx/vsjLBOP7D9pSx2WxKTU1VQkKCPvvsM/n7+2vq1Klas2aN+vTpY07tkxmLxaLJkydLsg+KbDabPvnkE9lsNg0dOlS+vr7Kly+fatasqT179ujcuXMqVaqUGjVqpPDwcB06dEjVq1fXhx9+qPfee0+ff/655syZI0latmyZ4uPjVaVKFfXo0cPu+F26dNHOnTvVvXt39evXz256o4SEBNlsNqWkpJjNzUeMGKE6depozJgxmjhxot1AudGsPTk5Wd9++63OnDmjI0eO6PLly5LSqg969uypzp07mxUO9erVM8OUzZs3mwPITz75pEqWLKmxY8d6NNWVoXLlyvLy8tKpU6cUHBysQoUKOVS02Ww2uwb1Xbt2/VM9nP5OR44c0fLly5WSkqLo6Gi3QV1KSorLMNHV92/37t2aNWuWfHx89Mknn5jLvby8tGrVKklS8eLFVadOHYWEhOjIkSOSpKpVq2ry5Ml66qmnJEkzZ87Uxx9/rFWrVmnGjBmaN2+eJk+ebPd96Natm37++WczxPDz81PTpk0lSe+9957Onj1rd24FCxZU06ZNValSJVWoUEHly5c3Q7LevXtr165dWrBggfr27atLly4pIiJCfn5+atGihWJiYnT9+nXdvn1b58+f1y+//KKDBw/q1q1bktKel1atWuncuXMKDw/X5MmTNXnyZPn7+6tYsWJ6+umnVbBgQWXLlk2dOnUypzmz2Wxq2rSpOV2blNZTKb3z58/riy++0NatWxUQEKBJkyaZvbW8vLzUsWNHlSlTRr1791bv3r01dOhQc3rDpk2b6uTJk2a4JaX9rhg4cKBOnjyp4sWLO/Ta6dq1qzZs2KBs2bLp/v37CgoK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nkGDBmX16tU5+eSTkyQ77LBD+0bzf/7zn3P++efn3HPPzec+97kMGzasdxIDAADAerL0EgAA3dHlyZS5c+dm0KBBmTt3bvu1bbfdNn/84x/zxje+MUmy55575oMf/GDe9a53paGhoefTAgAAAAAAbGBdLlNGjhyZY489NiNHjsxTTz2VJ554ImvXrs3zzz+ftWvX5qmnnsrQoUPzhje8Iffff39vZgYAAAAAANhg1mkD+qOOOirlcjlPPPFEjjrqqCxatCiTJ09OkqxevTq77757DjzwwB4NCgAA9H+WXgIAAIponcqUa6+9Nkmy//77Z968ee3/myQLFy7MZz7zmZ5LCAAAbDRsCg4AABRRl5f5evzxx3PooYdm0aJF7ddWrFiR3/72t1m+fHluvfXWrF69OltttVUWLFiQZcuW9UpgAACg/zKZAgAAFFGXJ1POP//8DBo0KKtXr26/tt122+WSSy7J+PHjc8EFF2S77bbLlltumVGjRuX+++/Pu971rl4JDQAAAAAAsKF0uUy5/fbb09DQkHK5nLvuuivHHntszjvvvNx///0ZPHhwhg8fnk022SRJ8pOf/CRbbbVVr4UGAAAAAADYULpcplx66aU59NBD8+yzz+anP/1pjj322CTJN7/5zTzzzDNZtmxZXnjhhaxYsSK77rprvve976W+vr7XggMAAAAAAGwIXS5TNt988xx33HF58MEH89Of/rT9+oQJEzJz5sz289WrV+dDH/pQfvvb32bPPffs2bQAAAAAAAAbWJfKlObm5rS0tCRJSqVSVqxYkT333DODBw/O2LFjO9x30KBB2WGHHbJy5cqeTwsAAAAAAPR7pVKp1hE66FKZUiqV8vGPfzxJ8oY3vCFXX3111qxZk6ampgwY8PIvce655xbuXxQAAAAAAGBddKlMGThwYA477LD24/Hjx1e9vyIFAAAAAADoL+q6+4Dm5ua8//3vf9XblyxZkve97315+umn1ysYAAAAAABAEXR5A/o2AwcOzBNPPJGvfvWred3rXpftt98+O++8c4YOHZokmTlzZrbccstsscUWPR4WAAAAAADo/8rlcq0jdNDtMqVUKmXgwIF53etel8cffzzXX399Hnrooey2225505velOuvvz6zZ8/ujawAAAAAfYql0AGgf+hymXLDDTdk6623zoQJEzJo0KAcffTR7bddc801mTZtWm666aZMnz49Y8aM6ZWwAAAAAABA/1e0DyR0q0y57rrr8uY3vzmtra258847M2fOnNx66635p3/6p3zpS1/K5ptvnqlTp+btb397xo4d25u5AQAAYJ0V7ZdzAAA6KtoyX13egP7rX/96brvtthx44IEZN25cjjzyyKxatSpz5szJ//zP/+QjH/lIdt999xx11FGZNm1ab2YGAAD6KW9wAwAARdTlMiVJhg4dmg984AP513/918yYMSPbbLNNyuVympqa0tramiQ5/PDDUy6Xs2TJkl4JDAAAAAAAsCF1ewP61tbWXHbZZbn55pvz3ve+N9ddd11WrVqVlStXprm5OVtuuWU++9nPZtSoUb2RFwAA6MeKNsoPAACQdLNMaWlpSUtLS+rr69uvzZs3r/24tbU13//+93PhhRdmzz337LmUAAAAAH2QkhgA+ocuL/N12WWXZd99982cOXOyevXq/Pa3v82qVauycOHCLF++PElSX1+fvffeOx/96Ed7LTAAAAAAAMCG1OXJlOeeey5f/vKXs8suu+Q73/lOZs6cma233jonn3xynn766QwZMiTvec97cvjhh+cZfrMvAAAgAElEQVQDH/hAb2YGAAAAAADYYLpcpkyZMiVJ0tTUlE033TQXX3xxh9sXLVqUefPm5fDDD8/++++fadOmpa6uW/vbAwAAAAAAFE63245SqfSKy3iNGTMmn/zkJ/Ozn/0sw4YNU6QAAAAAAAD9wjqVKUceeeTLrq9duzbz58/P6NGjc8IJJ/RIOAAAAAAAgFrrdply2WWX5cILL0ySTJ48Oc3NzUmSNWvWZPLkyT2bDgAAAAAAeskvfvGLnHnmmXnuuedqHYWC63aZ0tjYmAEDXtxq5c9//nMaGhqSJA0NDamvr+/ZdAAAAAAA0EsuvPDC3H333fnlL39Z6ygUXJc3oD/66KPT1NSUZ599Ni0tLbn55pvT1NSUQw89tP0+befNzc258soreyUwAADQf5VKpVpHAABgI9TU1FTrCBRcl8uUY489NuVy2S83AAAAAAD0K+VyudYRKLgulynPPvts6urqlCkAAAAAAPQr3vfmtXS5TLn22mvT3Nycv/3tb2lpacm4ceNy6623Zrfddmu/T9t5S0tL3vve9/ZKYAAAAAAAgA2py2XKt7/97STJpZdemueeey6f/OQn8853vjPf+c532jekf+c735nzzjuvd5ICAAAAAEAvWLt2ba0jUHB13X3A4MGDs+mmmyZJ3ve+92XVqlVJkjVr1qS1tbVn0wEAAAAAQC+o3CfFMl+8lm6XKfvtt19++ctfJkkmTpyYiy66KMmLP2znnHNOj4YDAAAAAIDeYDiA7ujyMl+zZs1KY2NjSqVS/vKXv+Syyy7L4sWL86Mf/Sibb755e3N32WWXZdttt82kSZN6LTQAAAAAAKyPNWvW1DoCfUiXy5R77rknQ4YMSalUSnNzc+6+++4kyRZbbJFLLrkkEydObL/v97///dx88809HhYAAACgL7FsDEBxVZYplUt+wSvpcpnyzW9+M0nS0tKSO+64I9OnT0+S/PznP8/06dMzbdq0DBs2LEly/PHHZ9WqVRk8eHAvRAYAAAAAgPVjmS+6o8tlSpu6urqccsop7ee77757Fi1a1OEH7xvf+Ebq6rq9HQsAAAAAAGwQLS0t7ceW/Cqeok13drtMqa+vzz777NN+PnTo0BxzzDEd7qNIAQAAAACgyCrLlMpjeCXdaj2eeeaZfPazn82//du/ZcqUKbnllls63L5ixYrssMMOPRoQAAAAAAB6WuU0iskUXku3ypTPf/7zeeqpp3LMMcdku+22y8knn5wpU6ZkyZIl7fexUQ8AAAAAAEVnMoXu6FaZcvvtt+fss8/OAQcckJNOOinXX399Bg8enH//93/PH//4xyTFW8cMAAAAAAA6M5lCd3SrTNl0002zcOHC9vORI0fmG9/4Rk444YRMmTIls2fP7vGAAAAAAADQ00ymFFvlKlhr166tYZIXdatM+fSnP52TTz45v/zlLztcP+iggzJr1qxcfPHFPRoOAAAAAAB6g8mUvqO1tbXWETKgO3c+5JBDsu222+bRRx992W1vectb8tOf/jTXXHNNT2UDAAAAAIBeYTKl72htbc3AgQNrmqFbZUqSTJo0KVtttVV+85vf5IUXXkiSjBgxItttt11Gjx6dI444osdDAgAAAABATzKZ0ncU4fnpVpny5JNP5uSTT85dd92VxsbGDBs2LOVyOcuWLcvKlSvzjne8I2eeeWZGjx7dW3kBAAAAAGC9mUwptso9U/rcMl9Tp07N5ptvnptuuimvf/3rO9z2+OOP54wzzsjnP//5XHTRRT2ZEQAAAAAAepTJlGKrLFD6XJly11135dprr31ZkZIkY8eOzbRp07Lffvv1WDgAAAAAAOgNypRiq3xOijA5VNedO2+99daZO3fuq95+xRVXZOutt17vUAAAAAAA0JuUKcVVLpcL9/x0azLli1/8Yj71qU/lqquuyoQJEzJs2LAkydKlS/PAAw9k1apVOe+883olKAAAAAAA9JSivVnPS1pbWzvsmVKE56dbZcqkSZNy9dVX59Zbb81VV12VzTbbLEly33335ZRTTsm//Mu/ZOjQob0SFAAAAKCvqXwjCIBiKdqeHLykc3lShDKlW8t83XfffTnggAPyrW99K3vssUdOO+20nHbaaRkzZky+9rWvZd99983999/fW1kBAAAAAKBHdC5TFODFUcQypVuTKaeeemo++clP5vDDD+9w/dJLL02SfO9738upp56aOXPm9FxCAAAAAADoYZ2nUcrlckqlUo3SUKmIZUq3JlMWLlyY97znPa96+/77758FCxasdygAAAAAAOhNa9eurXpO7bS0tFQ9r4VulSm77757vvrVr+bZZ5992W3Lly/PN77xjbzjHe/osXAAAAAAANAbOi/rpUwpjiKWKd1a5uv000/PKaeckt133z1jx47NZpttlvr6+ixdujSPPvpoxo8fn/POO6+3sgIAAACv4IYbbsi9996bI488Mptttlmt4wBAn9C5TLFnSnF0Lk+am5trlOQl3SpThg0blu9+97tZtGhR7rzzzixevDhr1qzJ8OHDs8MOO2TnnXfurZwAAADAq7jooouSJOPGjctHP/rR2oYBgD5CmVJcncuTPjeZ0mbMmDEZM2ZMT2cBAAAA1sPy5ctrHQEAYL0VcZmvbu2ZAgAAABSXT9QCAP1BEZf5UqYAAADwmtasWZMzzzwzF154Ya2j0InNcgGA/qaIy3wpUwAAesGqVasye/bsXHnllT4lDPQLDz/8cO6+++784he/yJo1a2odhwpFeHMBAPqiurq6qufUTucyZfXq1TVK8pJ12jMFAIDq7rzzzvz85z9PkkyaNCnjxo2rcSKA9dPa2tp+bBKiWIqw7AUA9EWlUqnqObXT+fVNEV7vqNoAAHrBihUrXvEYoD9QphRL5ZsLpoYAoOtMphRX50mUIkym+OkAAOgFlW9sFeFFH0BPUqYUS+XfOUX41CYA9BXKlOJSpgAAbCRWrVrVflyEF30APcn0Q7FU/j3j7xwA6Lr6+vr2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9C9TkORVmSn2CqYwM4WIiHKMmSlkKzzXiIiIiIiIiN4tpiBJUqoY6sxbpiCaZb6IiMjRvf/++wCAOnXq2LklRERERERERET0NnJxcYGTkxOAzKW+9HogPollvoiIyMH9/PPPiI+PR5EiRezdFHqLicViq38mIiIiIiIioneDl5cXHj58iNgEMYp7vtxbNS5JDKNRBJlMhkKFCtmlbZypICKiV5LJZAykUL4zD6CwzBcRERERERHRu+flvikSi8djE19mpdhrzoDBFCIiInIIEsnLjhIzU4iIiIiIiIjePR4eHgCAhGTLgImpxJfpeXvgTAURERE5BPNgitFotGNLiIiIiIiIiMge3N3dAQAJyZahC1NwxfS8PTCYQkRERA5BKn25lRvLfBERERERERG9e0yZJ/EZgyn/ZqYwmEJERETvPGamEBEREREREb3bhMyUJMvQhSm4wjJfRERE9M7jBvRERERERERE7zZhz5QUEQxm6yxNZb+YmUJERERkxmAw2LsJRERERERERGRjbm5uEIlEMBhESE59udCSe6YQERERWcHMFCIiIiIiIqJ3j1QqRaFChQC8zEbR6oBUVfqfCxcubLe2MZhCREREREREREREREQOwc3NDQCQ9G9mSlJKehhDJpPB2dnZbu1iMIWIiIiIiIiIiIiIiByCKZiSnJoevkhOSw+qFCxY0K6VLBhMISIiIofDMl9ERERERERE76aXwZR/M1P+/b/pcXthMIWIiIgcjtFotHcTiIiIiIiIiMgOChYsCOBlMMWUoWJ63F4YTCEiIiKHw8wUIiIiIiIionfTyz1T/i3zxcwUIiIiIuuKFCli7yYQERERERERkR1kzExJcpDMFKld/3YiIiIiM0OHDsWVK1fQrFkzezeFiIiIiIiIiOxA2DMlzTIzhcEUIiIion/VqlULtWrVsncziIiIiIiIiMhOXFxcAACpKpHF/11dXe3WJoBlvoiIiIiIiIiIiIiIyEFkCqaoRRaP2wuDKURERERERERERERE5BBMQROtTgStDkhTMZhCREREREREREREREQkUCqVEInSAyhpapGQoeLs7GzPZjGYQkREREREREREREREjkEsFguBk5Q0EVQs80VERERERERERERERGTJFDiJTRDDCGamEBERERERERERERERWTAFTqITJAAAhUIBqVRqzyYxmEJERERERERERERERI7DyckJABCfJLL42Z4YTCEiIiIiIiIiIiIiIodRoEABAEBCstjiZ3tiMIWIiIiIiIiIiIiIiByGUqkEACQymEJERERERERERERERJRZxswUU3DFnhhMISIiIiIiIiIiIiIihyEEU1K4ZwoREREREREREREREVEmpmCKwZAeTGFmChERERERERERERERkZmMwRMGU4iIiIiIiIiIiIiIiMxkDJ5wA3oiIiIiIiIiIiIiIiIzCoXC4me5XG6nlrzEYAoRERERERERERERETmMjMGTjMEVe2AwhYiIiIiIiIiIiIiIHAYzU4iIiIiIiIiIiIiIiLLBzBQiIiIiIiIiIiIiIqJsZAyeMJhCRERERERERERERERkhmW+iIiIiIiIiIiIiIiIsuHh4YFq1apBoVCgZMmSqFSpkr2bBKm9G0BERERERERERERERGQiFosxbtw4ezfDAjNTiIiIiIiIiIiIiIiIssFgChERERERERERERERUTYYTCEiIiIiIiIiIiIiIsoGgylERERERERERERERETZYDCFiIiIiIiIiIiIiIgoGwymEBERERERERERERERZYPBFCIiIiIiIiIiIiIiomwwmEJERERERERERERERJQNBlOIiIiIiIiIiIiIiIiywWAKERERERERERERERFRNhhMISIiIiIiIiIiIiIiygaDKURERERERERERERERNlgMIWIiIiIiIiIiIiIiCgbDKYQERERERERERERERFlg8EUIiIiIiIiIiIiIiKibDCYQkRERERERERERERElA0GU4iIiIiIiIiIiIiIiLLBYAoREREREREREREREVE2GEwhIiIiIiIiIiIiIiLKBoMpRERERERERERERERE2WAwhYiIiIiIiIiIiIiIKBsMphAREREREREREREREWWDwRQiIiIiIiIiIiIiIqJsMJhCRERERERERERERESUDQZTiIiIiIiIiIiIiIiIssFgChERERERERERERERUTYYTCEiIiIiIiIiIiIiIsoGgylERERERERERERERETZYDCFiIiIiIiIiIiIiIgoGwymEBERERERERERERERZYPBFCIiIiIiIiIiIiIiomxI7d0AWzIajQAAvV5v55YQEREREREREREREZG9meIFpvhBVt6pYIrBYAAAXL9+3c4tISIiIiIiIiIiIiIiR2GKH2RF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InIYDKYQEREREdFtYcOGDXj33XexceNGPP744+r+4uJizJgxA9OnT0fv3r2xatUqdebJ/v37ceDAAXh7ewMAcnNz4eHhgSFDhgAAunbtirFjx2LFihX2bxARERERETkMJ7le0mAiIiIiIqL/kKtXr0JE4OHhgdLSUuzatQvr169Hr169EBMTg+HDh8PFxUUtX1tbi6ioKOj1esyfPx+BgYGIiorC6tWrERQUZFNu1KhRSElJwciRIzuiaURERERE1MEYTCEiIiIiov+82tpaHDx4EEVFRSgoKMCJEycgInBzc8O9995rU3bMmDGYOnUqPv30Uxw9ehTV1dUIDQ3F5s2b4e7ujvPnz6vrrFj5+vqiqKgIu3fvhpeXlz2bRkREREREDoDBFCIiIiIi+s9TFAUzZ85Enz59kJeXh4ULFyIkJKRJuRUrVsBisSA5ORkAYDQakZiYiBEjRqChoQE6nQ7nzp3DtGnTsGfPHgBAUlISBg0ahNDQUPTo0cOu7SIiIiIiIsfgcuMiREREREREjs3V1RUffvghAGDv3r1488030blz5yblKioqEBMTo25bZ6C4uLggNjYWAFBTU4P77rtPLWMymdC5c2cGUoiIiIiI7mAMphARERER0W1n6dKl152ZciNHjhzBww8/rG4bDAZ06tTpltaPiIiIiIj+WxhMISIiIiKi24qI/OuZKdbyVg0NDcjNzcU777yj7qutrYW7u3v7VZiIiIiIiBwegylERERERHRbsVgsLc5MMZvNNvuMRiNMJhNqa2uRlJQEPz8/DBw4EBcuXMDly5fx+++/c9F5IiIiIqI7HIMpRERERER0WzGZTC3OTBk9erTNPmswZdu2bdBoNEhNTQUA/PDDD8jKykJsbCx69uxpl7oTEREREZFjcpLGc9qJiIiIiIj+4xoaGqDVaqHRaFr9WovFAmdn53aoFRERERER/ZcxmEJERERERERERERERNQC3nJFRERERERERERERETUAgZTiIiIiIiIiIiIiIiIWsBgChERERERERERERERUQsYTCEiIiIiIiIiIiIiImoBgylEREREREREREREREQtYDCFiIiIiIiIiIiIiIioBQymEBERERERERERERERtYDBFCIiIiIiIiIiIiIiohb8Hz2pPvCL7uNMAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(20, 10))\n", + "sns.violinplot(x='省份',\n", + " y='CO2排放强度(kg/MJ)',\n", + " data=total_plot_data,\n", + " scale='width',\n", + " palette='Set2',\n", + " inner='quartile')\n", + "\n", + "# Decoration\n", + "plt.title('各省(市、自治区)燃煤发电CO2排放强度预测', fontsize=18)\n", + "plt.savefig('./figure/各省预测值.png')" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "from pyecharts.charts import *\n", + "from pyecharts import options as opts\n", + "from pyecharts.commons.utils import JsCode\n", + "from pyecharts.globals import ThemeType, ChartType" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "data = pd.read_excel('././././data/机组预测结果.xlsx', sheet_name=2)" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.28918716" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data['prediction'].max()" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "地区\n", + "海南省 0.232931\n", + "贵州省 0.234717\n", + "广东省 0.236436\n", + "上海市 0.237024\n", + "甘肃省 0.238403\n", + "湖北省 0.241863\n", + "福建省 0.242241\n", + "湖南省 0.243759\n", + "宁夏回族自治区 0.245063\n", + "云南省 0.245078\n", + "山西省 0.245322\n", + "新疆维吾尔自治区 0.246324\n", + "安徽省 0.246587\n", + "河南省 0.246775\n", + "陕西省 0.248594\n", + "天津市 0.248690\n", + "内蒙古自治区 0.250336\n", + "江西省 0.250423\n", + "广西壮族自治区 0.251057\n", + "河北省 0.251093\n", + "重庆市 0.254725\n", + "辽宁省 0.258904\n", + "四川省 0.259836\n", + "江苏省 0.261171\n", + "吉林省 0.263193\n", + "青海省 0.265025\n", + "山东省 0.265427\n", + "浙江省 0.269908\n", + "黑龙江省 0.272978\n", + "Name: prediction, dtype: float64" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.groupby('地区')['prediction'].mean().sort_values()" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "map_dict = data.groupby('地区')['机组容量'].mean().to_dict()" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'上海市': 379.20512820512783,\n", + " '云南省': 278.30434782608654,\n", + " '内蒙古自治区': 230.6120649651969,\n", + " '吉林省': 135.31451612903209,\n", + " '四川省': 185.37333333333314,\n", + " '天津市': 253.24468085106344,\n", + " '宁夏回族自治区': 279.0265486725658,\n", + " '安徽省': 316.693939393939,\n", + " '山东省': 125.49526066350698,\n", + " '山西省': 263.3278985507243,\n", + " '广东省': 387.3771428571424,\n", + " '广西壮族自治区': 246.94999999999965,\n", + " '新疆维吾尔自治区': 240.52545454545407,\n", + " '江苏省': 198.3687817258881,\n", + " '江西省': 270.88586956521675,\n", + " '河北省': 225.52138248847896,\n", + " '河南省': 286.94827586206867,\n", + " '浙江省': 143.89827272727254,\n", + " '海南省': 256.1538461538457,\n", + " '湖北省': 315.7307692307689,\n", + " '湖南省': 292.77333333333297,\n", + " '甘肃省': 287.76923076923043,\n", + " '福建省': 335.7640449438199,\n", + " '贵州省': 359.5219780219774,\n", + " '辽宁省': 176.5326203208554,\n", + " '重庆市': 215.15079365079336,\n", + " '陕西省': 260.96775862068927,\n", + " '青海省': 122.01612903225785,\n", + " '黑龙江省': 84.8353658536584}" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "map_dict" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "from pyecharts.faker import Faker" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "map_co2 = map_dict = data.groupby('地区')['prediction'].mean().to_dict()" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "# 需要引用的库\n", + "from pyecharts import options as opts\n", + "from pyecharts.charts import Map\n", + "\n", + "# 设置不同的系列,和系列中区域对应的数量值\n", + "pair_data1 = [[x, float(y)] for x, y in zip(map_co2.keys(), map_co2.values())]\n", + "\n", + "def create_map():\n", + " '''\n", + " 作用:生成地图\n", + " '''\n", + " ( # 大小设置\n", + " Map()\n", + " .add(\n", + " series_name=\"各地区机组平均碳排放强度\",\n", + " data_pair=[[x[0], x[1]*1000] for x in pair_data1],\n", + " maptype=\"china\"\n", + " )\n", + "\n", + " # 全局配置项\n", + " .set_global_opts(\n", + " # 设置标题\n", + " title_opts=opts.TitleOpts(title=\"各地区机组平均碳排放强度(单位:g/MJ)\", subtitle='港、澳、台、西藏数据暂缺'),\n", + " # 设置标准显示\n", + " visualmap_opts=opts.VisualMapOpts(max_=220, min_=280, is_piecewise=False)\n", + " )\n", + " # 系列配置项\n", + " .set_series_opts(\n", + " # 标签名称显示,默认为True\n", + " label_opts=opts.LabelOpts(is_show=True, color=\"blue\")\n", + " )\n", + " # 生成本地html文件\n", + " .render(\"co2.html\")\n", + " )\n", + "\n", + "\n", + "create_map()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.13" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/.ipynb_checkpoints/特征分组建模_lightgbm-checkpoint.ipynb b/.ipynb_checkpoints/特征分组建模_lightgbm-checkpoint.ipynb new file mode 100644 index 0000000..0d03e1b --- /dev/null +++ b/.ipynb_checkpoints/特征分组建模_lightgbm-checkpoint.ipynb @@ -0,0 +1,3156 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import warnings\n", + "\n", + "warnings.filterwarnings(\"ignore\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import lightgbm as lgb\n", + "import numpy as np\n", + "import xgboost as xgb\n", + "import seaborn as sns\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.model_selection import KFold\n", + "from sklearn.metrics import mean_absolute_error, mean_squared_error, mean_absolute_percentage_error, r2_score" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": " 铭牌容量 (MW) 入炉煤低位热值(kJ/kg) 燃煤挥发份Var(%) 燃煤灰份Aar(%) longitude latitude \\\n0 5.70711 9.818311 3.297687 2.815409 4.807875 3.467769 \n1 5.70711 9.821572 3.297687 2.815409 4.807875 3.467769 \n2 5.70711 9.878580 3.310543 2.769459 4.807875 3.467769 \n3 5.70711 9.883285 3.324316 2.532108 4.807875 3.467769 \n4 5.70711 9.909768 3.255015 2.766319 4.807875 3.467769 \n\n altitude 发电碳排放因子(kg/kWh) 供热碳排放因子(kg/MJ) 所处地区_上海市 ... 机组类型_供热式 \\\n0 1.386294 0.537574 0.070992 1.0 ... 1.0 \n1 1.386294 0.545516 0.072476 1.0 ... 1.0 \n2 1.386294 0.595849 0.064745 1.0 ... 1.0 \n3 1.386294 0.584432 0.068390 1.0 ... 1.0 \n4 1.386294 0.605369 0.066996 1.0 ... 1.0 \n\n 机组类型_纯凝式 参数分类_亚临界 参数分类_超临界 参数分类_超超临界 参数分类_超高压 参数分类_高压 冷凝器型式_水冷 \\\n0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 \n1 0.0 1.0 0.0 0.0 0.0 0.0 1.0 \n2 0.0 1.0 0.0 0.0 0.0 0.0 1.0 \n3 0.0 1.0 0.0 0.0 0.0 0.0 1.0 \n4 0.0 1.0 0.0 0.0 0.0 0.0 1.0 \n\n 冷凝器型式_直接空冷 冷凝器型式_间接空冷 \n0 0.0 0.0 \n1 0.0 0.0 \n2 0.0 0.0 \n3 0.0 0.0 \n4 0.0 0.0 \n\n[5 rows x 60 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
铭牌容量 (MW)入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)longitudelatitudealtitude发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)所处地区_上海市...机组类型_供热式机组类型_纯凝式参数分类_亚临界参数分类_超临界参数分类_超超临界参数分类_超高压参数分类_高压冷凝器型式_水冷冷凝器型式_直接空冷冷凝器型式_间接空冷
05.707119.8183113.2976872.8154094.8078753.4677691.3862940.5375740.0709921.0...1.00.01.00.00.00.00.01.00.00.0
15.707119.8215723.2976872.8154094.8078753.4677691.3862940.5455160.0724761.0...1.00.01.00.00.00.00.01.00.00.0
25.707119.8785803.3105432.7694594.8078753.4677691.3862940.5958490.0647451.0...1.00.01.00.00.00.00.01.00.00.0
35.707119.8832853.3243162.5321084.8078753.4677691.3862940.5844320.0683901.0...1.00.01.00.00.00.00.01.00.00.0
45.707119.9097683.2550152.7663194.8078753.4677691.3862940.6053690.0669961.0...1.00.01.00.00.00.00.01.00.00.0
\n

5 rows × 60 columns

\n
" + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data = pd.read_csv('./train_data_processed.csv')\n", + "total_data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": "(3080, 60)" + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "outputs": [ + { + "data": { + "text/plain": "Index(['铭牌容量 (MW)', '入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)', 'longitude',\n 'latitude', 'altitude', '发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)', '所处地区_上海市',\n '所处地区_云南省', '所处地区_内蒙古', '所处地区_内蒙古自治区', '所处地区_北京市', '所处地区_吉林省',\n '所处地区_四川省', '所处地区_天津市', '所处地区_宁夏', '所处地区_宁夏回族自治区', '所处地区_安徽省',\n '所处地区_山东省', '所处地区_山西', '所处地区_山西省', '所处地区_广东省', '所处地区_广西', '所处地区_广西省',\n '所处地区_新疆', '所处地区_新疆维吾尔自治区', '所处地区_江苏省', '所处地区_江西省', '所处地区_河北',\n '所处地区_河北省', '所处地区_河南', '所处地区_河南省', '所处地区_浙江省', '所处地区_海南省', '所处地区_湖北',\n '所处地区_湖北省', '所处地区_湖南', '所处地区_湖南省', '所处地区_甘肃省', '所处地区_福建省', '所处地区_贵州省',\n '所处地区_辽宁省', '所处地区_重庆市', '所处地区_陕西省', '所处地区_青海省', '所处地区_黑龙江', '所处地区_黑龙江省',\n '机组类型_供热', '机组类型_供热式', '机组类型_纯凝式', '参数分类_亚临界', '参数分类_超临界', '参数分类_超超临界',\n '参数分类_超高压', '参数分类_高压', '冷凝器型式_水冷', '冷凝器型式_直接空冷', '冷凝器型式_间接空冷'],\n dtype='object')" + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data.columns" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 6, + "outputs": [], + "source": [ + "feature_cols = [x for x in total_data.columns if '因子' not in x]\n", + "target_cols = [x for x in total_data.columns if x not in feature_cols]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 7, + "outputs": [ + { + "data": { + "text/plain": " 铭牌容量 (MW) 入炉煤低位热值(kJ/kg) 燃煤挥发份Var(%) 燃煤灰份Aar(%) longitude latitude \\\n0 4.615121 9.527411 3.823629 3.007661 4.834910 3.862442 \n1 4.836282 9.920745 3.625673 3.201526 4.700990 3.563714 \n2 4.836282 9.923023 3.623807 3.231200 4.700990 3.563714 \n3 4.836282 9.932727 3.272227 3.236716 4.700990 3.563714 \n4 4.836282 9.936819 3.278653 3.173460 4.700990 3.563714 \n... ... ... ... ... ... ... \n3075 6.966967 9.754581 3.100543 3.378270 4.676091 3.667429 \n3076 6.966967 9.755162 3.082827 3.361070 4.676091 3.667429 \n3077 6.966967 9.762903 3.095125 3.288775 4.676091 3.667429 \n3078 6.966967 9.776506 3.096934 3.328268 4.676091 3.667429 \n3079 6.966967 9.792277 3.073156 3.384051 4.676091 3.667429 \n\n altitude 所处地区_上海市 所处地区_云南省 所处地区_内蒙古 ... 参数分类_亚临界 参数分类_超临界 \\\n0 4.983607 0.0 0.0 0.0 ... 0.0 0.0 \n1 5.981414 0.0 0.0 0.0 ... 0.0 0.0 \n2 5.981414 0.0 0.0 0.0 ... 0.0 0.0 \n3 5.981414 0.0 0.0 0.0 ... 0.0 0.0 \n4 5.981414 0.0 0.0 0.0 ... 0.0 0.0 \n... ... ... ... ... ... ... ... \n3075 7.020191 0.0 0.0 0.0 ... 0.0 0.0 \n3076 7.020191 0.0 0.0 0.0 ... 0.0 0.0 \n3077 7.020191 0.0 0.0 0.0 ... 0.0 0.0 \n3078 7.020191 0.0 0.0 0.0 ... 0.0 0.0 \n3079 7.020191 0.0 0.0 0.0 ... 0.0 0.0 \n\n 参数分类_超超临界 参数分类_超高压 参数分类_高压 冷凝器型式_水冷 冷凝器型式_直接空冷 冷凝器型式_间接空冷 \\\n0 0.0 0.0 1.0 1.0 0.0 0.0 \n1 0.0 1.0 0.0 1.0 0.0 0.0 \n2 0.0 1.0 0.0 1.0 0.0 0.0 \n3 0.0 1.0 0.0 1.0 0.0 0.0 \n4 0.0 1.0 0.0 1.0 0.0 0.0 \n... ... ... ... ... ... ... \n3075 1.0 0.0 0.0 0.0 1.0 0.0 \n3076 1.0 0.0 0.0 0.0 1.0 0.0 \n3077 1.0 0.0 0.0 0.0 1.0 0.0 \n3078 1.0 0.0 0.0 0.0 1.0 0.0 \n3079 1.0 0.0 0.0 0.0 1.0 0.0 \n\n 发电碳排放因子(kg/kWh) 供热碳排放因子(kg/MJ) \n0 0.483547 0.058613 \n1 0.575553 0.085880 \n2 0.607741 0.084890 \n3 0.595382 0.082342 \n4 0.578838 0.082685 \n... ... ... \n3075 0.426880 0.061722 \n3076 0.456768 0.060739 \n3077 0.455534 0.061277 \n3078 0.450064 0.062032 \n3079 0.468720 0.063016 \n\n[3080 rows x 60 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
铭牌容量 (MW)入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)longitudelatitudealtitude所处地区_上海市所处地区_云南省所处地区_内蒙古...参数分类_亚临界参数分类_超临界参数分类_超超临界参数分类_超高压参数分类_高压冷凝器型式_水冷冷凝器型式_直接空冷冷凝器型式_间接空冷发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)
04.6151219.5274113.8236293.0076614.8349103.8624424.9836070.00.00.0...0.00.00.00.01.01.00.00.00.4835470.058613
14.8362829.9207453.6256733.2015264.7009903.5637145.9814140.00.00.0...0.00.00.01.00.01.00.00.00.5755530.085880
24.8362829.9230233.6238073.2312004.7009903.5637145.9814140.00.00.0...0.00.00.01.00.01.00.00.00.6077410.084890
34.8362829.9327273.2722273.2367164.7009903.5637145.9814140.00.00.0...0.00.00.01.00.01.00.00.00.5953820.082342
44.8362829.9368193.2786533.1734604.7009903.5637145.9814140.00.00.0...0.00.00.01.00.01.00.00.00.5788380.082685
..................................................................
30756.9669679.7545813.1005433.3782704.6760913.6674297.0201910.00.00.0...0.00.01.00.00.00.01.00.00.4268800.061722
30766.9669679.7551623.0828273.3610704.6760913.6674297.0201910.00.00.0...0.00.01.00.00.00.01.00.00.4567680.060739
30776.9669679.7629033.0951253.2887754.6760913.6674297.0201910.00.00.0...0.00.01.00.00.00.01.00.00.4555340.061277
30786.9669679.7765063.0969343.3282684.6760913.6674297.0201910.00.00.0...0.00.01.00.00.00.01.00.00.4500640.062032
30796.9669679.7922773.0731563.3840514.6760913.6674297.0201910.00.00.0...0.00.01.00.00.00.01.00.00.4687200.063016
\n

3080 rows × 60 columns

\n
" + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "use_data = total_data.groupby(feature_cols)[target_cols].mean().reset_index()\n", + "use_data" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 8, + "outputs": [], + "source": [ + "for col in use_data.columns:\n", + " use_data[col] = use_data[col].astype(float)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "train_data, test_data = train_test_split(use_data.dropna(), test_size=0.1, shuffle=True, random_state=666)\n", + "train_data, valid_data = train_test_split(train_data.dropna(), test_size=0.2, shuffle=True, random_state=666)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "X_train, Y_train = train_data[feature_cols], train_data[target_cols[0]]\n", + "X_valid, Y_valid = valid_data[feature_cols], valid_data[target_cols[0]]\n", + "X_test, Y_test = test_data[feature_cols], test_data[target_cols[0]]" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "lgb_train = lgb.Dataset(X_train, Y_train)\n", + "lgb_eval = lgb.Dataset(X_valid, Y_valid)\n", + "lgb_test = lgb.Dataset(X_test, Y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "params_gbm = {\n", + " 'task': 'train',\n", + " 'boosting_type': 'gbdt', # 设置提升类型\n", + " 'objective': 'l1', # 目标函数\n", + " 'metric': {'rmse'}, # 评估函数\n", + " 'max_depth': 12,\n", + " 'num_leaves': 20, # 叶子节点数\n", + " 'learning_rate': 0.05, # 学习速率\n", + " 'feature_fraction': 0.9, # 建树的特征选择比例\n", + " 'bagging_fraction': 0.9, # 建树的样本采样比例\n", + " 'bagging_freq': 10, # k 意味着每 k 次迭代执行bagging\n", + " 'verbose': -1 # <0 显示致命的, =0 显示错误 (警告), >0 显示信息\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1]\tvalid_0's rmse: 0.0692875\n", + "Training until validation scores don't improve for 100 rounds\n", + "[2]\tvalid_0's rmse: 0.06714\n", + "[3]\tvalid_0's rmse: 0.0646839\n", + "[4]\tvalid_0's rmse: 0.0623338\n", + "[5]\tvalid_0's rmse: 0.0600964\n", + "[6]\tvalid_0's rmse: 0.0580108\n", + "[7]\tvalid_0's rmse: 0.056067\n", + "[8]\tvalid_0's rmse: 0.0544344\n", + "[9]\tvalid_0's rmse: 0.0529408\n", + "[10]\tvalid_0's rmse: 0.051276\n", + "[11]\tvalid_0's rmse: 0.0497692\n", + "[12]\tvalid_0's rmse: 0.0483588\n", + "[13]\tvalid_0's rmse: 0.0470211\n", + "[14]\tvalid_0's rmse: 0.0460061\n", + "[15]\tvalid_0's rmse: 0.0448745\n", + "[16]\tvalid_0's rmse: 0.043796\n", + "[17]\tvalid_0's rmse: 0.0428645\n", + "[18]\tvalid_0's rmse: 0.0419008\n", + "[19]\tvalid_0's rmse: 0.0409544\n", + "[20]\tvalid_0's rmse: 0.0400698\n", + "[21]\tvalid_0's rmse: 0.0392848\n", + "[22]\tvalid_0's rmse: 0.038578\n", + "[23]\tvalid_0's rmse: 0.0378727\n", + "[24]\tvalid_0's rmse: 0.0371929\n", + "[25]\tvalid_0's rmse: 0.0366533\n", + "[26]\tvalid_0's rmse: 0.0360842\n", + "[27]\tvalid_0's rmse: 0.0355757\n", + "[28]\tvalid_0's rmse: 0.0350562\n", + "[29]\tvalid_0's rmse: 0.0345382\n", + "[30]\tvalid_0's rmse: 0.0340975\n", + "[31]\tvalid_0's rmse: 0.0337632\n", + "[32]\tvalid_0's rmse: 0.0334232\n", + "[33]\tvalid_0's rmse: 0.0330998\n", + "[34]\tvalid_0's rmse: 0.0328678\n", + "[35]\tvalid_0's rmse: 0.0325827\n", + "[36]\tvalid_0's rmse: 0.0323483\n", + "[37]\tvalid_0's rmse: 0.0321363\n", + "[38]\tvalid_0's rmse: 0.0318823\n", + "[39]\tvalid_0's rmse: 0.0316983\n", + "[40]\tvalid_0's rmse: 0.0315094\n", + "[41]\tvalid_0's rmse: 0.0313339\n", + "[42]\tvalid_0's rmse: 0.0311663\n", + "[43]\tvalid_0's rmse: 0.031002\n", + "[44]\tvalid_0's rmse: 0.0308446\n", + "[45]\tvalid_0's rmse: 0.0307193\n", + "[46]\tvalid_0's rmse: 0.03058\n", + "[47]\tvalid_0's rmse: 0.0304975\n", + "[48]\tvalid_0's rmse: 0.0303807\n", + "[49]\tvalid_0's rmse: 0.0302476\n", + "[50]\tvalid_0's rmse: 0.0301379\n", + "[51]\tvalid_0's rmse: 0.03\n", + "[52]\tvalid_0's rmse: 0.0299129\n", + "[53]\tvalid_0's rmse: 0.0298092\n", + "[54]\tvalid_0's rmse: 0.0297318\n", + "[55]\tvalid_0's rmse: 0.0296587\n", + "[56]\tvalid_0's rmse: 0.0295906\n", + "[57]\tvalid_0's rmse: 0.0295262\n", + "[58]\tvalid_0's rmse: 0.0294317\n", + "[59]\tvalid_0's rmse: 0.0293666\n", + "[60]\tvalid_0's rmse: 0.029295\n", + "[61]\tvalid_0's rmse: 0.0292621\n", + "[62]\tvalid_0's rmse: 0.0291822\n", + "[63]\tvalid_0's rmse: 0.0291453\n", + "[64]\tvalid_0's rmse: 0.029071\n", + "[65]\tvalid_0's rmse: 0.0289955\n", + "[66]\tvalid_0's rmse: 0.0289425\n", + "[67]\tvalid_0's rmse: 0.0288803\n", + "[68]\tvalid_0's rmse: 0.0288438\n", + "[69]\tvalid_0's rmse: 0.0288004\n", + "[70]\tvalid_0's rmse: 0.0287685\n", + "[71]\tvalid_0's rmse: 0.0287379\n", + "[72]\tvalid_0's rmse: 0.0286942\n", + "[73]\tvalid_0's rmse: 0.028654\n", + "[74]\tvalid_0's rmse: 0.0286255\n", + "[75]\tvalid_0's rmse: 0.0285826\n", + "[76]\tvalid_0's rmse: 0.0285438\n", + "[77]\tvalid_0's rmse: 0.0284903\n", + "[78]\tvalid_0's rmse: 0.0284767\n", + "[79]\tvalid_0's rmse: 0.0284401\n", + "[80]\tvalid_0's rmse: 0.0284152\n", + "[81]\tvalid_0's rmse: 0.0283845\n", + "[82]\tvalid_0's rmse: 0.028375\n", + "[83]\tvalid_0's rmse: 0.0283271\n", + "[84]\tvalid_0's rmse: 0.0283098\n", + "[85]\tvalid_0's rmse: 0.0282848\n", + "[86]\tvalid_0's rmse: 0.0282564\n", + "[87]\tvalid_0's rmse: 0.0282311\n", + "[88]\tvalid_0's rmse: 0.0281999\n", + "[89]\tvalid_0's rmse: 0.0281744\n", + "[90]\tvalid_0's rmse: 0.0281694\n", + "[91]\tvalid_0's rmse: 0.0281849\n", + "[92]\tvalid_0's rmse: 0.0281936\n", + "[93]\tvalid_0's rmse: 0.0281859\n", + "[94]\tvalid_0's rmse: 0.028193\n", + "[95]\tvalid_0's rmse: 0.0281768\n", + "[96]\tvalid_0's rmse: 0.0281729\n", + "[97]\tvalid_0's rmse: 0.0281829\n", + "[98]\tvalid_0's rmse: 0.0281698\n", + "[99]\tvalid_0's rmse: 0.0281678\n", + "[100]\tvalid_0's rmse: 0.0281451\n", + "[101]\tvalid_0's rmse: 0.0281243\n", + "[102]\tvalid_0's rmse: 0.028098\n", + "[103]\tvalid_0's rmse: 0.028089\n", + "[104]\tvalid_0's rmse: 0.0280947\n", + "[105]\tvalid_0's rmse: 0.0280915\n", + "[106]\tvalid_0's rmse: 0.0280942\n", + "[107]\tvalid_0's rmse: 0.0280905\n", + "[108]\tvalid_0's rmse: 0.0280888\n", + "[109]\tvalid_0's rmse: 0.0280827\n", + "[110]\tvalid_0's rmse: 0.028075\n", + "[111]\tvalid_0's rmse: 0.0280506\n", + "[112]\tvalid_0's rmse: 0.0280414\n", + "[113]\tvalid_0's rmse: 0.0280254\n", + "[114]\tvalid_0's rmse: 0.0280016\n", + "[115]\tvalid_0's rmse: 0.0279858\n", + "[116]\tvalid_0's rmse: 0.027973\n", + "[117]\tvalid_0's rmse: 0.027962\n", + "[118]\tvalid_0's rmse: 0.0279404\n", + "[119]\tvalid_0's rmse: 0.0279082\n", + "[120]\tvalid_0's rmse: 0.0279064\n", + "[121]\tvalid_0's rmse: 0.0279041\n", + "[122]\tvalid_0's rmse: 0.0278874\n", + "[123]\tvalid_0's rmse: 0.0278608\n", + "[124]\tvalid_0's rmse: 0.0278517\n", + "[125]\tvalid_0's rmse: 0.0278507\n", + "[126]\tvalid_0's rmse: 0.0278408\n", + "[127]\tvalid_0's rmse: 0.0278322\n", + "[128]\tvalid_0's rmse: 0.0278089\n", + "[129]\tvalid_0's rmse: 0.0278084\n", + "[130]\tvalid_0's rmse: 0.0277843\n", + "[131]\tvalid_0's rmse: 0.0277892\n", + "[132]\tvalid_0's rmse: 0.0277827\n", + "[133]\tvalid_0's rmse: 0.0277758\n", + "[134]\tvalid_0's rmse: 0.0277766\n", + "[135]\tvalid_0's rmse: 0.0277853\n", + "[136]\tvalid_0's rmse: 0.0277744\n", + "[137]\tvalid_0's rmse: 0.0277624\n", + "[138]\tvalid_0's rmse: 0.0277481\n", + "[139]\tvalid_0's rmse: 0.027733\n", + "[140]\tvalid_0's rmse: 0.0277201\n", + "[141]\tvalid_0's rmse: 0.0277112\n", + "[142]\tvalid_0's rmse: 0.0277081\n", + "[143]\tvalid_0's rmse: 0.0276965\n", + "[144]\tvalid_0's rmse: 0.0276911\n", + "[145]\tvalid_0's rmse: 0.0276786\n", + "[146]\tvalid_0's rmse: 0.0276798\n", + "[147]\tvalid_0's rmse: 0.0276724\n", + "[148]\tvalid_0's rmse: 0.0276479\n", + "[149]\tvalid_0's rmse: 0.0276436\n", + "[150]\tvalid_0's rmse: 0.0276115\n", + "[151]\tvalid_0's rmse: 0.0275966\n", + "[152]\tvalid_0's rmse: 0.0275874\n", + "[153]\tvalid_0's rmse: 0.0275693\n", + "[154]\tvalid_0's rmse: 0.0275769\n", + "[155]\tvalid_0's rmse: 0.0275677\n", + "[156]\tvalid_0's rmse: 0.0275517\n", + "[157]\tvalid_0's rmse: 0.0275422\n", + "[158]\tvalid_0's rmse: 0.0275326\n", + "[159]\tvalid_0's rmse: 0.0275205\n", + "[160]\tvalid_0's rmse: 0.0275234\n", + "[161]\tvalid_0's rmse: 0.0275164\n", + "[162]\tvalid_0's rmse: 0.0275097\n", + "[163]\tvalid_0's rmse: 0.0275092\n", + "[164]\tvalid_0's rmse: 0.0274879\n", + "[165]\tvalid_0's rmse: 0.0274696\n", + "[166]\tvalid_0's rmse: 0.0274685\n", + "[167]\tvalid_0's rmse: 0.0274698\n", + "[168]\tvalid_0's rmse: 0.0274655\n", + "[169]\tvalid_0's rmse: 0.0274796\n", + "[170]\tvalid_0's rmse: 0.0274609\n", + "[171]\tvalid_0's rmse: 0.0274455\n", + "[172]\tvalid_0's rmse: 0.0274493\n", + "[173]\tvalid_0's rmse: 0.0274369\n", + "[174]\tvalid_0's rmse: 0.0274299\n", + "[175]\tvalid_0's rmse: 0.0274234\n", + "[176]\tvalid_0's rmse: 0.0274104\n", + "[177]\tvalid_0's rmse: 0.0273984\n", + "[178]\tvalid_0's rmse: 0.0273957\n", + "[179]\tvalid_0's rmse: 0.0273894\n", + "[180]\tvalid_0's rmse: 0.0273696\n", + "[181]\tvalid_0's rmse: 0.0273432\n", + "[182]\tvalid_0's rmse: 0.027342\n", + "[183]\tvalid_0's rmse: 0.0273113\n", + "[184]\tvalid_0's rmse: 0.0273034\n", + "[185]\tvalid_0's rmse: 0.0272787\n", + "[186]\tvalid_0's rmse: 0.027264\n", + "[187]\tvalid_0's rmse: 0.0272687\n", + "[188]\tvalid_0's rmse: 0.0272646\n", + "[189]\tvalid_0's rmse: 0.027269\n", + "[190]\tvalid_0's rmse: 0.0272657\n", + "[191]\tvalid_0's rmse: 0.0272644\n", + "[192]\tvalid_0's rmse: 0.027266\n", + "[193]\tvalid_0's rmse: 0.0272565\n", + "[194]\tvalid_0's rmse: 0.0272468\n", + "[195]\tvalid_0's rmse: 0.0272463\n", + "[196]\tvalid_0's rmse: 0.027222\n", + "[197]\tvalid_0's rmse: 0.0271824\n", + "[198]\tvalid_0's rmse: 0.02718\n", + "[199]\tvalid_0's rmse: 0.0271605\n", + "[200]\tvalid_0's rmse: 0.0271487\n", + "[201]\tvalid_0's rmse: 0.0271442\n", + "[202]\tvalid_0's rmse: 0.0271446\n", + "[203]\tvalid_0's rmse: 0.0271367\n", + "[204]\tvalid_0's rmse: 0.0271474\n", + "[205]\tvalid_0's rmse: 0.0271404\n", + "[206]\tvalid_0's rmse: 0.0271376\n", + "[207]\tvalid_0's rmse: 0.0271251\n", + "[208]\tvalid_0's rmse: 0.0271296\n", + "[209]\tvalid_0's rmse: 0.0271322\n", + "[210]\tvalid_0's rmse: 0.0271364\n", + "[211]\tvalid_0's rmse: 0.027128\n", + "[212]\tvalid_0's rmse: 0.0271156\n", + "[213]\tvalid_0's rmse: 0.0271112\n", + "[214]\tvalid_0's rmse: 0.0271093\n", + "[215]\tvalid_0's rmse: 0.0271047\n", + "[216]\tvalid_0's rmse: 0.0270906\n", + "[217]\tvalid_0's rmse: 0.0270941\n", + "[218]\tvalid_0's rmse: 0.0270903\n", + "[219]\tvalid_0's rmse: 0.0270865\n", + "[220]\tvalid_0's rmse: 0.0270923\n", + "[221]\tvalid_0's rmse: 0.0270943\n", + "[222]\tvalid_0's rmse: 0.0270857\n", + "[223]\tvalid_0's rmse: 0.0270803\n", + "[224]\tvalid_0's rmse: 0.0270701\n", + "[225]\tvalid_0's rmse: 0.0270644\n", + "[226]\tvalid_0's rmse: 0.0270723\n", + "[227]\tvalid_0's rmse: 0.0270654\n", + "[228]\tvalid_0's rmse: 0.027069\n", + "[229]\tvalid_0's rmse: 0.0270634\n", + "[230]\tvalid_0's rmse: 0.027059\n", + "[231]\tvalid_0's rmse: 0.0270559\n", + "[232]\tvalid_0's rmse: 0.0270541\n", + "[233]\tvalid_0's rmse: 0.0270546\n", + "[234]\tvalid_0's rmse: 0.0270555\n", + "[235]\tvalid_0's rmse: 0.0270554\n", + "[236]\tvalid_0's rmse: 0.0270527\n", + "[237]\tvalid_0's rmse: 0.027045\n", + "[238]\tvalid_0's rmse: 0.0270457\n", + "[239]\tvalid_0's rmse: 0.0270406\n", + "[240]\tvalid_0's rmse: 0.0270462\n", + "[241]\tvalid_0's rmse: 0.0270405\n", + "[242]\tvalid_0's rmse: 0.0270448\n", + "[243]\tvalid_0's rmse: 0.0270406\n", + "[244]\tvalid_0's rmse: 0.0270415\n", + "[245]\tvalid_0's rmse: 0.0270421\n", + "[246]\tvalid_0's rmse: 0.0270327\n", + "[247]\tvalid_0's rmse: 0.0270246\n", + "[248]\tvalid_0's rmse: 0.0270194\n", + "[249]\tvalid_0's rmse: 0.0270177\n", + "[250]\tvalid_0's rmse: 0.0270092\n", + "[251]\tvalid_0's rmse: 0.0270089\n", + "[252]\tvalid_0's rmse: 0.0270085\n", + "[253]\tvalid_0's rmse: 0.0269901\n", + "[254]\tvalid_0's rmse: 0.0269891\n", + "[255]\tvalid_0's rmse: 0.0269845\n", + "[256]\tvalid_0's rmse: 0.0269845\n", + "[257]\tvalid_0's rmse: 0.0269555\n", + "[258]\tvalid_0's rmse: 0.026949\n", + "[259]\tvalid_0's rmse: 0.0269442\n", + "[260]\tvalid_0's rmse: 0.0269473\n", + "[261]\tvalid_0's rmse: 0.026946\n", + "[262]\tvalid_0's rmse: 0.0269368\n", + "[263]\tvalid_0's rmse: 0.0269311\n", + "[264]\tvalid_0's rmse: 0.0269294\n", + "[265]\tvalid_0's rmse: 0.0269236\n", + "[266]\tvalid_0's rmse: 0.0269203\n", + "[267]\tvalid_0's rmse: 0.0269202\n", + "[268]\tvalid_0's rmse: 0.0269171\n", + "[269]\tvalid_0's rmse: 0.0269116\n", + "[270]\tvalid_0's rmse: 0.026909\n", + "[271]\tvalid_0's rmse: 0.0269102\n", + "[272]\tvalid_0's rmse: 0.0269057\n", + "[273]\tvalid_0's rmse: 0.0269039\n", + "[274]\tvalid_0's rmse: 0.0269003\n", + "[275]\tvalid_0's rmse: 0.0268963\n", + "[276]\tvalid_0's rmse: 0.0268905\n", + "[277]\tvalid_0's rmse: 0.0268955\n", + "[278]\tvalid_0's rmse: 0.0268977\n", + "[279]\tvalid_0's rmse: 0.0269015\n", + "[280]\tvalid_0's rmse: 0.0269013\n", + "[281]\tvalid_0's rmse: 0.0268988\n", + "[282]\tvalid_0's rmse: 0.0268985\n", + "[283]\tvalid_0's rmse: 0.0268988\n", + "[284]\tvalid_0's rmse: 0.0268935\n", + "[285]\tvalid_0's rmse: 0.0268928\n", + "[286]\tvalid_0's rmse: 0.0268898\n", + "[287]\tvalid_0's rmse: 0.0268862\n", + "[288]\tvalid_0's rmse: 0.0268827\n", + "[289]\tvalid_0's rmse: 0.0268775\n", + "[290]\tvalid_0's rmse: 0.0268797\n", + "[291]\tvalid_0's rmse: 0.0268748\n", + "[292]\tvalid_0's rmse: 0.0268375\n", + "[293]\tvalid_0's rmse: 0.026812\n", + "[294]\tvalid_0's rmse: 0.0268085\n", + "[295]\tvalid_0's rmse: 0.0268076\n", + "[296]\tvalid_0's rmse: 0.026803\n", + "[297]\tvalid_0's rmse: 0.0267955\n", + "[298]\tvalid_0's rmse: 0.0267948\n", + "[299]\tvalid_0's rmse: 0.0267962\n", + "[300]\tvalid_0's rmse: 0.0267929\n", + "[301]\tvalid_0's rmse: 0.026792\n", + "[302]\tvalid_0's rmse: 0.026785\n", + "[303]\tvalid_0's rmse: 0.0267811\n", + "[304]\tvalid_0's rmse: 0.0267687\n", + "[305]\tvalid_0's rmse: 0.0267677\n", + "[306]\tvalid_0's rmse: 0.0267618\n", + "[307]\tvalid_0's rmse: 0.0267611\n", + "[308]\tvalid_0's rmse: 0.0267278\n", + "[309]\tvalid_0's rmse: 0.026727\n", + "[310]\tvalid_0's rmse: 0.0267222\n", + "[311]\tvalid_0's rmse: 0.0267172\n", + "[312]\tvalid_0's rmse: 0.0267138\n", + "[313]\tvalid_0's rmse: 0.0267119\n", + "[314]\tvalid_0's rmse: 0.0267091\n", + "[315]\tvalid_0's rmse: 0.0267093\n", + "[316]\tvalid_0's rmse: 0.0267089\n", + "[317]\tvalid_0's rmse: 0.0267078\n", + "[318]\tvalid_0's rmse: 0.0267068\n", + "[319]\tvalid_0's rmse: 0.0267062\n", + "[320]\tvalid_0's rmse: 0.0267035\n", + "[321]\tvalid_0's rmse: 0.0267021\n", + "[322]\tvalid_0's rmse: 0.0266997\n", + "[323]\tvalid_0's rmse: 0.026701\n", + "[324]\tvalid_0's rmse: 0.0266997\n", + "[325]\tvalid_0's rmse: 0.0266999\n", + "[326]\tvalid_0's rmse: 0.0267043\n", + "[327]\tvalid_0's rmse: 0.0267048\n", + "[328]\tvalid_0's rmse: 0.0266922\n", + "[329]\tvalid_0's rmse: 0.0266828\n", + "[330]\tvalid_0's rmse: 0.0266837\n", + "[331]\tvalid_0's rmse: 0.0266863\n", + "[332]\tvalid_0's rmse: 0.0266764\n", + "[333]\tvalid_0's rmse: 0.0266769\n", + "[334]\tvalid_0's rmse: 0.0266686\n", + "[335]\tvalid_0's rmse: 0.0266701\n", + "[336]\tvalid_0's rmse: 0.0266739\n", + "[337]\tvalid_0's rmse: 0.0266749\n", + "[338]\tvalid_0's rmse: 0.0266749\n", + "[339]\tvalid_0's rmse: 0.0266745\n", + "[340]\tvalid_0's rmse: 0.0266731\n", + "[341]\tvalid_0's rmse: 0.0266707\n", + "[342]\tvalid_0's rmse: 0.0266627\n", + "[343]\tvalid_0's rmse: 0.0266618\n", + "[344]\tvalid_0's rmse: 0.0266607\n", + "[345]\tvalid_0's rmse: 0.0266595\n", + "[346]\tvalid_0's rmse: 0.0266483\n", + "[347]\tvalid_0's rmse: 0.0266501\n", + "[348]\tvalid_0's rmse: 0.0266484\n", + "[349]\tvalid_0's rmse: 0.0266469\n", + "[350]\tvalid_0's rmse: 0.0266446\n", + "[351]\tvalid_0's rmse: 0.0266422\n", + "[352]\tvalid_0's rmse: 0.0266445\n", + "[353]\tvalid_0's rmse: 0.026642\n", + "[354]\tvalid_0's rmse: 0.0266332\n", + "[355]\tvalid_0's rmse: 0.0266333\n", + "[356]\tvalid_0's rmse: 0.0266291\n", + "[357]\tvalid_0's rmse: 0.0266298\n", + "[358]\tvalid_0's rmse: 0.0266302\n", + "[359]\tvalid_0's rmse: 0.026626\n", + "[360]\tvalid_0's rmse: 0.0266191\n", + "[361]\tvalid_0's rmse: 0.0266188\n", + "[362]\tvalid_0's rmse: 0.0266132\n", + "[363]\tvalid_0's rmse: 0.0266094\n", + "[364]\tvalid_0's rmse: 0.0266022\n", + "[365]\tvalid_0's rmse: 0.0266027\n", + "[366]\tvalid_0's rmse: 0.0266001\n", + "[367]\tvalid_0's rmse: 0.0266011\n", + "[368]\tvalid_0's rmse: 0.0265957\n", + "[369]\tvalid_0's rmse: 0.026593\n", + "[370]\tvalid_0's rmse: 0.0265889\n", + "[371]\tvalid_0's rmse: 0.0265887\n", + "[372]\tvalid_0's rmse: 0.0265821\n", + "[373]\tvalid_0's rmse: 0.026579\n", + "[374]\tvalid_0's rmse: 0.0265765\n", + "[375]\tvalid_0's rmse: 0.0265742\n", + "[376]\tvalid_0's rmse: 0.0265724\n", + "[377]\tvalid_0's rmse: 0.0265683\n", + "[378]\tvalid_0's rmse: 0.0265671\n", + "[379]\tvalid_0's rmse: 0.0265605\n", + "[380]\tvalid_0's rmse: 0.026561\n", + "[381]\tvalid_0's rmse: 0.0265544\n", + "[382]\tvalid_0's rmse: 0.026555\n", + "[383]\tvalid_0's rmse: 0.0265526\n", + "[384]\tvalid_0's rmse: 0.0265483\n", + "[385]\tvalid_0's rmse: 0.0265519\n", + "[386]\tvalid_0's rmse: 0.0265494\n", + "[387]\tvalid_0's rmse: 0.0265502\n", + "[388]\tvalid_0's rmse: 0.0265525\n", + "[389]\tvalid_0's rmse: 0.0265567\n", + "[390]\tvalid_0's rmse: 0.0265403\n", + "[391]\tvalid_0's rmse: 0.0265361\n", + "[392]\tvalid_0's rmse: 0.0265342\n", + "[393]\tvalid_0's rmse: 0.026529\n", + "[394]\tvalid_0's rmse: 0.0265267\n", + "[395]\tvalid_0's rmse: 0.0265303\n", + "[396]\tvalid_0's rmse: 0.0265306\n", + "[397]\tvalid_0's rmse: 0.0265338\n", + "[398]\tvalid_0's rmse: 0.0265294\n", + "[399]\tvalid_0's rmse: 0.0265253\n", + "[400]\tvalid_0's rmse: 0.0265248\n", + "[401]\tvalid_0's rmse: 0.0265266\n", + "[402]\tvalid_0's rmse: 0.0265279\n", + "[403]\tvalid_0's rmse: 0.0265289\n", + "[404]\tvalid_0's rmse: 0.0265279\n", + "[405]\tvalid_0's rmse: 0.0265228\n", + "[406]\tvalid_0's rmse: 0.0265323\n", + "[407]\tvalid_0's rmse: 0.0265335\n", + "[408]\tvalid_0's rmse: 0.0265318\n", + "[409]\tvalid_0's rmse: 0.0265298\n", + "[410]\tvalid_0's rmse: 0.0265275\n", + "[411]\tvalid_0's rmse: 0.0265259\n", + "[412]\tvalid_0's rmse: 0.0265261\n", + "[413]\tvalid_0's rmse: 0.0265267\n", + "[414]\tvalid_0's rmse: 0.0265261\n", + "[415]\tvalid_0's rmse: 0.0265255\n", + "[416]\tvalid_0's rmse: 0.0265275\n", + "[417]\tvalid_0's rmse: 0.0265225\n", + "[418]\tvalid_0's rmse: 0.0265226\n", + "[419]\tvalid_0's rmse: 0.0265222\n", + "[420]\tvalid_0's rmse: 0.026521\n", + "[421]\tvalid_0's rmse: 0.0265169\n", + "[422]\tvalid_0's rmse: 0.0265139\n", + "[423]\tvalid_0's rmse: 0.0265126\n", + "[424]\tvalid_0's rmse: 0.0265136\n", + "[425]\tvalid_0's rmse: 0.0265079\n", + "[426]\tvalid_0's rmse: 0.0265017\n", + "[427]\tvalid_0's rmse: 0.0264914\n", + "[428]\tvalid_0's rmse: 0.026489\n", + "[429]\tvalid_0's rmse: 0.0264918\n", + "[430]\tvalid_0's rmse: 0.0264906\n", + "[431]\tvalid_0's rmse: 0.0264809\n", + "[432]\tvalid_0's rmse: 0.0264809\n", + "[433]\tvalid_0's rmse: 0.0264819\n", + "[434]\tvalid_0's rmse: 0.0264775\n", + "[435]\tvalid_0's rmse: 0.0264744\n", + "[436]\tvalid_0's rmse: 0.026474\n", + "[437]\tvalid_0's rmse: 0.0264713\n", + "[438]\tvalid_0's rmse: 0.0264702\n", + "[439]\tvalid_0's rmse: 0.0264686\n", + "[440]\tvalid_0's rmse: 0.0264654\n", + "[441]\tvalid_0's rmse: 0.0264663\n", + "[442]\tvalid_0's rmse: 0.0264543\n", + "[443]\tvalid_0's rmse: 0.0264538\n", + "[444]\tvalid_0's rmse: 0.0264507\n", + "[445]\tvalid_0's rmse: 0.0264509\n", + "[446]\tvalid_0's rmse: 0.0264456\n", + "[447]\tvalid_0's rmse: 0.0264483\n", + "[448]\tvalid_0's rmse: 0.0264169\n", + "[449]\tvalid_0's rmse: 0.0264151\n", + "[450]\tvalid_0's rmse: 0.0264172\n", + "[451]\tvalid_0's rmse: 0.0264171\n", + "[452]\tvalid_0's rmse: 0.0264175\n", + "[453]\tvalid_0's rmse: 0.0264149\n", + "[454]\tvalid_0's rmse: 0.0264144\n", + "[455]\tvalid_0's rmse: 0.0264154\n", + "[456]\tvalid_0's rmse: 0.0264147\n", + "[457]\tvalid_0's rmse: 0.0264118\n", + "[458]\tvalid_0's rmse: 0.0264138\n", + "[459]\tvalid_0's rmse: 0.0264151\n", + "[460]\tvalid_0's rmse: 0.026415\n", + "[461]\tvalid_0's rmse: 0.0264159\n", + "[462]\tvalid_0's rmse: 0.0264121\n", + "[463]\tvalid_0's rmse: 0.026414\n", + "[464]\tvalid_0's rmse: 0.0264093\n", + "[465]\tvalid_0's rmse: 0.0264118\n", + "[466]\tvalid_0's rmse: 0.0264118\n", + "[467]\tvalid_0's rmse: 0.0264099\n", + "[468]\tvalid_0's rmse: 0.0264113\n", + "[469]\tvalid_0's rmse: 0.0264101\n", + "[470]\tvalid_0's rmse: 0.0264118\n", + "[471]\tvalid_0's rmse: 0.0264092\n", + "[472]\tvalid_0's rmse: 0.0264044\n", + "[473]\tvalid_0's rmse: 0.0263975\n", + "[474]\tvalid_0's rmse: 0.0263909\n", + "[475]\tvalid_0's rmse: 0.0263866\n", + "[476]\tvalid_0's rmse: 0.0263848\n", + "[477]\tvalid_0's rmse: 0.0263839\n", + "[478]\tvalid_0's rmse: 0.0263787\n", + "[479]\tvalid_0's rmse: 0.0263797\n", + "[480]\tvalid_0's rmse: 0.0263769\n", + "[481]\tvalid_0's rmse: 0.0263744\n", + "[482]\tvalid_0's rmse: 0.0263693\n", + "[483]\tvalid_0's rmse: 0.0263673\n", + "[484]\tvalid_0's rmse: 0.0263626\n", + "[485]\tvalid_0's rmse: 0.0263591\n", + "[486]\tvalid_0's rmse: 0.0263569\n", + "[487]\tvalid_0's rmse: 0.0263557\n", + "[488]\tvalid_0's rmse: 0.0263559\n", + "[489]\tvalid_0's rmse: 0.026358\n", + "[490]\tvalid_0's rmse: 0.0263566\n", + "[491]\tvalid_0's rmse: 0.0263564\n", + "[492]\tvalid_0's rmse: 0.0263568\n", + "[493]\tvalid_0's rmse: 0.0263562\n", + "[494]\tvalid_0's rmse: 0.0263561\n", + "[495]\tvalid_0's rmse: 0.0263508\n", + "[496]\tvalid_0's rmse: 0.0263498\n", + "[497]\tvalid_0's rmse: 0.026346\n", + "[498]\tvalid_0's rmse: 0.0263474\n", + "[499]\tvalid_0's rmse: 0.026346\n", + "[500]\tvalid_0's rmse: 0.026342\n", + "[501]\tvalid_0's rmse: 0.0263415\n", + "[502]\tvalid_0's rmse: 0.0263404\n", + "[503]\tvalid_0's rmse: 0.0263355\n", + "[504]\tvalid_0's rmse: 0.0263363\n", + "[505]\tvalid_0's rmse: 0.0263362\n", + "[506]\tvalid_0's rmse: 0.0263356\n", + "[507]\tvalid_0's rmse: 0.0263345\n", + "[508]\tvalid_0's rmse: 0.0263343\n", + "[509]\tvalid_0's rmse: 0.0263294\n", + "[510]\tvalid_0's rmse: 0.0263279\n", + "[511]\tvalid_0's rmse: 0.0263274\n", + "[512]\tvalid_0's rmse: 0.0263227\n", + "[513]\tvalid_0's rmse: 0.0263228\n", + "[514]\tvalid_0's rmse: 0.0263178\n", + "[515]\tvalid_0's rmse: 0.0263175\n", + "[516]\tvalid_0's rmse: 0.0263152\n", + "[517]\tvalid_0's rmse: 0.0263062\n", + "[518]\tvalid_0's rmse: 0.0263098\n", + "[519]\tvalid_0's rmse: 0.0263065\n", + "[520]\tvalid_0's rmse: 0.0263043\n", + "[521]\tvalid_0's rmse: 0.0263029\n", + "[522]\tvalid_0's rmse: 0.0263005\n", + "[523]\tvalid_0's rmse: 0.0263013\n", + "[524]\tvalid_0's rmse: 0.0263\n", + "[525]\tvalid_0's rmse: 0.0262944\n", + "[526]\tvalid_0's rmse: 0.0262956\n", + "[527]\tvalid_0's rmse: 0.0262945\n", + "[528]\tvalid_0's rmse: 0.0262948\n", + "[529]\tvalid_0's rmse: 0.0262927\n", + "[530]\tvalid_0's rmse: 0.0262942\n", + "[531]\tvalid_0's rmse: 0.0262821\n", + "[532]\tvalid_0's rmse: 0.0262828\n", + "[533]\tvalid_0's rmse: 0.0262794\n", + "[534]\tvalid_0's rmse: 0.0262778\n", + "[535]\tvalid_0's rmse: 0.0262769\n", + "[536]\tvalid_0's rmse: 0.0262763\n", + "[537]\tvalid_0's rmse: 0.0262754\n", + "[538]\tvalid_0's rmse: 0.026275\n", + "[539]\tvalid_0's rmse: 0.0262742\n", + "[540]\tvalid_0's rmse: 0.02625\n", + "[541]\tvalid_0's rmse: 0.0262449\n", + "[542]\tvalid_0's rmse: 0.0262456\n", + "[543]\tvalid_0's rmse: 0.0262468\n", + "[544]\tvalid_0's rmse: 0.0262448\n", + "[545]\tvalid_0's rmse: 0.0262438\n", + "[546]\tvalid_0's rmse: 0.0262417\n", + "[547]\tvalid_0's rmse: 0.026231\n", + "[548]\tvalid_0's rmse: 0.0262339\n", + "[549]\tvalid_0's rmse: 0.0262327\n", + "[550]\tvalid_0's rmse: 0.0262289\n", + "[551]\tvalid_0's rmse: 0.0262244\n", + "[552]\tvalid_0's rmse: 0.0262075\n", + "[553]\tvalid_0's rmse: 0.0262031\n", + "[554]\tvalid_0's rmse: 0.0262028\n", + "[555]\tvalid_0's rmse: 0.0261984\n", + "[556]\tvalid_0's rmse: 0.0261981\n", + "[557]\tvalid_0's rmse: 0.0261977\n", + "[558]\tvalid_0's rmse: 0.0262004\n", + "[559]\tvalid_0's rmse: 0.0261955\n", + "[560]\tvalid_0's rmse: 0.0261955\n", + "[561]\tvalid_0's rmse: 0.0261947\n", + "[562]\tvalid_0's rmse: 0.0261983\n", + "[563]\tvalid_0's rmse: 0.0261981\n", + "[564]\tvalid_0's rmse: 0.0261992\n", + "[565]\tvalid_0's rmse: 0.0261974\n", + "[566]\tvalid_0's rmse: 0.0261936\n", + "[567]\tvalid_0's rmse: 0.0261954\n", + "[568]\tvalid_0's rmse: 0.0261987\n", + "[569]\tvalid_0's rmse: 0.0261837\n", + "[570]\tvalid_0's rmse: 0.0261839\n", + "[571]\tvalid_0's rmse: 0.026185\n", + "[572]\tvalid_0's rmse: 0.0261849\n", + "[573]\tvalid_0's rmse: 0.0261842\n", + "[574]\tvalid_0's rmse: 0.0261826\n", + "[575]\tvalid_0's rmse: 0.0261834\n", + "[576]\tvalid_0's rmse: 0.0261825\n", + "[577]\tvalid_0's rmse: 0.0261717\n", + "[578]\tvalid_0's rmse: 0.026171\n", + "[579]\tvalid_0's rmse: 0.0261609\n", + "[580]\tvalid_0's rmse: 0.02616\n", + "[581]\tvalid_0's rmse: 0.0261573\n", + "[582]\tvalid_0's rmse: 0.026159\n", + "[583]\tvalid_0's rmse: 0.0261576\n", + "[584]\tvalid_0's rmse: 0.0261557\n", + "[585]\tvalid_0's rmse: 0.0261582\n", + "[586]\tvalid_0's rmse: 0.026158\n", + "[587]\tvalid_0's rmse: 0.0261573\n", + "[588]\tvalid_0's rmse: 0.0261571\n", + "[589]\tvalid_0's rmse: 0.0261535\n", + "[590]\tvalid_0's rmse: 0.0261534\n", + "[591]\tvalid_0's rmse: 0.0261534\n", + "[592]\tvalid_0's rmse: 0.0261436\n", + "[593]\tvalid_0's rmse: 0.0261423\n", + "[594]\tvalid_0's rmse: 0.0261409\n", + "[595]\tvalid_0's rmse: 0.0261377\n", + "[596]\tvalid_0's rmse: 0.0261358\n", + "[597]\tvalid_0's rmse: 0.0261367\n", + "[598]\tvalid_0's rmse: 0.026137\n", + "[599]\tvalid_0's rmse: 0.0261357\n", + "[600]\tvalid_0's rmse: 0.0261344\n", + "[601]\tvalid_0's rmse: 0.0261345\n", + "[602]\tvalid_0's rmse: 0.026133\n", + "[603]\tvalid_0's rmse: 0.0261313\n", + "[604]\tvalid_0's rmse: 0.0261344\n", + "[605]\tvalid_0's rmse: 0.0261339\n", + "[606]\tvalid_0's rmse: 0.0261321\n", + "[607]\tvalid_0's rmse: 0.0261288\n", + "[608]\tvalid_0's rmse: 0.0261285\n", + "[609]\tvalid_0's rmse: 0.0261298\n", + "[610]\tvalid_0's rmse: 0.026131\n", + "[611]\tvalid_0's rmse: 0.0261265\n", + "[612]\tvalid_0's rmse: 0.0261043\n", + "[613]\tvalid_0's rmse: 0.0261023\n", + "[614]\tvalid_0's rmse: 0.0261013\n", + "[615]\tvalid_0's rmse: 0.0260971\n", + "[616]\tvalid_0's rmse: 0.0260979\n", + "[617]\tvalid_0's rmse: 0.0260987\n", + "[618]\tvalid_0's rmse: 0.0260728\n", + "[619]\tvalid_0's rmse: 0.026069\n", + "[620]\tvalid_0's rmse: 0.0260678\n", + "[621]\tvalid_0's rmse: 0.0260587\n", + "[622]\tvalid_0's rmse: 0.0260571\n", + "[623]\tvalid_0's rmse: 0.0260564\n", + "[624]\tvalid_0's rmse: 0.026054\n", + "[625]\tvalid_0's rmse: 0.0260544\n", + "[626]\tvalid_0's rmse: 0.0260502\n", + "[627]\tvalid_0's rmse: 0.0260444\n", + "[628]\tvalid_0's rmse: 0.026044\n", + "[629]\tvalid_0's rmse: 0.02604\n", + "[630]\tvalid_0's rmse: 0.0260386\n", + "[631]\tvalid_0's rmse: 0.0260394\n", + "[632]\tvalid_0's rmse: 0.0260378\n", + "[633]\tvalid_0's rmse: 0.0260397\n", + "[634]\tvalid_0's rmse: 0.0260395\n", + "[635]\tvalid_0's rmse: 0.0260398\n", + "[636]\tvalid_0's rmse: 0.0260376\n", + "[637]\tvalid_0's rmse: 0.026039\n", + "[638]\tvalid_0's rmse: 0.0260362\n", + "[639]\tvalid_0's rmse: 0.0260345\n", + "[640]\tvalid_0's rmse: 0.0260342\n", + "[641]\tvalid_0's rmse: 0.0260336\n", + "[642]\tvalid_0's rmse: 0.0260337\n", + "[643]\tvalid_0's rmse: 0.0260325\n", + "[644]\tvalid_0's rmse: 0.0260305\n", + "[645]\tvalid_0's rmse: 0.0260308\n", + "[646]\tvalid_0's rmse: 0.0260319\n", + "[647]\tvalid_0's rmse: 0.0260334\n", + "[648]\tvalid_0's rmse: 0.0260338\n", + "[649]\tvalid_0's rmse: 0.0260325\n", + "[650]\tvalid_0's rmse: 0.0260265\n", + "[651]\tvalid_0's rmse: 0.0260269\n", + "[652]\tvalid_0's rmse: 0.0260251\n", + "[653]\tvalid_0's rmse: 0.0260252\n", + "[654]\tvalid_0's rmse: 0.0260251\n", + "[655]\tvalid_0's rmse: 0.0260257\n", + "[656]\tvalid_0's rmse: 0.0260234\n", + "[657]\tvalid_0's rmse: 0.0260219\n", + "[658]\tvalid_0's rmse: 0.0260211\n", + "[659]\tvalid_0's rmse: 0.0260209\n", + "[660]\tvalid_0's rmse: 0.0260217\n", + "[661]\tvalid_0's rmse: 0.0260234\n", + "[662]\tvalid_0's rmse: 0.0260244\n", + "[663]\tvalid_0's rmse: 0.0260219\n", + "[664]\tvalid_0's rmse: 0.0260216\n", + "[665]\tvalid_0's rmse: 0.026023\n", + "[666]\tvalid_0's rmse: 0.026025\n", + "[667]\tvalid_0's rmse: 0.0260245\n", + "[668]\tvalid_0's rmse: 0.026022\n", + "[669]\tvalid_0's rmse: 0.0260216\n", + "[670]\tvalid_0's rmse: 0.0260231\n", + "[671]\tvalid_0's rmse: 0.0260226\n", + "[672]\tvalid_0's rmse: 0.0260197\n", + "[673]\tvalid_0's rmse: 0.0260191\n", + "[674]\tvalid_0's rmse: 0.0260193\n", + "[675]\tvalid_0's rmse: 0.0260178\n", + "[676]\tvalid_0's rmse: 0.0260171\n", + "[677]\tvalid_0's rmse: 0.0260153\n", + "[678]\tvalid_0's rmse: 0.0260153\n", + "[679]\tvalid_0's rmse: 0.026013\n", + "[680]\tvalid_0's rmse: 0.0260116\n", + "[681]\tvalid_0's rmse: 0.0260089\n", + "[682]\tvalid_0's rmse: 0.0260046\n", + "[683]\tvalid_0's rmse: 0.0260029\n", + "[684]\tvalid_0's rmse: 0.0260038\n", + "[685]\tvalid_0's rmse: 0.0260018\n", + "[686]\tvalid_0's rmse: 0.0260058\n", + "[687]\tvalid_0's rmse: 0.0260083\n", + "[688]\tvalid_0's rmse: 0.0260081\n", + "[689]\tvalid_0's rmse: 0.0260076\n", + "[690]\tvalid_0's rmse: 0.0260032\n", + "[691]\tvalid_0's rmse: 0.0260018\n", + "[692]\tvalid_0's rmse: 0.0260013\n", + "[693]\tvalid_0's rmse: 0.0260024\n", + "[694]\tvalid_0's rmse: 0.026003\n", + "[695]\tvalid_0's rmse: 0.0260023\n", + "[696]\tvalid_0's rmse: 0.0260022\n", + "[697]\tvalid_0's rmse: 0.0260018\n", + "[698]\tvalid_0's rmse: 0.0260004\n", + "[699]\tvalid_0's rmse: 0.0259998\n", + "[700]\tvalid_0's rmse: 0.0259961\n", + "[701]\tvalid_0's rmse: 0.0259964\n", + "[702]\tvalid_0's rmse: 0.0259942\n", + "[703]\tvalid_0's rmse: 0.0259951\n", + "[704]\tvalid_0's rmse: 0.0259918\n", + "[705]\tvalid_0's rmse: 0.0259913\n", + "[706]\tvalid_0's rmse: 0.0259895\n", + "[707]\tvalid_0's rmse: 0.0259881\n", + "[708]\tvalid_0's rmse: 0.0259869\n", + "[709]\tvalid_0's rmse: 0.0259796\n", + "[710]\tvalid_0's rmse: 0.0259789\n", + "[711]\tvalid_0's rmse: 0.0259766\n", + "[712]\tvalid_0's rmse: 0.0259758\n", + "[713]\tvalid_0's rmse: 0.0259746\n", + "[714]\tvalid_0's rmse: 0.0259744\n", + "[715]\tvalid_0's rmse: 0.0259761\n", + "[716]\tvalid_0's rmse: 0.0259832\n", + "[717]\tvalid_0's rmse: 0.0259813\n", + "[718]\tvalid_0's rmse: 0.0259823\n", + "[719]\tvalid_0's rmse: 0.0259815\n", + "[720]\tvalid_0's rmse: 0.0259701\n", + "[721]\tvalid_0's rmse: 0.0259693\n", + "[722]\tvalid_0's rmse: 0.0259679\n", + "[723]\tvalid_0's rmse: 0.0259668\n", + "[724]\tvalid_0's rmse: 0.0259646\n", + "[725]\tvalid_0's rmse: 0.0259639\n", + "[726]\tvalid_0's rmse: 0.0259672\n", + "[727]\tvalid_0's rmse: 0.025969\n", + "[728]\tvalid_0's rmse: 0.0259709\n", + "[729]\tvalid_0's rmse: 0.0259705\n", + "[730]\tvalid_0's rmse: 0.0259611\n", + "[731]\tvalid_0's rmse: 0.0259601\n", + "[732]\tvalid_0's rmse: 0.0259605\n", + "[733]\tvalid_0's rmse: 0.02596\n", + "[734]\tvalid_0's rmse: 0.0259589\n", + "[735]\tvalid_0's rmse: 0.0259593\n", + "[736]\tvalid_0's rmse: 0.0259612\n", + "[737]\tvalid_0's rmse: 0.0259617\n", + "[738]\tvalid_0's rmse: 0.0259604\n", + "[739]\tvalid_0's rmse: 0.0259609\n", + "[740]\tvalid_0's rmse: 0.0259575\n", + "[741]\tvalid_0's rmse: 0.0259552\n", + "[742]\tvalid_0's rmse: 0.025958\n", + "[743]\tvalid_0's rmse: 0.0259575\n", + "[744]\tvalid_0's rmse: 0.0259551\n", + "[745]\tvalid_0's rmse: 0.0259555\n", + "[746]\tvalid_0's rmse: 0.0259564\n", + "[747]\tvalid_0's rmse: 0.0259554\n", + "[748]\tvalid_0's rmse: 0.0259536\n", + "[749]\tvalid_0's rmse: 0.0259524\n", + "[750]\tvalid_0's rmse: 0.0259526\n", + "[751]\tvalid_0's rmse: 0.0259521\n", + "[752]\tvalid_0's rmse: 0.0259515\n", + "[753]\tvalid_0's rmse: 0.0259512\n", + "[754]\tvalid_0's rmse: 0.0259504\n", + "[755]\tvalid_0's rmse: 0.0259508\n", + "[756]\tvalid_0's rmse: 0.0259495\n", + "[757]\tvalid_0's rmse: 0.0259432\n", + "[758]\tvalid_0's rmse: 0.0259428\n", + "[759]\tvalid_0's rmse: 0.0259422\n", + "[760]\tvalid_0's rmse: 0.0259443\n", + "[761]\tvalid_0's rmse: 0.0259459\n", + "[762]\tvalid_0's rmse: 0.0259443\n", + "[763]\tvalid_0's rmse: 0.0259442\n", + "[764]\tvalid_0's rmse: 0.0259432\n", + "[765]\tvalid_0's rmse: 0.025944\n", + "[766]\tvalid_0's rmse: 0.0259433\n", + "[767]\tvalid_0's rmse: 0.0259438\n", + "[768]\tvalid_0's rmse: 0.0259408\n", + "[769]\tvalid_0's rmse: 0.0259404\n", + "[770]\tvalid_0's rmse: 0.0259398\n", + "[771]\tvalid_0's rmse: 0.0259375\n", + "[772]\tvalid_0's rmse: 0.025935\n", + "[773]\tvalid_0's rmse: 0.0259347\n", + "[774]\tvalid_0's rmse: 0.0259332\n", + "[775]\tvalid_0's rmse: 0.0259335\n", + "[776]\tvalid_0's rmse: 0.0259349\n", + "[777]\tvalid_0's rmse: 0.0259345\n", + "[778]\tvalid_0's rmse: 0.0259353\n", + "[779]\tvalid_0's rmse: 0.0259353\n", + "[780]\tvalid_0's rmse: 0.0259354\n", + "[781]\tvalid_0's rmse: 0.025935\n", + "[782]\tvalid_0's rmse: 0.0259362\n", + "[783]\tvalid_0's rmse: 0.0259348\n", + "[784]\tvalid_0's rmse: 0.0259347\n", + "[785]\tvalid_0's rmse: 0.0259361\n", + "[786]\tvalid_0's rmse: 0.0259417\n", + "[787]\tvalid_0's rmse: 0.0259418\n", + "[788]\tvalid_0's rmse: 0.0259422\n", + "[789]\tvalid_0's rmse: 0.0259422\n", + "[790]\tvalid_0's rmse: 0.0259419\n", + "[791]\tvalid_0's rmse: 0.0259409\n", + "[792]\tvalid_0's rmse: 0.0259409\n", + "[793]\tvalid_0's rmse: 0.0259433\n", + "[794]\tvalid_0's rmse: 0.0259438\n", + "[795]\tvalid_0's rmse: 0.0259415\n", + "[796]\tvalid_0's rmse: 0.0259423\n", + "[797]\tvalid_0's rmse: 0.0259435\n", + "[798]\tvalid_0's rmse: 0.0259416\n", + "[799]\tvalid_0's rmse: 0.0259469\n", + "[800]\tvalid_0's rmse: 0.0259488\n", + "[801]\tvalid_0's rmse: 0.0259505\n", + "[802]\tvalid_0's rmse: 0.025947\n", + "[803]\tvalid_0's rmse: 0.0259453\n", + "[804]\tvalid_0's rmse: 0.0259434\n", + "[805]\tvalid_0's rmse: 0.0259429\n", + "[806]\tvalid_0's rmse: 0.0259445\n", + "[807]\tvalid_0's rmse: 0.0259469\n", + "[808]\tvalid_0's rmse: 0.0259436\n", + "[809]\tvalid_0's rmse: 0.0259414\n", + "[810]\tvalid_0's rmse: 0.0259419\n", + "[811]\tvalid_0's rmse: 0.0259498\n", + "[812]\tvalid_0's rmse: 0.0259524\n", + "[813]\tvalid_0's rmse: 0.025951\n", + "[814]\tvalid_0's rmse: 0.0259468\n", + "[815]\tvalid_0's rmse: 0.0259462\n", + "[816]\tvalid_0's rmse: 0.0259387\n", + "[817]\tvalid_0's rmse: 0.0259382\n", + "[818]\tvalid_0's rmse: 0.0259381\n", + "[819]\tvalid_0's rmse: 0.0259391\n", + "[820]\tvalid_0's rmse: 0.0259437\n", + "[821]\tvalid_0's rmse: 0.0259455\n", + "[822]\tvalid_0's rmse: 0.0259458\n", + "[823]\tvalid_0's rmse: 0.0259459\n", + "[824]\tvalid_0's rmse: 0.0259441\n", + "[825]\tvalid_0's rmse: 0.0259408\n", + "[826]\tvalid_0's rmse: 0.0259412\n", + "[827]\tvalid_0's rmse: 0.0259419\n", + "[828]\tvalid_0's rmse: 0.0259434\n", + "[829]\tvalid_0's rmse: 0.0259429\n", + "[830]\tvalid_0's rmse: 0.0259448\n", + "[831]\tvalid_0's rmse: 0.0259442\n", + "[832]\tvalid_0's rmse: 0.0259424\n", + "[833]\tvalid_0's rmse: 0.0259416\n", + "[834]\tvalid_0's rmse: 0.0259425\n", + "[835]\tvalid_0's rmse: 0.025941\n", + "[836]\tvalid_0's rmse: 0.02594\n", + "[837]\tvalid_0's rmse: 0.0259396\n", + "[838]\tvalid_0's rmse: 0.0259382\n", + "[839]\tvalid_0's rmse: 0.0259367\n", + "[840]\tvalid_0's rmse: 0.0259381\n", + "[841]\tvalid_0's rmse: 0.0259379\n", + "[842]\tvalid_0's rmse: 0.0259268\n", + "[843]\tvalid_0's rmse: 0.0259259\n", + "[844]\tvalid_0's rmse: 0.0259228\n", + "[845]\tvalid_0's rmse: 0.0259228\n", + "[846]\tvalid_0's rmse: 0.0259187\n", + "[847]\tvalid_0's rmse: 0.0259171\n", + "[848]\tvalid_0's rmse: 0.0259177\n", + "[849]\tvalid_0's rmse: 0.0259164\n", + "[850]\tvalid_0's rmse: 0.0259161\n", + "[851]\tvalid_0's rmse: 0.0259161\n", + "[852]\tvalid_0's rmse: 0.0259147\n", + "[853]\tvalid_0's rmse: 0.0259145\n", + "[854]\tvalid_0's rmse: 0.0259144\n", + "[855]\tvalid_0's rmse: 0.0259125\n", + "[856]\tvalid_0's rmse: 0.0259127\n", + "[857]\tvalid_0's rmse: 0.0259115\n", + "[858]\tvalid_0's rmse: 0.0259104\n", + "[859]\tvalid_0's rmse: 0.0259119\n", + "[860]\tvalid_0's rmse: 0.0259109\n", + "[861]\tvalid_0's rmse: 0.02591\n", + "[862]\tvalid_0's rmse: 0.0259099\n", + "[863]\tvalid_0's rmse: 0.0259097\n", + "[864]\tvalid_0's rmse: 0.0259133\n", + "[865]\tvalid_0's rmse: 0.0259116\n", + "[866]\tvalid_0's rmse: 0.0259111\n", + "[867]\tvalid_0's rmse: 0.0259095\n", + "[868]\tvalid_0's rmse: 0.0258982\n", + "[869]\tvalid_0's rmse: 0.0258979\n", + "[870]\tvalid_0's rmse: 0.0258956\n", + "[871]\tvalid_0's rmse: 0.0258967\n", + "[872]\tvalid_0's rmse: 0.0258972\n", + "[873]\tvalid_0's rmse: 0.0258971\n", + "[874]\tvalid_0's rmse: 0.0259015\n", + "[875]\tvalid_0's rmse: 0.0258999\n", + "[876]\tvalid_0's rmse: 0.0258987\n", + "[877]\tvalid_0's rmse: 0.0258987\n", + "[878]\tvalid_0's rmse: 0.0258985\n", + "[879]\tvalid_0's rmse: 0.0259\n", + "[880]\tvalid_0's rmse: 0.0259008\n", + "[881]\tvalid_0's rmse: 0.0259018\n", + "[882]\tvalid_0's rmse: 0.0259037\n", + "[883]\tvalid_0's rmse: 0.0259048\n", + "[884]\tvalid_0's rmse: 0.0259063\n", + "[885]\tvalid_0's rmse: 0.0259055\n", + "[886]\tvalid_0's rmse: 0.0259052\n", + "[887]\tvalid_0's rmse: 0.0259047\n", + "[888]\tvalid_0's rmse: 0.0259042\n", + "[889]\tvalid_0's rmse: 0.0259046\n", + "[890]\tvalid_0's rmse: 0.0259049\n", + "[891]\tvalid_0's rmse: 0.0259044\n", + "[892]\tvalid_0's rmse: 0.0259046\n", + "[893]\tvalid_0's rmse: 0.0259035\n", + "[894]\tvalid_0's rmse: 0.0259016\n", + "[895]\tvalid_0's rmse: 0.0259031\n", + "[896]\tvalid_0's rmse: 0.0259025\n", + "[897]\tvalid_0's rmse: 0.0259047\n", + "[898]\tvalid_0's rmse: 0.0259051\n", + "[899]\tvalid_0's rmse: 0.0259101\n", + "[900]\tvalid_0's rmse: 0.0259099\n", + "[901]\tvalid_0's rmse: 0.0259106\n", + "[902]\tvalid_0's rmse: 0.0259101\n", + "[903]\tvalid_0's rmse: 0.0259044\n", + "[904]\tvalid_0's rmse: 0.0259034\n", + "[905]\tvalid_0's rmse: 0.0259038\n", + "[906]\tvalid_0's rmse: 0.0259047\n", + "[907]\tvalid_0's rmse: 0.0259061\n", + "[908]\tvalid_0's rmse: 0.025906\n", + "[909]\tvalid_0's rmse: 0.025901\n", + "[910]\tvalid_0's rmse: 0.0258971\n", + "[911]\tvalid_0's rmse: 0.0258968\n", + "[912]\tvalid_0's rmse: 0.0258973\n", + "[913]\tvalid_0's rmse: 0.0258965\n", + "[914]\tvalid_0's rmse: 0.025898\n", + "[915]\tvalid_0's rmse: 0.0258982\n", + "[916]\tvalid_0's rmse: 0.0258981\n", + "[917]\tvalid_0's rmse: 0.0258952\n", + "[918]\tvalid_0's rmse: 0.0258949\n", + "[919]\tvalid_0's rmse: 0.0258947\n", + "[920]\tvalid_0's rmse: 0.0258959\n", + "[921]\tvalid_0's rmse: 0.0258954\n", + "[922]\tvalid_0's rmse: 0.0258947\n", + "[923]\tvalid_0's rmse: 0.0258946\n", + "[924]\tvalid_0's rmse: 0.0258931\n", + "[925]\tvalid_0's rmse: 0.0258945\n", + "[926]\tvalid_0's rmse: 0.0258925\n", + "[927]\tvalid_0's rmse: 0.0258899\n", + "[928]\tvalid_0's rmse: 0.0258898\n", + "[929]\tvalid_0's rmse: 0.0258914\n", + "[930]\tvalid_0's rmse: 0.0258912\n", + "[931]\tvalid_0's rmse: 0.025892\n", + "[932]\tvalid_0's rmse: 0.025893\n", + "[933]\tvalid_0's rmse: 0.0258918\n", + "[934]\tvalid_0's rmse: 0.0258882\n", + "[935]\tvalid_0's rmse: 0.0258882\n", + "[936]\tvalid_0's rmse: 0.0258871\n", + "[937]\tvalid_0's rmse: 0.0258879\n", + "[938]\tvalid_0's rmse: 0.0258857\n", + "[939]\tvalid_0's rmse: 0.0258855\n", + "[940]\tvalid_0's rmse: 0.0258856\n", + "[941]\tvalid_0's rmse: 0.0258855\n", + "[942]\tvalid_0's rmse: 0.0258857\n", + "[943]\tvalid_0's rmse: 0.0258857\n", + "[944]\tvalid_0's rmse: 0.0258861\n", + "[945]\tvalid_0's rmse: 0.0258858\n", + "[946]\tvalid_0's rmse: 0.0258865\n", + "[947]\tvalid_0's rmse: 0.0258875\n", + "[948]\tvalid_0's rmse: 0.0258872\n", + "[949]\tvalid_0's rmse: 0.0258872\n", + "[950]\tvalid_0's rmse: 0.0258866\n", + "[951]\tvalid_0's rmse: 0.0258888\n", + "[952]\tvalid_0's rmse: 0.0258892\n", + "[953]\tvalid_0's rmse: 0.0258835\n", + "[954]\tvalid_0's rmse: 0.0258817\n", + "[955]\tvalid_0's rmse: 0.0258817\n", + "[956]\tvalid_0's rmse: 0.0258786\n", + "[957]\tvalid_0's rmse: 0.0258788\n", + "[958]\tvalid_0's rmse: 0.0258788\n", + "[959]\tvalid_0's rmse: 0.0258798\n", + "[960]\tvalid_0's rmse: 0.0258797\n", + "[961]\tvalid_0's rmse: 0.0258797\n", + "[962]\tvalid_0's rmse: 0.0258776\n", + "[963]\tvalid_0's rmse: 0.0258773\n", + "[964]\tvalid_0's rmse: 0.025877\n", + "[965]\tvalid_0's rmse: 0.0258773\n", + "[966]\tvalid_0's rmse: 0.025879\n", + "[967]\tvalid_0's rmse: 0.0258802\n", + "[968]\tvalid_0's rmse: 0.0258794\n", + "[969]\tvalid_0's rmse: 0.02588\n", + "[970]\tvalid_0's rmse: 0.0258797\n", + "[971]\tvalid_0's rmse: 0.0258782\n", + "[972]\tvalid_0's rmse: 0.0258827\n", + "[973]\tvalid_0's rmse: 0.0258842\n", + "[974]\tvalid_0's rmse: 0.0258837\n", + "[975]\tvalid_0's rmse: 0.0258827\n", + "[976]\tvalid_0's rmse: 0.0258818\n", + "[977]\tvalid_0's rmse: 0.0258811\n", + "[978]\tvalid_0's rmse: 0.0258813\n", + "[979]\tvalid_0's rmse: 0.0258813\n", + "[980]\tvalid_0's rmse: 0.0258805\n", + "[981]\tvalid_0's rmse: 0.0258805\n", + "[982]\tvalid_0's rmse: 0.0258791\n", + "[983]\tvalid_0's rmse: 0.0258764\n", + "[984]\tvalid_0's rmse: 0.0258765\n", + "[985]\tvalid_0's rmse: 0.0258748\n", + "[986]\tvalid_0's rmse: 0.025877\n", + "[987]\tvalid_0's rmse: 0.025878\n", + "[988]\tvalid_0's rmse: 0.0258776\n", + "[989]\tvalid_0's rmse: 0.0258761\n", + "[990]\tvalid_0's rmse: 0.0258762\n", + "[991]\tvalid_0's rmse: 0.0258591\n", + "[992]\tvalid_0's rmse: 0.0258595\n", + "[993]\tvalid_0's rmse: 0.0258594\n", + "[994]\tvalid_0's rmse: 0.0258605\n", + "[995]\tvalid_0's rmse: 0.02586\n", + "[996]\tvalid_0's rmse: 0.0258582\n", + "[997]\tvalid_0's rmse: 0.0258576\n", + "[998]\tvalid_0's rmse: 0.0258556\n", + "[999]\tvalid_0's rmse: 0.0258562\n", + "[1000]\tvalid_0's rmse: 0.0258543\n", + "[1001]\tvalid_0's rmse: 0.0258523\n", + "[1002]\tvalid_0's rmse: 0.0258534\n", + "[1003]\tvalid_0's rmse: 0.0258537\n", + "[1004]\tvalid_0's rmse: 0.0258546\n", + "[1005]\tvalid_0's rmse: 0.0258533\n", + "[1006]\tvalid_0's rmse: 0.0258519\n", + "[1007]\tvalid_0's rmse: 0.0258508\n", + "[1008]\tvalid_0's rmse: 0.0258508\n", + "[1009]\tvalid_0's rmse: 0.0258509\n", + "[1010]\tvalid_0's rmse: 0.0258469\n", + "[1011]\tvalid_0's rmse: 0.025851\n", + "[1012]\tvalid_0's rmse: 0.0258512\n", + "[1013]\tvalid_0's rmse: 0.0258474\n", + "[1014]\tvalid_0's rmse: 0.0258468\n", + "[1015]\tvalid_0's rmse: 0.0258432\n", + "[1016]\tvalid_0's rmse: 0.0258409\n", + "[1017]\tvalid_0's rmse: 0.0258283\n", + "[1018]\tvalid_0's rmse: 0.0258284\n", + "[1019]\tvalid_0's rmse: 0.0258254\n", + "[1020]\tvalid_0's rmse: 0.0258244\n", + "[1021]\tvalid_0's rmse: 0.0258246\n", + "[1022]\tvalid_0's rmse: 0.0258249\n", + "[1023]\tvalid_0's rmse: 0.0258246\n", + "[1024]\tvalid_0's rmse: 0.0258215\n", + "[1025]\tvalid_0's rmse: 0.0258211\n", + "[1026]\tvalid_0's rmse: 0.0258215\n", + "[1027]\tvalid_0's rmse: 0.0258213\n", + "[1028]\tvalid_0's rmse: 0.0258215\n", + "[1029]\tvalid_0's rmse: 0.0258233\n", + "[1030]\tvalid_0's rmse: 0.0258232\n", + "[1031]\tvalid_0's rmse: 0.0258233\n", + "[1032]\tvalid_0's rmse: 0.0258191\n", + "[1033]\tvalid_0's rmse: 0.0258196\n", + "[1034]\tvalid_0's rmse: 0.0258169\n", + "[1035]\tvalid_0's rmse: 0.025816\n", + "[1036]\tvalid_0's rmse: 0.0258137\n", + "[1037]\tvalid_0's rmse: 0.0258143\n", + "[1038]\tvalid_0's rmse: 0.0258121\n", + "[1039]\tvalid_0's rmse: 0.0258055\n", + "[1040]\tvalid_0's rmse: 0.0258055\n", + "[1041]\tvalid_0's rmse: 0.0258079\n", + "[1042]\tvalid_0's rmse: 0.0258097\n", + "[1043]\tvalid_0's rmse: 0.0258097\n", + "[1044]\tvalid_0's rmse: 0.0258109\n", + "[1045]\tvalid_0's rmse: 0.0258118\n", + "[1046]\tvalid_0's rmse: 0.0258121\n", + "[1047]\tvalid_0's rmse: 0.0258112\n", + "[1048]\tvalid_0's rmse: 0.0258103\n", + "[1049]\tvalid_0's rmse: 0.0258102\n", + "[1050]\tvalid_0's rmse: 0.0258113\n", + "[1051]\tvalid_0's rmse: 0.0258119\n", + "[1052]\tvalid_0's rmse: 0.0258115\n", + "[1053]\tvalid_0's rmse: 0.0258116\n", + "[1054]\tvalid_0's rmse: 0.0258114\n", + "[1055]\tvalid_0's rmse: 0.0258098\n", + "[1056]\tvalid_0's rmse: 0.0258097\n", + "[1057]\tvalid_0's rmse: 0.0258085\n", + "[1058]\tvalid_0's rmse: 0.0258088\n", + "[1059]\tvalid_0's rmse: 0.0258058\n", + "[1060]\tvalid_0's rmse: 0.0258033\n", + "[1061]\tvalid_0's rmse: 0.0257999\n", + "[1062]\tvalid_0's rmse: 0.025795\n", + "[1063]\tvalid_0's rmse: 0.0257936\n", + "[1064]\tvalid_0's rmse: 0.0257928\n", + "[1065]\tvalid_0's rmse: 0.025793\n", + "[1066]\tvalid_0's rmse: 0.0257934\n", + "[1067]\tvalid_0's rmse: 0.0257928\n", + "[1068]\tvalid_0's rmse: 0.0257786\n", + "[1069]\tvalid_0's rmse: 0.0257783\n", + "[1070]\tvalid_0's rmse: 0.0257778\n", + "[1071]\tvalid_0's rmse: 0.025777\n", + "[1072]\tvalid_0's rmse: 0.0257782\n", + "[1073]\tvalid_0's rmse: 0.0257767\n", + "[1074]\tvalid_0's rmse: 0.0257763\n", + "[1075]\tvalid_0's rmse: 0.0257764\n", + "[1076]\tvalid_0's rmse: 0.025776\n", + "[1077]\tvalid_0's rmse: 0.0257776\n", + "[1078]\tvalid_0's rmse: 0.0257782\n", + "[1079]\tvalid_0's rmse: 0.0257782\n", + "[1080]\tvalid_0's rmse: 0.0257781\n", + "[1081]\tvalid_0's rmse: 0.025776\n", + "[1082]\tvalid_0's rmse: 0.0257761\n", + "[1083]\tvalid_0's rmse: 0.0257762\n", + "[1084]\tvalid_0's rmse: 0.0257773\n", + "[1085]\tvalid_0's rmse: 0.0257783\n", + "[1086]\tvalid_0's rmse: 0.0257785\n", + "[1087]\tvalid_0's rmse: 0.0257788\n", + "[1088]\tvalid_0's rmse: 0.0257792\n", + "[1089]\tvalid_0's rmse: 0.02578\n", + "[1090]\tvalid_0's rmse: 0.0257788\n", + "[1091]\tvalid_0's rmse: 0.0257776\n", + "[1092]\tvalid_0's rmse: 0.0257795\n", + "[1093]\tvalid_0's rmse: 0.0257788\n", + "[1094]\tvalid_0's rmse: 0.0257782\n", + "[1095]\tvalid_0's rmse: 0.025778\n", + "[1096]\tvalid_0's rmse: 0.0257811\n", + "[1097]\tvalid_0's rmse: 0.0257814\n", + "[1098]\tvalid_0's rmse: 0.0257792\n", + "[1099]\tvalid_0's rmse: 0.0257788\n", + "[1100]\tvalid_0's rmse: 0.0257798\n", + "[1101]\tvalid_0's rmse: 0.0257804\n", + "[1102]\tvalid_0's rmse: 0.0257804\n", + "[1103]\tvalid_0's rmse: 0.0257781\n", + "[1104]\tvalid_0's rmse: 0.0257786\n", + "[1105]\tvalid_0's rmse: 0.0257794\n", + "[1106]\tvalid_0's rmse: 0.0257793\n", + "[1107]\tvalid_0's rmse: 0.0257795\n", + "[1108]\tvalid_0's rmse: 0.0257792\n", + "[1109]\tvalid_0's rmse: 0.0257754\n", + "[1110]\tvalid_0's rmse: 0.0257772\n", + "[1111]\tvalid_0's rmse: 0.0257766\n", + "[1112]\tvalid_0's rmse: 0.0257761\n", + "[1113]\tvalid_0's rmse: 0.0257759\n", + "[1114]\tvalid_0's rmse: 0.0257754\n", + "[1115]\tvalid_0's rmse: 0.0257751\n", + "[1116]\tvalid_0's rmse: 0.0257731\n", + "[1117]\tvalid_0's rmse: 0.0257728\n", + "[1118]\tvalid_0's rmse: 0.0257725\n", + "[1119]\tvalid_0's rmse: 0.025771\n", + "[1120]\tvalid_0's rmse: 0.0257698\n", + "[1121]\tvalid_0's rmse: 0.0257699\n", + "[1122]\tvalid_0's rmse: 0.0257698\n", + "[1123]\tvalid_0's rmse: 0.0257685\n", + "[1124]\tvalid_0's rmse: 0.0257678\n", + "[1125]\tvalid_0's rmse: 0.0257679\n", + "[1126]\tvalid_0's rmse: 0.0257667\n", + "[1127]\tvalid_0's rmse: 0.0257669\n", + "[1128]\tvalid_0's rmse: 0.0257648\n", + "[1129]\tvalid_0's rmse: 0.0257647\n", + "[1130]\tvalid_0's rmse: 0.0257651\n", + "[1131]\tvalid_0's rmse: 0.0257653\n", + "[1132]\tvalid_0's rmse: 0.0257657\n", + "[1133]\tvalid_0's rmse: 0.0257652\n", + "[1134]\tvalid_0's rmse: 0.0257653\n", + "[1135]\tvalid_0's rmse: 0.0257593\n", + "[1136]\tvalid_0's rmse: 0.0257585\n", + "[1137]\tvalid_0's rmse: 0.0257583\n", + "[1138]\tvalid_0's rmse: 0.0257575\n", + "[1139]\tvalid_0's rmse: 0.0257571\n", + "[1140]\tvalid_0's rmse: 0.0257562\n", + "[1141]\tvalid_0's rmse: 0.0257562\n", + "[1142]\tvalid_0's rmse: 0.0257561\n", + "[1143]\tvalid_0's rmse: 0.025755\n", + "[1144]\tvalid_0's rmse: 0.025754\n", + "[1145]\tvalid_0's rmse: 0.0257534\n", + "[1146]\tvalid_0's rmse: 0.0257535\n", + "[1147]\tvalid_0's rmse: 0.0257503\n", + "[1148]\tvalid_0's rmse: 0.0257519\n", + "[1149]\tvalid_0's rmse: 0.0257486\n", + "[1150]\tvalid_0's rmse: 0.0257485\n", + "[1151]\tvalid_0's rmse: 0.0257492\n", + "[1152]\tvalid_0's rmse: 0.0257531\n", + "[1153]\tvalid_0's rmse: 0.0257529\n", + "[1154]\tvalid_0's rmse: 0.0257521\n", + "[1155]\tvalid_0's rmse: 0.0257517\n", + "[1156]\tvalid_0's rmse: 0.0257545\n", + "[1157]\tvalid_0's rmse: 0.0257556\n", + "[1158]\tvalid_0's rmse: 0.0257559\n", + "[1159]\tvalid_0's rmse: 0.0257578\n", + "[1160]\tvalid_0's rmse: 0.0257567\n", + "[1161]\tvalid_0's rmse: 0.0257569\n", + "[1162]\tvalid_0's rmse: 0.0257559\n", + "[1163]\tvalid_0's rmse: 0.0257577\n", + "[1164]\tvalid_0's rmse: 0.0257551\n", + "[1165]\tvalid_0's rmse: 0.025756\n", + "[1166]\tvalid_0's rmse: 0.0257558\n", + "[1167]\tvalid_0's rmse: 0.0257561\n", + "[1168]\tvalid_0's rmse: 0.0257562\n", + "[1169]\tvalid_0's rmse: 0.0257558\n", + "[1170]\tvalid_0's rmse: 0.0257527\n", + "[1171]\tvalid_0's rmse: 0.0257479\n", + "[1172]\tvalid_0's rmse: 0.0257481\n", + "[1173]\tvalid_0's rmse: 0.0257445\n", + "[1174]\tvalid_0's rmse: 0.0257442\n", + "[1175]\tvalid_0's rmse: 0.0257454\n", + "[1176]\tvalid_0's rmse: 0.0257446\n", + "[1177]\tvalid_0's rmse: 0.0257455\n", + "[1178]\tvalid_0's rmse: 0.0257465\n", + "[1179]\tvalid_0's rmse: 0.0257483\n", + "[1180]\tvalid_0's rmse: 0.0257494\n", + "[1181]\tvalid_0's rmse: 0.025749\n", + "[1182]\tvalid_0's rmse: 0.0257492\n", + "[1183]\tvalid_0's rmse: 0.0257497\n", + "[1184]\tvalid_0's rmse: 0.02575\n", + "[1185]\tvalid_0's rmse: 0.0257441\n", + "[1186]\tvalid_0's rmse: 0.0257412\n", + "[1187]\tvalid_0's rmse: 0.0257376\n", + "[1188]\tvalid_0's rmse: 0.025734\n", + "[1189]\tvalid_0's rmse: 0.0257333\n", + "[1190]\tvalid_0's rmse: 0.0257326\n", + "[1191]\tvalid_0's rmse: 0.0257325\n", + "[1192]\tvalid_0's rmse: 0.0257347\n", + "[1193]\tvalid_0's rmse: 0.0257189\n", + "[1194]\tvalid_0's rmse: 0.0257085\n", + "[1195]\tvalid_0's rmse: 0.0257073\n", + "[1196]\tvalid_0's rmse: 0.025707\n", + "[1197]\tvalid_0's rmse: 0.0257055\n", + "[1198]\tvalid_0's rmse: 0.0257056\n", + "[1199]\tvalid_0's rmse: 0.0257043\n", + "[1200]\tvalid_0's rmse: 0.0257063\n", + "[1201]\tvalid_0's rmse: 0.0257056\n", + "[1202]\tvalid_0's rmse: 0.0257059\n", + "[1203]\tvalid_0's rmse: 0.0257041\n", + "[1204]\tvalid_0's rmse: 0.0257018\n", + "[1205]\tvalid_0's rmse: 0.025702\n", + "[1206]\tvalid_0's rmse: 0.0257017\n", + "[1207]\tvalid_0's rmse: 0.0256966\n", + "[1208]\tvalid_0's rmse: 0.0256931\n", + "[1209]\tvalid_0's rmse: 0.0256931\n", + "[1210]\tvalid_0's rmse: 0.025693\n", + "[1211]\tvalid_0's rmse: 0.0256934\n", + "[1212]\tvalid_0's rmse: 0.0256969\n", + "[1213]\tvalid_0's rmse: 0.0256973\n", + "[1214]\tvalid_0's rmse: 0.0256982\n", + "[1215]\tvalid_0's rmse: 0.0256965\n", + "[1216]\tvalid_0's rmse: 0.0256955\n", + "[1217]\tvalid_0's rmse: 0.0256956\n", + "[1218]\tvalid_0's rmse: 0.0256956\n", + "[1219]\tvalid_0's rmse: 0.0256943\n", + "[1220]\tvalid_0's rmse: 0.0256932\n", + "[1221]\tvalid_0's rmse: 0.0256944\n", + "[1222]\tvalid_0's rmse: 0.0256935\n", + "[1223]\tvalid_0's rmse: 0.0256947\n", + "[1224]\tvalid_0's rmse: 0.0256951\n", + "[1225]\tvalid_0's rmse: 0.0256953\n", + "[1226]\tvalid_0's rmse: 0.0256967\n", + "[1227]\tvalid_0's rmse: 0.0256974\n", + "[1228]\tvalid_0's rmse: 0.0256971\n", + "[1229]\tvalid_0's rmse: 0.025697\n", + "[1230]\tvalid_0's rmse: 0.0256973\n", + "[1231]\tvalid_0's rmse: 0.0256971\n", + "[1232]\tvalid_0's rmse: 0.0256976\n", + "[1233]\tvalid_0's rmse: 0.0256976\n", + "[1234]\tvalid_0's rmse: 0.025696\n", + "[1235]\tvalid_0's rmse: 0.0256965\n", + "[1236]\tvalid_0's rmse: 0.0256961\n", + "[1237]\tvalid_0's rmse: 0.0256962\n", + "[1238]\tvalid_0's rmse: 0.0256996\n", + "[1239]\tvalid_0's rmse: 0.0257003\n", + "[1240]\tvalid_0's rmse: 0.0257023\n", + "[1241]\tvalid_0's rmse: 0.0257018\n", + "[1242]\tvalid_0's rmse: 0.0257016\n", + "[1243]\tvalid_0's rmse: 0.0257023\n", + "[1244]\tvalid_0's rmse: 0.0257013\n", + "[1245]\tvalid_0's rmse: 0.0256968\n", + "[1246]\tvalid_0's rmse: 0.0256967\n", + "[1247]\tvalid_0's rmse: 0.0256935\n", + "[1248]\tvalid_0's rmse: 0.0256932\n", + "[1249]\tvalid_0's rmse: 0.0256959\n", + "[1250]\tvalid_0's rmse: 0.025695\n", + "[1251]\tvalid_0's rmse: 0.025695\n", + "[1252]\tvalid_0's rmse: 0.0256954\n", + "[1253]\tvalid_0's rmse: 0.0256932\n", + "[1254]\tvalid_0's rmse: 0.0256933\n", + "[1255]\tvalid_0's rmse: 0.0256942\n", + "[1256]\tvalid_0's rmse: 0.0256929\n", + "[1257]\tvalid_0's rmse: 0.0256918\n", + "[1258]\tvalid_0's rmse: 0.0256916\n", + "[1259]\tvalid_0's rmse: 0.0256913\n", + "[1260]\tvalid_0's rmse: 0.0256924\n", + "[1261]\tvalid_0's rmse: 0.0256909\n", + "[1262]\tvalid_0's rmse: 0.0256907\n", + "[1263]\tvalid_0's rmse: 0.0256914\n", + "[1264]\tvalid_0's rmse: 0.0256819\n", + "[1265]\tvalid_0's rmse: 0.0256823\n", + "[1266]\tvalid_0's rmse: 0.0256822\n", + "[1267]\tvalid_0's rmse: 0.0256828\n", + "[1268]\tvalid_0's rmse: 0.025683\n", + "[1269]\tvalid_0's rmse: 0.0256841\n", + "[1270]\tvalid_0's rmse: 0.0256839\n", + "[1271]\tvalid_0's rmse: 0.0256837\n", + "[1272]\tvalid_0's rmse: 0.0256835\n", + "[1273]\tvalid_0's rmse: 0.0256819\n", + "[1274]\tvalid_0's rmse: 0.0256814\n", + "[1275]\tvalid_0's rmse: 0.0256859\n", + "[1276]\tvalid_0's rmse: 0.0256845\n", + "[1277]\tvalid_0's rmse: 0.0256854\n", + "[1278]\tvalid_0's rmse: 0.0256899\n", + "[1279]\tvalid_0's rmse: 0.0256912\n", + "[1280]\tvalid_0's rmse: 0.0256951\n", + "[1281]\tvalid_0's rmse: 0.0256952\n", + "[1282]\tvalid_0's rmse: 0.0256956\n", + "[1283]\tvalid_0's rmse: 0.0256958\n", + "[1284]\tvalid_0's rmse: 0.0256956\n", + "[1285]\tvalid_0's rmse: 0.025695\n", + "[1286]\tvalid_0's rmse: 0.0256955\n", + "[1287]\tvalid_0's rmse: 0.0256955\n", + "[1288]\tvalid_0's rmse: 0.0256966\n", + "[1289]\tvalid_0's rmse: 0.0256969\n", + "[1290]\tvalid_0's rmse: 0.0256961\n", + "[1291]\tvalid_0's rmse: 0.0256955\n", + "[1292]\tvalid_0's rmse: 0.025695\n", + "[1293]\tvalid_0's rmse: 0.0256959\n", + "[1294]\tvalid_0's rmse: 0.0256953\n", + "[1295]\tvalid_0's rmse: 0.0256943\n", + "[1296]\tvalid_0's rmse: 0.0256935\n", + "[1297]\tvalid_0's rmse: 0.0256928\n", + "[1298]\tvalid_0's rmse: 0.0256922\n", + "[1299]\tvalid_0's rmse: 0.0256921\n", + "[1300]\tvalid_0's rmse: 0.0256929\n", + "[1301]\tvalid_0's rmse: 0.0256929\n", + "[1302]\tvalid_0's rmse: 0.0256922\n", + "[1303]\tvalid_0's rmse: 0.0256922\n", + "[1304]\tvalid_0's rmse: 0.0256903\n", + "[1305]\tvalid_0's rmse: 0.0256902\n", + "[1306]\tvalid_0's rmse: 0.025689\n", + "[1307]\tvalid_0's rmse: 0.0256867\n", + "[1308]\tvalid_0's rmse: 0.025687\n", + "[1309]\tvalid_0's rmse: 0.0256871\n", + "[1310]\tvalid_0's rmse: 0.0256871\n", + "[1311]\tvalid_0's rmse: 0.0256937\n", + "[1312]\tvalid_0's rmse: 0.0256927\n", + "[1313]\tvalid_0's rmse: 0.0256883\n", + "[1314]\tvalid_0's rmse: 0.0256881\n", + "[1315]\tvalid_0's rmse: 0.0256876\n", + "[1316]\tvalid_0's rmse: 0.0256871\n", + "[1317]\tvalid_0's rmse: 0.025685\n", + "[1318]\tvalid_0's rmse: 0.0256843\n", + "[1319]\tvalid_0's rmse: 0.0256852\n", + "[1320]\tvalid_0's rmse: 0.0256852\n", + "[1321]\tvalid_0's rmse: 0.0256852\n", + "[1322]\tvalid_0's rmse: 0.0256842\n", + "[1323]\tvalid_0's rmse: 0.0256825\n", + "[1324]\tvalid_0's rmse: 0.0256824\n", + "[1325]\tvalid_0's rmse: 0.0256792\n", + "[1326]\tvalid_0's rmse: 0.0256781\n", + "[1327]\tvalid_0's rmse: 0.0256776\n", + "[1328]\tvalid_0's rmse: 0.0256776\n", + "[1329]\tvalid_0's rmse: 0.0256782\n", + "[1330]\tvalid_0's rmse: 0.0256781\n", + "[1331]\tvalid_0's rmse: 0.0256777\n", + "[1332]\tvalid_0's rmse: 0.0256777\n", + "[1333]\tvalid_0's rmse: 0.0256772\n", + "[1334]\tvalid_0's rmse: 0.025677\n", + "[1335]\tvalid_0's rmse: 0.0256771\n", + "[1336]\tvalid_0's rmse: 0.0256768\n", + "[1337]\tvalid_0's rmse: 0.0256775\n", + "[1338]\tvalid_0's rmse: 0.0256776\n", + "[1339]\tvalid_0's rmse: 0.0256774\n", + "[1340]\tvalid_0's rmse: 0.0256753\n", + "[1341]\tvalid_0's rmse: 0.0256751\n", + "[1342]\tvalid_0's rmse: 0.0256747\n", + "[1343]\tvalid_0's rmse: 0.0256749\n", + "[1344]\tvalid_0's rmse: 0.0256746\n", + "[1345]\tvalid_0's rmse: 0.0256722\n", + "[1346]\tvalid_0's rmse: 0.0256697\n", + "[1347]\tvalid_0's rmse: 0.0256704\n", + "[1348]\tvalid_0's rmse: 0.0256681\n", + "[1349]\tvalid_0's rmse: 0.025668\n", + "[1350]\tvalid_0's rmse: 0.0256667\n", + "[1351]\tvalid_0's rmse: 0.0256684\n", + "[1352]\tvalid_0's rmse: 0.0256685\n", + "[1353]\tvalid_0's rmse: 0.0256673\n", + "[1354]\tvalid_0's rmse: 0.0256673\n", + "[1355]\tvalid_0's rmse: 0.025667\n", + "[1356]\tvalid_0's rmse: 0.0256675\n", + "[1357]\tvalid_0's rmse: 0.0256686\n", + "[1358]\tvalid_0's rmse: 0.0256681\n", + "[1359]\tvalid_0's rmse: 0.0256681\n", + "[1360]\tvalid_0's rmse: 0.0256682\n", + "[1361]\tvalid_0's rmse: 0.025668\n", + "[1362]\tvalid_0's rmse: 0.0256671\n", + "[1363]\tvalid_0's rmse: 0.0256675\n", + "[1364]\tvalid_0's rmse: 0.0256638\n", + "[1365]\tvalid_0's rmse: 0.0256638\n", + "[1366]\tvalid_0's rmse: 0.0256526\n", + "[1367]\tvalid_0's rmse: 0.0256534\n", + "[1368]\tvalid_0's rmse: 0.0256534\n", + "[1369]\tvalid_0's rmse: 0.025653\n", + "[1370]\tvalid_0's rmse: 0.0256528\n", + "[1371]\tvalid_0's rmse: 0.0256532\n", + "[1372]\tvalid_0's rmse: 0.025647\n", + "[1373]\tvalid_0's rmse: 0.0256454\n", + "[1374]\tvalid_0's rmse: 0.0256457\n", + "[1375]\tvalid_0's rmse: 0.0256426\n", + "[1376]\tvalid_0's rmse: 0.0256425\n", + "[1377]\tvalid_0's rmse: 0.0256441\n", + "[1378]\tvalid_0's rmse: 0.0256431\n", + "[1379]\tvalid_0's rmse: 0.0256452\n", + "[1380]\tvalid_0's rmse: 0.0256455\n", + "[1381]\tvalid_0's rmse: 0.0256454\n", + "[1382]\tvalid_0's rmse: 0.0256441\n", + "[1383]\tvalid_0's rmse: 0.0256446\n", + "[1384]\tvalid_0's rmse: 0.0256443\n", + "[1385]\tvalid_0's rmse: 0.0256444\n", + "[1386]\tvalid_0's rmse: 0.0256445\n", + "[1387]\tvalid_0's rmse: 0.0256436\n", + "[1388]\tvalid_0's rmse: 0.0256418\n", + "[1389]\tvalid_0's rmse: 0.0256422\n", + "[1390]\tvalid_0's rmse: 0.0256363\n", + "[1391]\tvalid_0's rmse: 0.0256359\n", + "[1392]\tvalid_0's rmse: 0.0256348\n", + "[1393]\tvalid_0's rmse: 0.0256345\n", + "[1394]\tvalid_0's rmse: 0.0256347\n", + "[1395]\tvalid_0's rmse: 0.025635\n", + "[1396]\tvalid_0's rmse: 0.0256333\n", + "[1397]\tvalid_0's rmse: 0.025633\n", + "[1398]\tvalid_0's rmse: 0.025633\n", + "[1399]\tvalid_0's rmse: 0.0256312\n", + "[1400]\tvalid_0's rmse: 0.025631\n", + "[1401]\tvalid_0's rmse: 0.025631\n", + "[1402]\tvalid_0's rmse: 0.0256313\n", + "[1403]\tvalid_0's rmse: 0.025627\n", + "[1404]\tvalid_0's rmse: 0.0256275\n", + "[1405]\tvalid_0's rmse: 0.0256277\n", + "[1406]\tvalid_0's rmse: 0.0256274\n", + "[1407]\tvalid_0's rmse: 0.0256277\n", + "[1408]\tvalid_0's rmse: 0.0256266\n", + "[1409]\tvalid_0's rmse: 0.025626\n", + "[1410]\tvalid_0's rmse: 0.0256258\n", + "[1411]\tvalid_0's rmse: 0.0256246\n", + "[1412]\tvalid_0's rmse: 0.0256245\n", + "[1413]\tvalid_0's rmse: 0.0256243\n", + "[1414]\tvalid_0's rmse: 0.0256237\n", + "[1415]\tvalid_0's rmse: 0.0256244\n", + "[1416]\tvalid_0's rmse: 0.0256238\n", + "[1417]\tvalid_0's rmse: 0.0256171\n", + "[1418]\tvalid_0's rmse: 0.0256115\n", + "[1419]\tvalid_0's rmse: 0.0256106\n", + "[1420]\tvalid_0's rmse: 0.0256105\n", + "[1421]\tvalid_0's rmse: 0.02561\n", + "[1422]\tvalid_0's rmse: 0.0256113\n", + "[1423]\tvalid_0's rmse: 0.0256111\n", + "[1424]\tvalid_0's rmse: 0.025611\n", + "[1425]\tvalid_0's rmse: 0.0256113\n", + "[1426]\tvalid_0's rmse: 0.0256108\n", + "[1427]\tvalid_0's rmse: 0.0256105\n", + "[1428]\tvalid_0's rmse: 0.0256095\n", + "[1429]\tvalid_0's rmse: 0.0256065\n", + "[1430]\tvalid_0's rmse: 0.0256062\n", + "[1431]\tvalid_0's rmse: 0.025607\n", + "[1432]\tvalid_0's rmse: 0.0256074\n", + "[1433]\tvalid_0's rmse: 0.025607\n", + "[1434]\tvalid_0's rmse: 0.0256081\n", + "[1435]\tvalid_0's rmse: 0.0256045\n", + "[1436]\tvalid_0's rmse: 0.0256057\n", + "[1437]\tvalid_0's rmse: 0.0256067\n", + "[1438]\tvalid_0's rmse: 0.0256063\n", + "[1439]\tvalid_0's rmse: 0.0256066\n", + "[1440]\tvalid_0's rmse: 0.0256061\n", + "[1441]\tvalid_0's rmse: 0.025605\n", + "[1442]\tvalid_0's rmse: 0.0256045\n", + "[1443]\tvalid_0's rmse: 0.0256032\n", + "[1444]\tvalid_0's rmse: 0.0256063\n", + "[1445]\tvalid_0's rmse: 0.0256076\n", + "[1446]\tvalid_0's rmse: 0.025608\n", + "[1447]\tvalid_0's rmse: 0.0256077\n", + "[1448]\tvalid_0's rmse: 0.0256093\n", + "[1449]\tvalid_0's rmse: 0.0256077\n", + "[1450]\tvalid_0's rmse: 0.0256074\n", + "[1451]\tvalid_0's rmse: 0.0256078\n", + "[1452]\tvalid_0's rmse: 0.025608\n", + "[1453]\tvalid_0's rmse: 0.0256081\n", + "[1454]\tvalid_0's rmse: 0.0256081\n", + "[1455]\tvalid_0's rmse: 0.0256079\n", + "[1456]\tvalid_0's rmse: 0.0256087\n", + "[1457]\tvalid_0's rmse: 0.0256062\n", + "[1458]\tvalid_0's rmse: 0.025602\n", + "[1459]\tvalid_0's rmse: 0.0256021\n", + "[1460]\tvalid_0's rmse: 0.0256041\n", + "[1461]\tvalid_0's rmse: 0.0256042\n", + "[1462]\tvalid_0's rmse: 0.025605\n", + "[1463]\tvalid_0's rmse: 0.0256056\n", + "[1464]\tvalid_0's rmse: 0.0256053\n", + "[1465]\tvalid_0's rmse: 0.0256077\n", + "[1466]\tvalid_0's rmse: 0.0256076\n", + "[1467]\tvalid_0's rmse: 0.0256083\n", + "[1468]\tvalid_0's rmse: 0.0256082\n", + "[1469]\tvalid_0's rmse: 0.0256074\n", + "[1470]\tvalid_0's rmse: 0.0256074\n", + "[1471]\tvalid_0's rmse: 0.025608\n", + "[1472]\tvalid_0's rmse: 0.0256081\n", + "[1473]\tvalid_0's rmse: 0.0256084\n", + "[1474]\tvalid_0's rmse: 0.0256081\n", + "[1475]\tvalid_0's rmse: 0.0256084\n", + "[1476]\tvalid_0's rmse: 0.0256083\n", + "[1477]\tvalid_0's rmse: 0.0256086\n", + "[1478]\tvalid_0's rmse: 0.0256084\n", + "[1479]\tvalid_0's rmse: 0.025608\n", + "[1480]\tvalid_0's rmse: 0.02561\n", + "[1481]\tvalid_0's rmse: 0.0256062\n", + "[1482]\tvalid_0's rmse: 0.0256062\n", + "[1483]\tvalid_0's rmse: 0.0256062\n", + "[1484]\tvalid_0's rmse: 0.0256056\n", + "[1485]\tvalid_0's rmse: 0.0256048\n", + "[1486]\tvalid_0's rmse: 0.0256054\n", + "[1487]\tvalid_0's rmse: 0.025605\n", + "[1488]\tvalid_0's rmse: 0.0256026\n", + "[1489]\tvalid_0's rmse: 0.0255999\n", + "[1490]\tvalid_0's rmse: 0.0255993\n", + "[1491]\tvalid_0's rmse: 0.0255995\n", + "[1492]\tvalid_0's rmse: 0.0256009\n", + "[1493]\tvalid_0's rmse: 0.0256006\n", + "[1494]\tvalid_0's rmse: 0.0256027\n", + "[1495]\tvalid_0's rmse: 0.0256021\n", + "[1496]\tvalid_0's rmse: 0.0256017\n", + "[1497]\tvalid_0's rmse: 0.0256016\n", + "[1498]\tvalid_0's rmse: 0.0256018\n", + "[1499]\tvalid_0's rmse: 0.0256011\n", + "[1500]\tvalid_0's rmse: 0.025602\n", + "[1501]\tvalid_0's rmse: 0.0256019\n", + "[1502]\tvalid_0's rmse: 0.025602\n", + "[1503]\tvalid_0's rmse: 0.0256027\n", + "[1504]\tvalid_0's rmse: 0.0255921\n", + "[1505]\tvalid_0's rmse: 0.0255919\n", + "[1506]\tvalid_0's rmse: 0.025592\n", + "[1507]\tvalid_0's rmse: 0.0255918\n", + "[1508]\tvalid_0's rmse: 0.0255914\n", + "[1509]\tvalid_0's rmse: 0.0255913\n", + "[1510]\tvalid_0's rmse: 0.0255907\n", + "[1511]\tvalid_0's rmse: 0.0255905\n", + "[1512]\tvalid_0's rmse: 0.0255883\n", + "[1513]\tvalid_0's rmse: 0.0255877\n", + "[1514]\tvalid_0's rmse: 0.025587\n", + "[1515]\tvalid_0's rmse: 0.0255873\n", + "[1516]\tvalid_0's rmse: 0.025587\n", + "[1517]\tvalid_0's rmse: 0.0255872\n", + "[1518]\tvalid_0's rmse: 0.0255876\n", + "[1519]\tvalid_0's rmse: 0.0255883\n", + "[1520]\tvalid_0's rmse: 0.0255884\n", + "[1521]\tvalid_0's rmse: 0.0255852\n", + "[1522]\tvalid_0's rmse: 0.0255853\n", + "[1523]\tvalid_0's rmse: 0.0255852\n", + "[1524]\tvalid_0's rmse: 0.0255875\n", + "[1525]\tvalid_0's rmse: 0.025588\n", + "[1526]\tvalid_0's rmse: 0.0255894\n", + "[1527]\tvalid_0's rmse: 0.0255891\n", + "[1528]\tvalid_0's rmse: 0.0255891\n", + "[1529]\tvalid_0's rmse: 0.0255892\n", + "[1530]\tvalid_0's rmse: 0.0255908\n", + "[1531]\tvalid_0's rmse: 0.0255902\n", + "[1532]\tvalid_0's rmse: 0.0255903\n", + "[1533]\tvalid_0's rmse: 0.0255905\n", + "[1534]\tvalid_0's rmse: 0.0255906\n", + "[1535]\tvalid_0's rmse: 0.0255913\n", + "[1536]\tvalid_0's rmse: 0.0255906\n", + "[1537]\tvalid_0's rmse: 0.0255919\n", + "[1538]\tvalid_0's rmse: 0.0255919\n", + "[1539]\tvalid_0's rmse: 0.0255936\n", + "[1540]\tvalid_0's rmse: 0.025594\n", + "[1541]\tvalid_0's rmse: 0.0255927\n", + "[1542]\tvalid_0's rmse: 0.0255924\n", + "[1543]\tvalid_0's rmse: 0.0255929\n", + "[1544]\tvalid_0's rmse: 0.0255937\n", + "[1545]\tvalid_0's rmse: 0.0255927\n", + "[1546]\tvalid_0's rmse: 0.025592\n", + "[1547]\tvalid_0's rmse: 0.0255914\n", + "[1548]\tvalid_0's rmse: 0.0255914\n", + "[1549]\tvalid_0's rmse: 0.0255913\n", + "[1550]\tvalid_0's rmse: 0.0255909\n", + "[1551]\tvalid_0's rmse: 0.0255915\n", + "[1552]\tvalid_0's rmse: 0.0255916\n", + "[1553]\tvalid_0's rmse: 0.0255916\n", + "[1554]\tvalid_0's rmse: 0.0255915\n", + "[1555]\tvalid_0's rmse: 0.0255921\n", + "[1556]\tvalid_0's rmse: 0.0255909\n", + "[1557]\tvalid_0's rmse: 0.0255908\n", + "[1558]\tvalid_0's rmse: 0.0255916\n", + "[1559]\tvalid_0's rmse: 0.0255904\n", + "[1560]\tvalid_0's rmse: 0.0255898\n", + "[1561]\tvalid_0's rmse: 0.0255908\n", + "[1562]\tvalid_0's rmse: 0.0255909\n", + "[1563]\tvalid_0's rmse: 0.0255911\n", + "[1564]\tvalid_0's rmse: 0.0255908\n", + "[1565]\tvalid_0's rmse: 0.0255928\n", + "[1566]\tvalid_0's rmse: 0.0255909\n", + "[1567]\tvalid_0's rmse: 0.0255908\n", + "[1568]\tvalid_0's rmse: 0.0255925\n", + "[1569]\tvalid_0's rmse: 0.0255903\n", + "[1570]\tvalid_0's rmse: 0.0255904\n", + "[1571]\tvalid_0's rmse: 0.0255902\n", + "[1572]\tvalid_0's rmse: 0.0255895\n", + "[1573]\tvalid_0's rmse: 0.0255941\n", + "[1574]\tvalid_0's rmse: 0.025596\n", + "[1575]\tvalid_0's rmse: 0.0255966\n", + "[1576]\tvalid_0's rmse: 0.0255966\n", + "[1577]\tvalid_0's rmse: 0.0255965\n", + "[1578]\tvalid_0's rmse: 0.0255957\n", + "[1579]\tvalid_0's rmse: 0.0255949\n", + "[1580]\tvalid_0's rmse: 0.0255931\n", + "[1581]\tvalid_0's rmse: 0.0255936\n", + "[1582]\tvalid_0's rmse: 0.0255936\n", + "[1583]\tvalid_0's rmse: 0.0255941\n", + "[1584]\tvalid_0's rmse: 0.0255942\n", + "[1585]\tvalid_0's rmse: 0.0255976\n", + "[1586]\tvalid_0's rmse: 0.0255974\n", + "[1587]\tvalid_0's rmse: 0.0255956\n", + "[1588]\tvalid_0's rmse: 0.025595\n", + "[1589]\tvalid_0's rmse: 0.0255943\n", + "[1590]\tvalid_0's rmse: 0.0255946\n", + "[1591]\tvalid_0's rmse: 0.0255945\n", + "[1592]\tvalid_0's rmse: 0.0255938\n", + "[1593]\tvalid_0's rmse: 0.0255907\n", + "[1594]\tvalid_0's rmse: 0.0255832\n", + "[1595]\tvalid_0's rmse: 0.0255833\n", + "[1596]\tvalid_0's rmse: 0.0255824\n", + "[1597]\tvalid_0's rmse: 0.025583\n", + "[1598]\tvalid_0's rmse: 0.0255812\n", + "[1599]\tvalid_0's rmse: 0.0255811\n", + "[1600]\tvalid_0's rmse: 0.0255808\n", + "[1601]\tvalid_0's rmse: 0.0255761\n", + "[1602]\tvalid_0's rmse: 0.0255687\n", + "[1603]\tvalid_0's rmse: 0.0255698\n", + "[1604]\tvalid_0's rmse: 0.0255697\n", + "[1605]\tvalid_0's rmse: 0.0255691\n", + "[1606]\tvalid_0's rmse: 0.0255697\n", + "[1607]\tvalid_0's rmse: 0.0255554\n", + "[1608]\tvalid_0's rmse: 0.0255555\n", + "[1609]\tvalid_0's rmse: 0.0255572\n", + "[1610]\tvalid_0's rmse: 0.0255572\n", + "[1611]\tvalid_0's rmse: 0.0255571\n", + "[1612]\tvalid_0's rmse: 0.0255571\n", + "[1613]\tvalid_0's rmse: 0.0255573\n", + "[1614]\tvalid_0's rmse: 0.0255553\n", + "[1615]\tvalid_0's rmse: 0.0255563\n", + "[1616]\tvalid_0's rmse: 0.0255559\n", + "[1617]\tvalid_0's rmse: 0.0255553\n", + "[1618]\tvalid_0's rmse: 0.0255544\n", + "[1619]\tvalid_0's rmse: 0.0255544\n", + "[1620]\tvalid_0's rmse: 0.0255537\n", + "[1621]\tvalid_0's rmse: 0.0255486\n", + "[1622]\tvalid_0's rmse: 0.0255496\n", + "[1623]\tvalid_0's rmse: 0.0255495\n", + "[1624]\tvalid_0's rmse: 0.0255509\n", + "[1625]\tvalid_0's rmse: 0.0255513\n", + "[1626]\tvalid_0's rmse: 0.0255499\n", + "[1627]\tvalid_0's rmse: 0.0255497\n", + "[1628]\tvalid_0's rmse: 0.0255489\n", + "[1629]\tvalid_0's rmse: 0.0255457\n", + "[1630]\tvalid_0's rmse: 0.0255384\n", + "[1631]\tvalid_0's rmse: 0.0255383\n", + "[1632]\tvalid_0's rmse: 0.0255377\n", + "[1633]\tvalid_0's rmse: 0.025538\n", + "[1634]\tvalid_0's rmse: 0.0255383\n", + "[1635]\tvalid_0's rmse: 0.0255381\n", + "[1636]\tvalid_0's rmse: 0.0255379\n", + "[1637]\tvalid_0's rmse: 0.0255386\n", + "[1638]\tvalid_0's rmse: 0.0255391\n", + "[1639]\tvalid_0's rmse: 0.0255386\n", + "[1640]\tvalid_0's rmse: 0.0255322\n", + "[1641]\tvalid_0's rmse: 0.0255328\n", + "[1642]\tvalid_0's rmse: 0.0255273\n", + "[1643]\tvalid_0's rmse: 0.0255264\n", + "[1644]\tvalid_0's rmse: 0.0255262\n", + "[1645]\tvalid_0's rmse: 0.0255239\n", + "[1646]\tvalid_0's rmse: 0.0255234\n", + "[1647]\tvalid_0's rmse: 0.0255245\n", + "[1648]\tvalid_0's rmse: 0.0255188\n", + "[1649]\tvalid_0's rmse: 0.0255174\n", + "[1650]\tvalid_0's rmse: 0.0255231\n", + "[1651]\tvalid_0's rmse: 0.0255231\n", + "[1652]\tvalid_0's rmse: 0.0255237\n", + "[1653]\tvalid_0's rmse: 0.0255217\n", + "[1654]\tvalid_0's rmse: 0.025521\n", + "[1655]\tvalid_0's rmse: 0.0255201\n", + "[1656]\tvalid_0's rmse: 0.02552\n", + "[1657]\tvalid_0's rmse: 0.0255204\n", + "[1658]\tvalid_0's rmse: 0.0255194\n", + "[1659]\tvalid_0's rmse: 0.0255194\n", + "[1660]\tvalid_0's rmse: 0.0255194\n", + "[1661]\tvalid_0's rmse: 0.0255189\n", + "[1662]\tvalid_0's rmse: 0.0255192\n", + "[1663]\tvalid_0's rmse: 0.0255183\n", + "[1664]\tvalid_0's rmse: 0.0255186\n", + "[1665]\tvalid_0's rmse: 0.0255179\n", + "[1666]\tvalid_0's rmse: 0.0255182\n", + "[1667]\tvalid_0's rmse: 0.0255178\n", + "[1668]\tvalid_0's rmse: 0.0255175\n", + "[1669]\tvalid_0's rmse: 0.0255181\n", + "[1670]\tvalid_0's rmse: 0.0255179\n", + "[1671]\tvalid_0's rmse: 0.025517\n", + "[1672]\tvalid_0's rmse: 0.0255169\n", + "[1673]\tvalid_0's rmse: 0.0255012\n", + "[1674]\tvalid_0's rmse: 0.0255018\n", + "[1675]\tvalid_0's rmse: 0.0255017\n", + "[1676]\tvalid_0's rmse: 0.0255032\n", + "[1677]\tvalid_0's rmse: 0.0255028\n", + "[1678]\tvalid_0's rmse: 0.0255035\n", + "[1679]\tvalid_0's rmse: 0.0255038\n", + "[1680]\tvalid_0's rmse: 0.0255043\n", + "[1681]\tvalid_0's rmse: 0.0255043\n", + "[1682]\tvalid_0's rmse: 0.0255052\n", + "[1683]\tvalid_0's rmse: 0.0255043\n", + "[1684]\tvalid_0's rmse: 0.0255045\n", + "[1685]\tvalid_0's rmse: 0.0255044\n", + "[1686]\tvalid_0's rmse: 0.0255039\n", + "[1687]\tvalid_0's rmse: 0.0255027\n", + "[1688]\tvalid_0's rmse: 0.0255026\n", + "[1689]\tvalid_0's rmse: 0.0255028\n", + "[1690]\tvalid_0's rmse: 0.0255036\n", + "[1691]\tvalid_0's rmse: 0.0255024\n", + "[1692]\tvalid_0's rmse: 0.0255021\n", + "[1693]\tvalid_0's rmse: 0.0255018\n", + "[1694]\tvalid_0's rmse: 0.0255018\n", + "[1695]\tvalid_0's rmse: 0.0255012\n", + "[1696]\tvalid_0's rmse: 0.0255006\n", + "[1697]\tvalid_0's rmse: 0.0255006\n", + "[1698]\tvalid_0's rmse: 0.0255005\n", + "[1699]\tvalid_0's rmse: 0.0254974\n", + "[1700]\tvalid_0's rmse: 0.0254964\n", + "[1701]\tvalid_0's rmse: 0.0254971\n", + "[1702]\tvalid_0's rmse: 0.0254974\n", + "[1703]\tvalid_0's rmse: 0.0254974\n", + "[1704]\tvalid_0's rmse: 0.0254945\n", + "[1705]\tvalid_0's rmse: 0.0254948\n", + "[1706]\tvalid_0's rmse: 0.0254947\n", + "[1707]\tvalid_0's rmse: 0.025495\n", + "[1708]\tvalid_0's rmse: 0.0254952\n", + "[1709]\tvalid_0's rmse: 0.025495\n", + "[1710]\tvalid_0's rmse: 0.0254946\n", + "[1711]\tvalid_0's rmse: 0.0254946\n", + "[1712]\tvalid_0's rmse: 0.0254923\n", + "[1713]\tvalid_0's rmse: 0.0254919\n", + "[1714]\tvalid_0's rmse: 0.0254932\n", + "[1715]\tvalid_0's rmse: 0.025493\n", + "[1716]\tvalid_0's rmse: 0.0254935\n", + "[1717]\tvalid_0's rmse: 0.025492\n", + "[1718]\tvalid_0's rmse: 0.0254914\n", + "[1719]\tvalid_0's rmse: 0.0254918\n", + "[1720]\tvalid_0's rmse: 0.0254917\n", + "[1721]\tvalid_0's rmse: 0.0254922\n", + "[1722]\tvalid_0's rmse: 0.0254925\n", + "[1723]\tvalid_0's rmse: 0.0254928\n", + "[1724]\tvalid_0's rmse: 0.0254932\n", + "[1725]\tvalid_0's rmse: 0.0254931\n", + "[1726]\tvalid_0's rmse: 0.0254933\n", + "[1727]\tvalid_0's rmse: 0.0254931\n", + "[1728]\tvalid_0's rmse: 0.0254962\n", + "[1729]\tvalid_0's rmse: 0.0254961\n", + "[1730]\tvalid_0's rmse: 0.0254956\n", + "[1731]\tvalid_0's rmse: 0.025495\n", + "[1732]\tvalid_0's rmse: 0.0254947\n", + "[1733]\tvalid_0's rmse: 0.0254938\n", + "[1734]\tvalid_0's rmse: 0.0254942\n", + "[1735]\tvalid_0's rmse: 0.0254946\n", + "[1736]\tvalid_0's rmse: 0.0254936\n", + "[1737]\tvalid_0's rmse: 0.0254922\n", + "[1738]\tvalid_0's rmse: 0.0254917\n", + "[1739]\tvalid_0's rmse: 0.025492\n", + "[1740]\tvalid_0's rmse: 0.025492\n", + "[1741]\tvalid_0's rmse: 0.0254923\n", + "[1742]\tvalid_0's rmse: 0.0254932\n", + "[1743]\tvalid_0's rmse: 0.0254933\n", + "[1744]\tvalid_0's rmse: 0.0254935\n", + "[1745]\tvalid_0's rmse: 0.0254933\n", + "[1746]\tvalid_0's rmse: 0.0254937\n", + "[1747]\tvalid_0's rmse: 0.0254928\n", + "[1748]\tvalid_0's rmse: 0.0254926\n", + "[1749]\tvalid_0's rmse: 0.0254945\n", + "[1750]\tvalid_0's rmse: 0.0254948\n", + "[1751]\tvalid_0's rmse: 0.025495\n", + "[1752]\tvalid_0's rmse: 0.025487\n", + "[1753]\tvalid_0's rmse: 0.0254868\n", + "[1754]\tvalid_0's rmse: 0.025486\n", + "[1755]\tvalid_0's rmse: 0.0254842\n", + "[1756]\tvalid_0's rmse: 0.0254837\n", + "[1757]\tvalid_0's rmse: 0.025483\n", + "[1758]\tvalid_0's rmse: 0.0254827\n", + "[1759]\tvalid_0's rmse: 0.0254805\n", + "[1760]\tvalid_0's rmse: 0.02548\n", + "[1761]\tvalid_0's rmse: 0.0254799\n", + "[1762]\tvalid_0's rmse: 0.0254799\n", + "[1763]\tvalid_0's rmse: 0.0254794\n", + "[1764]\tvalid_0's rmse: 0.0254783\n", + "[1765]\tvalid_0's rmse: 0.0254772\n", + "[1766]\tvalid_0's rmse: 0.0254773\n", + "[1767]\tvalid_0's rmse: 0.0254773\n", + "[1768]\tvalid_0's rmse: 0.0254767\n", + "[1769]\tvalid_0's rmse: 0.0254775\n", + "[1770]\tvalid_0's rmse: 0.0254774\n", + "[1771]\tvalid_0's rmse: 0.0254775\n", + "[1772]\tvalid_0's rmse: 0.0254769\n", + "[1773]\tvalid_0's rmse: 0.025477\n", + "[1774]\tvalid_0's rmse: 0.0254779\n", + "[1775]\tvalid_0's rmse: 0.025477\n", + "[1776]\tvalid_0's rmse: 0.0254767\n", + "[1777]\tvalid_0's rmse: 0.025474\n", + "[1778]\tvalid_0's rmse: 0.0254756\n", + "[1779]\tvalid_0's rmse: 0.0254761\n", + "[1780]\tvalid_0's rmse: 0.025476\n", + "[1781]\tvalid_0's rmse: 0.0254763\n", + "[1782]\tvalid_0's rmse: 0.0254763\n", + "[1783]\tvalid_0's rmse: 0.0254762\n", + "[1784]\tvalid_0's rmse: 0.0254749\n", + "[1785]\tvalid_0's rmse: 0.025473\n", + "[1786]\tvalid_0's rmse: 0.0254723\n", + "[1787]\tvalid_0's rmse: 0.0254712\n", + "[1788]\tvalid_0's rmse: 0.0254711\n", + "[1789]\tvalid_0's rmse: 0.0254718\n", + "[1790]\tvalid_0's rmse: 0.0254716\n", + "[1791]\tvalid_0's rmse: 0.0254721\n", + "[1792]\tvalid_0's rmse: 0.0254709\n", + "[1793]\tvalid_0's rmse: 0.0254738\n", + "[1794]\tvalid_0's rmse: 0.0254739\n", + "[1795]\tvalid_0's rmse: 0.025474\n", + "[1796]\tvalid_0's rmse: 0.0254719\n", + "[1797]\tvalid_0's rmse: 0.0254719\n", + "[1798]\tvalid_0's rmse: 0.0254734\n", + "[1799]\tvalid_0's rmse: 0.0254738\n", + "[1800]\tvalid_0's rmse: 0.0254739\n", + "[1801]\tvalid_0's rmse: 0.0254722\n", + "[1802]\tvalid_0's rmse: 0.0254725\n", + "[1803]\tvalid_0's rmse: 0.0254716\n", + "[1804]\tvalid_0's rmse: 0.0254717\n", + "[1805]\tvalid_0's rmse: 0.0254718\n", + "[1806]\tvalid_0's rmse: 0.025471\n", + "[1807]\tvalid_0's rmse: 0.0254714\n", + "[1808]\tvalid_0's rmse: 0.0254714\n", + "[1809]\tvalid_0's rmse: 0.0254713\n", + "[1810]\tvalid_0's rmse: 0.0254711\n", + "[1811]\tvalid_0's rmse: 0.0254716\n", + "[1812]\tvalid_0's rmse: 0.025472\n", + "[1813]\tvalid_0's rmse: 0.0254719\n", + "[1814]\tvalid_0's rmse: 0.0254712\n", + "[1815]\tvalid_0's rmse: 0.0254712\n", + "[1816]\tvalid_0's rmse: 0.0254708\n", + "[1817]\tvalid_0's rmse: 0.0254711\n", + "[1818]\tvalid_0's rmse: 0.0254701\n", + "[1819]\tvalid_0's rmse: 0.0254683\n", + "[1820]\tvalid_0's rmse: 0.0254685\n", + "[1821]\tvalid_0's rmse: 0.0254685\n", + "[1822]\tvalid_0's rmse: 0.0254687\n", + "[1823]\tvalid_0's rmse: 0.0254688\n", + "[1824]\tvalid_0's rmse: 0.0254686\n", + "[1825]\tvalid_0's rmse: 0.0254686\n", + "[1826]\tvalid_0's rmse: 0.0254685\n", + "[1827]\tvalid_0's rmse: 0.0254681\n", + "[1828]\tvalid_0's rmse: 0.0254681\n", + "[1829]\tvalid_0's rmse: 0.025468\n", + "[1830]\tvalid_0's rmse: 0.0254683\n", + "[1831]\tvalid_0's rmse: 0.025464\n", + "[1832]\tvalid_0's rmse: 0.0254641\n", + "[1833]\tvalid_0's rmse: 0.0254636\n", + "[1834]\tvalid_0's rmse: 0.0254633\n", + "[1835]\tvalid_0's rmse: 0.0254625\n", + "[1836]\tvalid_0's rmse: 0.0254622\n", + "[1837]\tvalid_0's rmse: 0.0254617\n", + "[1838]\tvalid_0's rmse: 0.0254617\n", + "[1839]\tvalid_0's rmse: 0.0254609\n", + "[1840]\tvalid_0's rmse: 0.025452\n", + "[1841]\tvalid_0's rmse: 0.0254516\n", + "[1842]\tvalid_0's rmse: 0.0254517\n", + "[1843]\tvalid_0's rmse: 0.0254523\n", + "[1844]\tvalid_0's rmse: 0.0254516\n", + "[1845]\tvalid_0's rmse: 0.0254519\n", + "[1846]\tvalid_0's rmse: 0.0254519\n", + "[1847]\tvalid_0's rmse: 0.0254506\n", + "[1848]\tvalid_0's rmse: 0.0254508\n", + "[1849]\tvalid_0's rmse: 0.0254503\n", + "[1850]\tvalid_0's rmse: 0.0254484\n", + "[1851]\tvalid_0's rmse: 0.0254485\n", + "[1852]\tvalid_0's rmse: 0.0254486\n", + "[1853]\tvalid_0's rmse: 0.0254492\n", + "[1854]\tvalid_0's rmse: 0.0254493\n", + "[1855]\tvalid_0's rmse: 0.0254488\n", + "[1856]\tvalid_0's rmse: 0.0254492\n", + "[1857]\tvalid_0's rmse: 0.0254538\n", + "[1858]\tvalid_0's rmse: 0.0254541\n", + "[1859]\tvalid_0's rmse: 0.0254591\n", + "[1860]\tvalid_0's rmse: 0.0254593\n", + "[1861]\tvalid_0's rmse: 0.0254593\n", + "[1862]\tvalid_0's rmse: 0.0254589\n", + "[1863]\tvalid_0's rmse: 0.0254589\n", + "[1864]\tvalid_0's rmse: 0.0254596\n", + "[1865]\tvalid_0's rmse: 0.0254593\n", + "[1866]\tvalid_0's rmse: 0.02546\n", + "[1867]\tvalid_0's rmse: 0.0254596\n", + "[1868]\tvalid_0's rmse: 0.0254609\n", + "[1869]\tvalid_0's rmse: 0.0254586\n", + "[1870]\tvalid_0's rmse: 0.0254583\n", + "[1871]\tvalid_0's rmse: 0.0254584\n", + "[1872]\tvalid_0's rmse: 0.0254582\n", + "[1873]\tvalid_0's rmse: 0.025458\n", + "[1874]\tvalid_0's rmse: 0.0254559\n", + "[1875]\tvalid_0's rmse: 0.0254556\n", + "[1876]\tvalid_0's rmse: 0.0254552\n", + "[1877]\tvalid_0's rmse: 0.0254551\n", + "[1878]\tvalid_0's rmse: 0.0254557\n", + "[1879]\tvalid_0's rmse: 0.0254539\n", + "[1880]\tvalid_0's rmse: 0.0254533\n", + "[1881]\tvalid_0's rmse: 0.0254524\n", + "[1882]\tvalid_0's rmse: 0.0254525\n", + "[1883]\tvalid_0's rmse: 0.0254542\n", + "[1884]\tvalid_0's rmse: 0.0254548\n", + "[1885]\tvalid_0's rmse: 0.0254539\n", + "[1886]\tvalid_0's rmse: 0.0254536\n", + "[1887]\tvalid_0's rmse: 0.0254537\n", + "[1888]\tvalid_0's rmse: 0.0254532\n", + "[1889]\tvalid_0's rmse: 0.0254555\n", + "[1890]\tvalid_0's rmse: 0.0254548\n", + "[1891]\tvalid_0's rmse: 0.0254549\n", + "[1892]\tvalid_0's rmse: 0.0254548\n", + "[1893]\tvalid_0's rmse: 0.0254545\n", + "[1894]\tvalid_0's rmse: 0.0254543\n", + "[1895]\tvalid_0's rmse: 0.0254553\n", + "[1896]\tvalid_0's rmse: 0.0254551\n", + "[1897]\tvalid_0's rmse: 0.0254553\n", + "[1898]\tvalid_0's rmse: 0.0254557\n", + "[1899]\tvalid_0's rmse: 0.0254553\n", + "[1900]\tvalid_0's rmse: 0.0254554\n", + "[1901]\tvalid_0's rmse: 0.025455\n", + "[1902]\tvalid_0's rmse: 0.0254548\n", + "[1903]\tvalid_0's rmse: 0.0254559\n", + "[1904]\tvalid_0's rmse: 0.025455\n", + "[1905]\tvalid_0's rmse: 0.0254548\n", + "[1906]\tvalid_0's rmse: 0.0254548\n", + "[1907]\tvalid_0's rmse: 0.025454\n", + "[1908]\tvalid_0's rmse: 0.0254535\n", + "[1909]\tvalid_0's rmse: 0.0254534\n", + "[1910]\tvalid_0's rmse: 0.0254536\n", + "[1911]\tvalid_0's rmse: 0.0254536\n", + "[1912]\tvalid_0's rmse: 0.0254531\n", + "[1913]\tvalid_0's rmse: 0.0254532\n", + "[1914]\tvalid_0's rmse: 0.0254535\n", + "[1915]\tvalid_0's rmse: 0.0254525\n", + "[1916]\tvalid_0's rmse: 0.025452\n", + "[1917]\tvalid_0's rmse: 0.0254519\n", + "[1918]\tvalid_0's rmse: 0.0254518\n", + "[1919]\tvalid_0's rmse: 0.0254515\n", + "[1920]\tvalid_0's rmse: 0.0254513\n", + "[1921]\tvalid_0's rmse: 0.0254524\n", + "[1922]\tvalid_0's rmse: 0.0254529\n", + "[1923]\tvalid_0's rmse: 0.0254551\n", + "[1924]\tvalid_0's rmse: 0.0254534\n", + "[1925]\tvalid_0's rmse: 0.0254535\n", + "[1926]\tvalid_0's rmse: 0.0254536\n", + "[1927]\tvalid_0's rmse: 0.0254536\n", + "[1928]\tvalid_0's rmse: 0.0254538\n", + "[1929]\tvalid_0's rmse: 0.0254538\n", + "[1930]\tvalid_0's rmse: 0.0254529\n", + "[1931]\tvalid_0's rmse: 0.0254529\n", + "[1932]\tvalid_0's rmse: 0.0254527\n", + "[1933]\tvalid_0's rmse: 0.0254525\n", + "[1934]\tvalid_0's rmse: 0.0254524\n", + "[1935]\tvalid_0's rmse: 0.0254518\n", + "[1936]\tvalid_0's rmse: 0.0254518\n", + "[1937]\tvalid_0's rmse: 0.0254518\n", + "[1938]\tvalid_0's rmse: 0.0254512\n", + "[1939]\tvalid_0's rmse: 0.0254511\n", + "[1940]\tvalid_0's rmse: 0.0254517\n", + "[1941]\tvalid_0's rmse: 0.0254514\n", + "[1942]\tvalid_0's rmse: 0.0254517\n", + "[1943]\tvalid_0's rmse: 0.0254503\n", + "[1944]\tvalid_0's rmse: 0.0254474\n", + "[1945]\tvalid_0's rmse: 0.0254471\n", + "[1946]\tvalid_0's rmse: 0.0254472\n", + "[1947]\tvalid_0's rmse: 0.0254473\n", + "[1948]\tvalid_0's rmse: 0.0254469\n", + "[1949]\tvalid_0's rmse: 0.0254462\n", + "[1950]\tvalid_0's rmse: 0.0254464\n", + "[1951]\tvalid_0's rmse: 0.025446\n", + "[1952]\tvalid_0's rmse: 0.025446\n", + "[1953]\tvalid_0's rmse: 0.0254422\n", + "[1954]\tvalid_0's rmse: 0.0254356\n", + "[1955]\tvalid_0's rmse: 0.0254358\n", + "[1956]\tvalid_0's rmse: 0.0254357\n", + "[1957]\tvalid_0's rmse: 0.0254344\n", + "[1958]\tvalid_0's rmse: 0.0254348\n", + "[1959]\tvalid_0's rmse: 0.0254348\n", + "[1960]\tvalid_0's rmse: 0.0254347\n", + "[1961]\tvalid_0's rmse: 0.0254346\n", + "[1962]\tvalid_0's rmse: 0.0254346\n", + "[1963]\tvalid_0's rmse: 0.0254344\n", + "[1964]\tvalid_0's rmse: 0.0254341\n", + "[1965]\tvalid_0's rmse: 0.0254337\n", + "[1966]\tvalid_0's rmse: 0.0254337\n", + "[1967]\tvalid_0's rmse: 0.0254335\n", + "[1968]\tvalid_0's rmse: 0.0254336\n", + "[1969]\tvalid_0's rmse: 0.0254336\n", + "[1970]\tvalid_0's rmse: 0.0254333\n", + "[1971]\tvalid_0's rmse: 0.0254335\n", + "[1972]\tvalid_0's rmse: 0.0254333\n", + "[1973]\tvalid_0's rmse: 0.0254328\n", + "[1974]\tvalid_0's rmse: 0.0254329\n", + "[1975]\tvalid_0's rmse: 0.0254329\n", + "[1976]\tvalid_0's rmse: 0.0254334\n", + "[1977]\tvalid_0's rmse: 0.0254333\n", + "[1978]\tvalid_0's rmse: 0.0254336\n", + "[1979]\tvalid_0's rmse: 0.0254342\n", + "[1980]\tvalid_0's rmse: 0.0254343\n", + "[1981]\tvalid_0's rmse: 0.0254338\n", + "[1982]\tvalid_0's rmse: 0.0254341\n", + "[1983]\tvalid_0's rmse: 0.0254341\n", + "[1984]\tvalid_0's rmse: 0.0254343\n", + "[1985]\tvalid_0's rmse: 0.0254342\n", + "[1986]\tvalid_0's rmse: 0.0254341\n", + "[1987]\tvalid_0's rmse: 0.0254347\n", + "[1988]\tvalid_0's rmse: 0.025435\n", + "[1989]\tvalid_0's rmse: 0.0254349\n", + "[1990]\tvalid_0's rmse: 0.0254338\n", + "[1991]\tvalid_0's rmse: 0.0254339\n", + "[1992]\tvalid_0's rmse: 0.0254342\n", + "[1993]\tvalid_0's rmse: 0.0254341\n", + "[1994]\tvalid_0's rmse: 0.0254341\n", + "[1995]\tvalid_0's rmse: 0.0254339\n", + "[1996]\tvalid_0's rmse: 0.0254349\n", + "[1997]\tvalid_0's rmse: 0.025434\n", + "[1998]\tvalid_0's rmse: 0.0254327\n", + "[1999]\tvalid_0's rmse: 0.0254326\n", + "[2000]\tvalid_0's rmse: 0.025432\n", + "Did not meet early stopping. Best iteration is:\n", + "[2000]\tvalid_0's rmse: 0.025432\n" + ] + } + ], + "source": [ + "gbm = lgb.train(params_gbm, lgb_train, num_boost_round=2000, valid_sets=lgb_eval, early_stopping_rounds=100)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "y_pred = gbm.predict(X_test)\n", + "y_true = Y_test.values" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 3.7E-04\n", + "RMSE: 0.019\n", + "MAE: 0.013\n", + "MAPE: 2.64 %\n", + "R_2: 0.93\n" + ] + } + ], + "source": [ + "MSE = mean_squared_error(y_true, y_pred)\n", + "RMSE = np.sqrt(mean_squared_error(y_true, y_pred))\n", + "MAE = mean_absolute_error(y_true, y_pred)\n", + "MAPE = mean_absolute_percentage_error(y_true, y_pred)\n", + "R_2 = r2_score(y_true, y_pred)\n", + "print('MSE:', format(MSE, '.1E'))\n", + "print('RMSE:', round(RMSE, 3))\n", + "print('MAE:', round(MAE, 3))\n", + "print('MAPE:', round(MAPE*100, 2), '%')\n", + "print('R_2:', round(R_2, 3)) #R方为负就说明拟合效果比平均值差a" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 25, + "outputs": [], + "source": [ + "dtrain = xgb.DMatrix(X_train, Y_train)\n", + "dvalid = xgb.DMatrix(X_valid, Y_valid)\n", + "dtest = xgb.DMatrix(X_test, Y_test)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 102, + "outputs": [], + "source": [ + "from sklearn.model_selection import cross_val_score\n", + "from xgboost import XGBRegressor\n", + "from bayes_opt import BayesianOptimization" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 103, + "outputs": [], + "source": [ + "def xgb_cv(max_depth, learning_rate, n_estimators, min_child_weight, subsample, colsample_bytree, reg_alpha, gamma):\n", + " val = cross_val_score(estimator=XGBRegressor(max_depth=int(max_depth),\n", + " learning_rate=learning_rate,\n", + " n_estimators=int(n_estimators),\n", + " min_child_weight=min_child_weight,\n", + " subsample=max(min(subsample, 1), 0),\n", + " colsample_bytree=max(min(colsample_bytree, 1), 0),\n", + " reg_alpha=max(reg_alpha, 0), gamma=gamma, objective='reg:squarederror',\n", + " booster='gbtree',\n", + " seed=666), X=use_data[feature_cols], y=use_data.values[:1], scoring='r2',\n", + " cv=10).max()\n", + " return val" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 104, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "| iter | target | colsam... | gamma | learni... | max_depth | min_ch... | n_esti... | reg_alpha | subsample |\n", + "-------------------------------------------------------------------------------------------------------------------------\n" + ] + }, + { + "ename": "ValueError", + "evalue": "Found input variables with inconsistent numbers of samples: [3080, 1]", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mValueError\u001B[0m Traceback (most recent call last)", + "\u001B[1;32m~\\AppData\\Local\\Temp\\ipykernel_17148\\1576227182.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 7\u001B[0m \u001B[1;34m'reg_alpha'\u001B[0m\u001B[1;33m:\u001B[0m \u001B[1;33m(\u001B[0m\u001B[1;36m0.001\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;36m10\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 8\u001B[0m 'gamma': (0.001, 10)})\n\u001B[1;32m----> 9\u001B[1;33m \u001B[0mxgb_bo\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mmaximize\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mn_iter\u001B[0m\u001B[1;33m=\u001B[0m\u001B[1;36m100\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0minit_points\u001B[0m\u001B[1;33m=\u001B[0m\u001B[1;36m10\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m", + "\u001B[1;32mD:\\miniconda3\\envs\\py37\\lib\\site-packages\\bayes_opt\\bayesian_optimization.py\u001B[0m in \u001B[0;36mmaximize\u001B[1;34m(self, init_points, n_iter, acquisition_function, acq, kappa, kappa_decay, kappa_decay_delay, xi, **gp_params)\u001B[0m\n\u001B[0;32m 309\u001B[0m \u001B[0mx_probe\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0msuggest\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mutil\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 310\u001B[0m \u001B[0miteration\u001B[0m \u001B[1;33m+=\u001B[0m \u001B[1;36m1\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 311\u001B[1;33m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mprobe\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mx_probe\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mlazy\u001B[0m\u001B[1;33m=\u001B[0m\u001B[1;32mFalse\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 312\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 313\u001B[0m \u001B[1;32mif\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_bounds_transformer\u001B[0m \u001B[1;32mand\u001B[0m \u001B[0miteration\u001B[0m \u001B[1;33m>\u001B[0m \u001B[1;36m0\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mD:\\miniconda3\\envs\\py37\\lib\\site-packages\\bayes_opt\\bayesian_optimization.py\u001B[0m in \u001B[0;36mprobe\u001B[1;34m(self, params, lazy)\u001B[0m\n\u001B[0;32m 206\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_queue\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0madd\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mparams\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 207\u001B[0m \u001B[1;32melse\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 208\u001B[1;33m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_space\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mprobe\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mparams\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 209\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mdispatch\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mEvents\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mOPTIMIZATION_STEP\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 210\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mD:\\miniconda3\\envs\\py37\\lib\\site-packages\\bayes_opt\\target_space.py\u001B[0m in \u001B[0;36mprobe\u001B[1;34m(self, params)\u001B[0m\n\u001B[0;32m 234\u001B[0m \u001B[0mx\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_as_array\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mparams\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 235\u001B[0m \u001B[0mparams\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mdict\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mzip\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_keys\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mx\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 236\u001B[1;33m \u001B[0mtarget\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mtarget_func\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m**\u001B[0m\u001B[0mparams\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 237\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 238\u001B[0m \u001B[1;32mif\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_constraint\u001B[0m \u001B[1;32mis\u001B[0m \u001B[1;32mNone\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32m~\\AppData\\Local\\Temp\\ipykernel_17148\\2288155185.py\u001B[0m in \u001B[0;36mxgb_cv\u001B[1;34m(max_depth, learning_rate, n_estimators, min_child_weight, subsample, colsample_bytree, reg_alpha, gamma)\u001B[0m\n\u001B[0;32m 9\u001B[0m \u001B[0mbooster\u001B[0m\u001B[1;33m=\u001B[0m\u001B[1;34m'gbtree'\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 10\u001B[0m seed=666), X=use_data[feature_cols], y=use_data.values[:1], scoring='r2',\n\u001B[1;32m---> 11\u001B[1;33m cv=10).max()\n\u001B[0m\u001B[0;32m 12\u001B[0m \u001B[1;32mreturn\u001B[0m \u001B[0mval\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mD:\\miniconda3\\envs\\py37\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\u001B[0m in \u001B[0;36mcross_val_score\u001B[1;34m(estimator, X, y, groups, scoring, cv, n_jobs, verbose, fit_params, pre_dispatch, error_score)\u001B[0m\n\u001B[0;32m 518\u001B[0m \u001B[0mfit_params\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0mfit_params\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 519\u001B[0m \u001B[0mpre_dispatch\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0mpre_dispatch\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 520\u001B[1;33m \u001B[0merror_score\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0merror_score\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 521\u001B[0m )\n\u001B[0;32m 522\u001B[0m \u001B[1;32mreturn\u001B[0m \u001B[0mcv_results\u001B[0m\u001B[1;33m[\u001B[0m\u001B[1;34m\"test_score\"\u001B[0m\u001B[1;33m]\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mD:\\miniconda3\\envs\\py37\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\u001B[0m in \u001B[0;36mcross_validate\u001B[1;34m(estimator, X, y, groups, scoring, cv, n_jobs, verbose, fit_params, pre_dispatch, return_train_score, return_estimator, error_score)\u001B[0m\n\u001B[0;32m 251\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 252\u001B[0m \"\"\"\n\u001B[1;32m--> 253\u001B[1;33m \u001B[0mX\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0my\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mgroups\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mindexable\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mX\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0my\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mgroups\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 254\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 255\u001B[0m \u001B[0mcv\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mcheck_cv\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mcv\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0my\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mclassifier\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0mis_classifier\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mestimator\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mD:\\miniconda3\\envs\\py37\\lib\\site-packages\\sklearn\\utils\\validation.py\u001B[0m in \u001B[0;36mindexable\u001B[1;34m(*iterables)\u001B[0m\n\u001B[0;32m 376\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 377\u001B[0m \u001B[0mresult\u001B[0m \u001B[1;33m=\u001B[0m \u001B[1;33m[\u001B[0m\u001B[0m_make_indexable\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mX\u001B[0m\u001B[1;33m)\u001B[0m \u001B[1;32mfor\u001B[0m \u001B[0mX\u001B[0m \u001B[1;32min\u001B[0m \u001B[0miterables\u001B[0m\u001B[1;33m]\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 378\u001B[1;33m \u001B[0mcheck_consistent_length\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m*\u001B[0m\u001B[0mresult\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 379\u001B[0m \u001B[1;32mreturn\u001B[0m \u001B[0mresult\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 380\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mD:\\miniconda3\\envs\\py37\\lib\\site-packages\\sklearn\\utils\\validation.py\u001B[0m in \u001B[0;36mcheck_consistent_length\u001B[1;34m(*arrays)\u001B[0m\n\u001B[0;32m 332\u001B[0m raise ValueError(\n\u001B[0;32m 333\u001B[0m \u001B[1;34m\"Found input variables with inconsistent numbers of samples: %r\"\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 334\u001B[1;33m \u001B[1;33m%\u001B[0m \u001B[1;33m[\u001B[0m\u001B[0mint\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0ml\u001B[0m\u001B[1;33m)\u001B[0m \u001B[1;32mfor\u001B[0m \u001B[0ml\u001B[0m \u001B[1;32min\u001B[0m \u001B[0mlengths\u001B[0m\u001B[1;33m]\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 335\u001B[0m )\n\u001B[0;32m 336\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;31mValueError\u001B[0m: Found input variables with inconsistent numbers of samples: [3080, 1]" + ] + } + ], + "source": [ + "xgb_bo = BayesianOptimization(xgb_cv, pbounds={'max_depth': (20, 60),\n", + " 'learning_rate': (0.005, 0.1),\n", + " 'n_estimators': (100, 2000),\n", + " 'min_child_weight': (0, 30),\n", + " 'subsample': (0.05, 1),\n", + " 'colsample_bytree': (0.1, 1),\n", + " 'reg_alpha': (0.001, 10),\n", + " 'gamma': (0.001, 10)})\n", + "xgb_bo.maximize(n_iter=100, init_points=10)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 105, + "outputs": [], + "source": [ + "params_xgb = {'objective': 'reg:squarederror',\n", + " 'booster': 'gbtree',\n", + " 'eta': 0.037,\n", + " 'max_depth': 30,\n", + " 'subsample': 1.0,\n", + " 'colsample_bytree': 0.47,\n", + " 'min_child_weight': 30,\n", + " 'seed': 42}\n", + "num_boost_round = 2000\n", + "\n", + "dtrain = xgb.DMatrix(X_train, Y_train)\n", + "dvalid = xgb.DMatrix(X_valid, Y_valid)\n", + "watchlist = [(dtrain, 'train'), (dvalid, 'eval')]\n", + "\n", + "gb_model = xgb.train(params_xgb, dtrain, num_boost_round, evals=watchlist,\n", + " early_stopping_rounds=100, verbose_eval=False)\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 106, + "outputs": [], + "source": [ + "y_pred_xgb = np.expm1(gb_model.predict(xgb.DMatrix(X_test)))\n", + "y_true_xgb = np.expm1(Y_test.values)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 107, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 1.1E-05\n", + "RMSE: 0.003\n", + "MAE: 0.002\n", + "MAPE: 2.99 %\n", + "R_2: 0.88\n" + ] + } + ], + "source": [ + "MSE = mean_squared_error(y_true_xgb, y_pred_xgb)\n", + "RMSE = np.sqrt(mean_squared_error(y_true_xgb, y_pred_xgb))\n", + "MAE = mean_absolute_error(y_true_xgb, y_pred_xgb)\n", + "MAPE = mean_absolute_percentage_error(y_true_xgb, y_pred_xgb)\n", + "R_2 = r2_score(y_true_xgb, y_pred_xgb)\n", + "print('MSE:', format(MSE, '.1E'))\n", + "print('RMSE:', round(RMSE, 3))\n", + "print('MAE:', round(MAE, 3))\n", + "print('MAPE:', round(MAPE*100, 2), '%')\n", + "print('R_2:', round(R_2, 3)) #R方为负就说明拟合效果比平均值差a" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 108, + "outputs": [], + "source": [ + "kf = KFold(n_splits=10, shuffle=True, random_state=42)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 109, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 1.8E-05, RMSE: 0.004, MAE: 0.002, MAPE: 3.47 %, R_2: 0.776\n", + "MSE: 1.8E-05, RMSE: 0.004, MAE: 0.002, MAPE: 3.19 %, R_2: 0.83\n", + "MSE: 1.8E-05, RMSE: 0.004, MAE: 0.002, MAPE: 3.87 %, R_2: 0.811\n", + "MSE: 1.2E-05, RMSE: 0.003, MAE: 0.002, MAPE: 2.96 %, R_2: 0.861\n", + "MSE: 1.9E-05, RMSE: 0.004, MAE: 0.002, MAPE: 3.65 %, R_2: 0.775\n", + "MSE: 1.9E-05, RMSE: 0.004, MAE: 0.002, MAPE: 3.56 %, R_2: 0.789\n", + "MSE: 2.3E-05, RMSE: 0.005, MAE: 0.002, MAPE: 3.05 %, R_2: 0.723\n", + "MSE: 2.5E-05, RMSE: 0.005, MAE: 0.002, MAPE: 3.94 %, R_2: 0.717\n", + "MSE: 1.0E-05, RMSE: 0.003, MAE: 0.002, MAPE: 2.9 %, R_2: 0.864\n", + "MSE: 9.4E-06, RMSE: 0.003, MAE: 0.002, MAPE: 2.89 %, R_2: 0.881\n" + ] + } + ], + "source": [ + "eva_list = list()\n", + "for (train_index, test_index) in kf.split(use_data):\n", + " train = use_data.loc[train_index]\n", + " test = use_data.loc[test_index]\n", + " train, valid = train_test_split(train, test_size=0.15, random_state=42)\n", + " X_train, Y_train = train[feature_cols], train[target_cols[1]]\n", + " X_valid, Y_valid = valid[feature_cols], valid[target_cols[1]]\n", + " X_test, Y_test = test[feature_cols], test[target_cols[1]]\n", + " dtrain = xgb.DMatrix(X_train, Y_train)\n", + " dvalid = xgb.DMatrix(X_valid, Y_valid)\n", + " watchlist = [(dvalid, 'eval')]\n", + " gb_model = xgb.train(params_xgb, dtrain, num_boost_round, evals=watchlist,\n", + " early_stopping_rounds=100, verbose_eval=False)\n", + " y_pred = gb_model.predict(xgb.DMatrix(X_test))\n", + " y_true = Y_test.values\n", + " MSE = mean_squared_error(y_true, y_pred)\n", + " RMSE = np.sqrt(mean_squared_error(y_true, y_pred))\n", + " MAE = mean_absolute_error(y_true, y_pred)\n", + " MAPE = mean_absolute_percentage_error(y_true, y_pred)\n", + " R_2 = r2_score(y_true, y_pred)\n", + " print('MSE:', format(MSE, '.1E'), end=', ')\n", + " print('RMSE:', round(RMSE, 3), end=', ')\n", + " print('MAE:', round(MAE, 3), end=', ')\n", + " print('MAPE:', round(MAPE*100, 2), '%', end=', ')\n", + " print('R_2:', round(R_2, 3)) #R方为负就说明拟合效果比平均值差\n", + " eva_list.append([MSE, RMSE, MAE, MAPE, R_2])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 110, + "outputs": [], + "source": [ + "record = pd.DataFrame.from_records(eva_list, columns=['MSE', 'RMSE', 'MAE', 'MAPE', 'R2'])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 120, + "outputs": [ + { + "data": { + "text/plain": " MSE RMSE MAE MAPE R2\n0 0.000018 0.004221 0.002394 0.034705 0.775560\n1 0.000018 0.004191 0.002405 0.031921 0.829931\n2 0.000018 0.004249 0.002235 0.038677 0.810649\n3 0.000012 0.003395 0.002090 0.029607 0.861337\n4 0.000019 0.004334 0.002302 0.036496 0.775066\n5 0.000019 0.004367 0.002260 0.035588 0.789063\n6 0.000023 0.004806 0.002272 0.030522 0.723082\n7 0.000025 0.004968 0.002401 0.039428 0.717094\n8 0.000010 0.003207 0.002037 0.029033 0.863679\n9 0.000009 0.003072 0.002008 0.028871 0.880821", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
MSERMSEMAEMAPER2
00.0000180.0042210.0023940.0347050.775560
10.0000180.0041910.0024050.0319210.829931
20.0000180.0042490.0022350.0386770.810649
30.0000120.0033950.0020900.0296070.861337
40.0000190.0043340.0023020.0364960.775066
50.0000190.0043670.0022600.0355880.789063
60.0000230.0048060.0022720.0305220.723082
70.0000250.0049680.0024010.0394280.717094
80.0000100.0032070.0020370.0290330.863679
90.0000090.0030720.0020080.0288710.880821
\n
" + }, + "execution_count": 120, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "record" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 124, + "outputs": [ + { + "data": { + "text/plain": " MSE RMSE MAE MAPE R2\n8 0.00001 0.003207 0.002037 0.029033 0.863679", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
MSERMSEMAEMAPER2
80.000010.0032070.0020370.0290330.863679
\n
" + }, + "execution_count": 124, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 126, + "outputs": [], + "source": [ + "index = [0, 1, 2, 3, 4, 5, 6, 8]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 128, + "outputs": [ + { + "data": { + "text/plain": "MSE 0.000017\nRMSE 0.004096\nMAE 0.002249\nMAPE 0.033319\nR2 0.803546\ndtype: float64" + }, + "execution_count": 128, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "record.loc[index].mean()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 63, + "outputs": [ + { + "data": { + "text/plain": "MSE 0.000552\nRMSE 0.022978\nMAE 0.014251\nMAPE 0.034105\nR2 0.896138\ndtype: float64" + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "record.mean()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 57, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "#新增加的两行\n", + "from pylab import mpl\n", + "# 设置显示中文字体\n", + "mpl.rcParams[\"font.sans-serif\"] = [\"SimHei\"]\n", + "\n", + "mpl.rcParams[\"axes.unicode_minus\"] = False" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 58, + "outputs": [ + { + "data": { + "text/plain": "
", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABREAAANBCAYAAAB3XPnSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzde3RU9bn/8c/ckxAS5SqiIl4IFQOUFqqIVBB7YCloEazWUhEVgbZotZaGImIpUjguWuQUrQLWKsfaA5aCCqVoT8FWwUrRoAJCEX/IJXiCQMBk9u33x8yeZHKdYHaYCe/XWiycPXvPfHfAvdqPz/N9fI7jOAIAAAAAAACAOvhP9QIAAAAAAAAApDdCRAAAAAAAAAD1IkQEAAAAAAAAUC9CRAAAAAAAAAD1IkQEAAAAAAAAUC9CRAAAAAAAAAD1IkQEAAAAAAAAUC9CRAAAAAAAAAD1IkQEAABAk6qoqNBnn31W4/j27du1f//+Wq8pKSnRT3/6Ux08eNDr5QEAAOAkBE/1AgAAAHBqnDhxQqZpKhwOy+fzJb0XjUbl9/uVlZWlSZMmaeDAgbr11lv12WefqaSkpMZnXXDBBQoGY//TcuXKlZo/f75ef/31pHMee+wxvfPOO1q7dq1ycnKS3quoqNCyZct011131bne/fv366qrrpLf70+s13Ec2batQCCQOM+2bfXq1UsvvPBC434gAAAAqBMhIgAAQAs3ZswYbdu2TaFQKBG+ffnLX1b37t31xBNPKBwOyzAMWZaVCPcqKir0rW99S9OmTdPll1+u2bNn67333lPv3r01c+ZMtW/fXpJkmqYOHjyojRs36owzzpAkhUIhhcPhpDXs379ff/vb3zR79uyk7wiFQvL7/YkQ0P3dsixFo1GFw+HEsUgkIkn67W9/q6997WuSpHXr1umnP/2pNm7cmPiuBQsWaNOmTU3/gwQAADiNESICAAC0cI8++qgcx1E4HNamTZtUVFSkm266SQMHDtT3v/99SdKcOXO0Z88eLVy4sMb1Y8eOVWFhoT7//HN9+umn6t27t5599llJ0t69e3X11VcrFApp9OjRGjp0qNq1a1fjMxYuXKhevXpp+PDheu+995Sbm6tp06bVCPuGDBmS9Prpp59W//79JUl+f+o78TTmXAAAADSMEBEAAKCF69ixo5544gllZWXpqaee0n/+539q4MCBSefs3r1bPXr0qPV6x3H0la98RZL0pz/9SZK0a9cuzZs3L6n9OBKJ1KhAlKQ33nhDy5cv1x/+8AdJ0kMPPaSjR4/q2WefVTgcVjgcVklJiYYOHaqXX35ZnTp1km3bqqioUF5eXuJz3GDwjjvuSGpnNgxDhYWFifMsy1K/fv0a/XMCAABA3QgRAQAATgOXXXaZJk2apK5duyZV+1166aWSJJ/Pp7///e968skn5TiOJGnr1q3asGGD5s+fr/nz56tz586J6xzH0bp165JCRJ/PV2Nvxc8//1yTJ09WXl6eli5dqsOHD+v999/Xc889p3bt2skwDEUiEWVnZ0uSsrKy1KpVK0WjUWVlZSkUCiU+y7IsSdLixYsbbGd+6623muTnBgAAgBj6PAAAAFowx3H0+eefq1evXlq6dKl69+4t27YT70ciES1evFhbtmzR0qVL9cYbb2jx4sWJ/QcvvfRS5eXlafTo0Xr//fcT17lDVFq1alXv92dnZ+v666/XmDFj1L17d61fv17jxo1Tnz599P7776tXr17q3r27vv71r0uSrr76ahUUFKiwsLDGYJSq625IY84FAABAw6hEBAAAaME+/fRTDRgwQH6/P1Fh+PTTT8uyLP3iF79IhIFHjx7V6NGj9d///d+SKkPCM888U7/5zW80e/ZsdezYUR9++GHS57thY32mTZsmSZoxY4bOPfdc/eAHP5AkFRQUaMOGDcrOzq6xh6FhGElViO6xQCCg22+/PXHMnc58ySWXJJ3bs2fPBtcFAACA1BEiAgAAtGDt2rVTcXGxwuGwZs2apRMnTujee+/VgAEDkvYNrKiokCSdf/752rlzZ9JnhEIhFRUVKRgMJoLI0tJS5eTkJMI/93hdNm/erD/84Q965plnEsFjOBxW27Zta702EokkgkxJOnDggLKysrR58+aklunXXntNM2bM0Pr165OudxxHx44dUzgcTinoBAAAQP0IEQEAAFown89XY9jJ//3f/+mGG25I2uPw2LFjCgaDatOmTa2fs2LFCq1Zs0bf+MY3JEkHDx5Ux44dE+9Ho9E617BhwwY98MADKigoUHFxsVauXKlgMKiHHnpIw4YN0549e2q9bvXq1brgggskScOGDdOJEyfq/I66Kg/nzp2r66+/vs7rAAAAkBr2RAQAADjNdO/e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\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(16, 10))\n", + "plt.plot(range(len(y_true)), y_true, 'o-', label='真实值')\n", + "plt.plot(range(len(y_pred)), y_pred, '*-', label='预测值')\n", + "plt.legend(loc='best')\n", + "plt.title('预测结果')\n", + "plt.savefig('./figure/CO2排放强度预测结果.png')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 59, + "outputs": [], + "source": [ + "pd.DataFrame.from_records([y_pred, y_true]).T.to_csv('pred.csv')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 60, + "outputs": [], + "source": [ + "rst = pd.DataFrame.from_records(([y_true_xgb, y_pred_xgb])).T\n", + "rst.columns = ['y_true', 'y_pred']" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 61, + "outputs": [], + "source": [ + "rst['mAP'] = abs(rst.y_pred - rst.y_true) / rst.y_true" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 62, + "outputs": [ + { + "data": { + "text/plain": " y_true y_pred mAP\n23 0.233161 0.228589 0.019609\n46 0.242031 0.260373 0.075782\n42 0.233845 0.215675 0.077700\n1 0.233773 0.237715 0.016864\n58 0.258407 0.259042 0.002460\n41 0.233404 0.246465 0.055956\n15 0.249245 0.248289 0.003837\n63 0.237670 0.284324 0.196296\n59 0.244008 0.242001 0.008228\n37 0.252681 0.251169 0.005983", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
y_truey_predmAP
230.2331610.2285890.019609
460.2420310.2603730.075782
420.2338450.2156750.077700
10.2337730.2377150.016864
580.2584070.2590420.002460
410.2334040.2464650.055956
150.2492450.2482890.003837
630.2376700.2843240.196296
590.2440080.2420010.008228
370.2526810.2511690.005983
\n
" + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rst.sort_values(by='mAP').sample(10)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 63, + "outputs": [ + { + "data": { + "text/plain": "
", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABREAAANBCAYAAAB3XPnSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzde3RU9bn/8c/cEy4JchVBVEShQiBSsApeAFFhCaJotNZSES8nclpEu2wbikB/6EHQZQWON27qEY7SoqUiQhE9BWwVjiAaRFAQ8aCYYLklgcx1//6YzM4MmUxmwiXs7PdrLdYke/ae2Rs2WbM+eZ7v4zAMwxAAAAAAAAAA1MLZ0CcAAAAAAAAA4PRGiAgAAAAAAAAgJUJEAAAAAAAAACkRIgIAAAAAAABIiRARAAAAAAAAQEqEiAAAAAAAAABSIkQEAAAAAAAAkBIhIgAAAAAAAICUCBEBAABwQvn9fh08eLDG9u3bt2vv3r1JjyktLdXvf/97lZSUnOzTAwAAQD24G/oEAAAA0DCOHDmiUCgkr9crh8OR8FwgEJDT6VRWVpbGjh2rK6+8UnfccYcOHjyo0tLSGq/VuXNnud3Rj5ZvvvmmZs6cqffffz9hn1mzZumTTz7RqlWr1KRJk4Tn/H6/lixZonvvvbfW8927d68GDBggp9Npnq9hGIpEInK5XOZ+kUhEvXr10uLFizP7CwEAAECtCBEBAAAauVGjRmnbtm3yeDxm+HbxxRerW7duev755+X1ehUMBhUOh81wz+/367bbbtPEiRN12WWXadq0afrss8+Un5+vqVOnqk2bNpKkUCikkpISrV+/Xi1atJAkeTweeb3ehHPYu3ev1qxZo2nTpiW8h8fjkdPpNEPA2GM4HFYgEJDX6zW3+Xw+SdJLL72kn/zkJ5Kk1atX6/e//73Wr19vvtfs2bO1YcOGE/8XCQAAYGOEiAAAAI3ck08+KcMw5PV6tWHDBhUVFenWW2/VlVdeqV/+8peSpOnTp2v37t169tlnaxw/evRo5eXl6ejRo/rhhx+Un5+vV155RZK0Z88eXX311fJ4PCooKNCQIUPUunXrGq/x7LPPqlevXho+fLg+++wzNWvWTBMnTqwR9g0ePDjh+xdffFH9+vWTJDmd6a/Ek8m+AAAAqBshIgAAQCPXrl07Pf/888rKytLcuXP1xBNP6Morr0zYZ9euXerevXvS4w3D0I9//GNJ0l//+ldJ0s6dO/XUU08ltB/7fL4aFYiS9MEHH+j111/Xn/70J0nS5MmTdfjwYb3yyivyer3yer0qLS3VkCFDtHz5crVv316RSER+v185OTnm68SCwbvvvjuhnTkYDCovL8/cLxwO65JLLsn47wkAAAC1I0QEAACwgUsvvVRjx47Veeedl1Dt16NHD0mSw+HQP/7xD82ZM0eGYUiStmzZonXr1mnmzJmaOXOmOnToYB5nGIZWr16dECI6HI4aaysePXpU48aNU05OjhYtWqQDBw5o69atWrhwoVq3bq1gMCifz6fs7GxJUlZWlpo2bapAIKCsrCx5PB7ztcLhsCRp/vz5dbYz/+///u8J+XsDAABAFH0eAAAAjZhhGDp69Kh69eqlRYsWKT8/X5FIxHze5/Np/vz52rx5sxYtWqQPPvhA8+fPN9cf7NGjh3JyclRQUKCtW7eax8WGqDRt2jTl+2dnZ2vEiBEaNWqUunXrprVr12rMmDHq3bu3tm7dql69eqlbt2666qqrJElXX321unbtqry8vBqDUeLPuy6Z7AsAAIC6UYkIAADQiP3www+6/PLL5XQ6zQrDF198UeFwWI8//rgZBh4+fFgFBQX67//+b0nVIeEZZ5yhF154QdOmTVO7du305ZdfJrx+LGxMZeLEiZKkKVOm6Oyzz9avfvUrSVLXrl21bt06ZWdn11jDMBgMJlQhxra5XC7ddddd5rbYdOaLLrooYd+ePXvWeV4AAABIHyEiAABAI9a6dWsVFxfL6/Xqscce05EjRzR+/HhdfvnlCesG+v1+SdK5556rHTt2JLyGx+NRUVGR3G63GUTu379fTZo0McO/2PbabNq0SX/605/08ssvm8Gj1+tVq1atkh7r8/nMIFOSvv/+e2VlZWnTpk0JLdPvvfeepkyZorVr1yYcbxiGysrK5PV60wo6AQAAkBohIgAAQCPmcDhqDDv517/+pRtvvDFhjcOysjK53W61bNky6essXbpUK1eu1LXXXitJKikpUbt27cznA4FAreewbt06Pfzww+ratauKi4v15ptvyu12a/LkyRo6dKh2796d9LgVK1aoc+fOkqShQ4fqyJEjtb5HbZWHM2bM0IgRI2o9DgAAAOlhTUQAAACb6datm6ZPny6puoJw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1isTEZFpMi8wXOW4MhGDlIkoIiISIU6HwabrlgJWwDCUfX/TdUtxOs4+KiIicceVYgUQwbpVAFFEZFYpVybiMAoiioiIRNDGZSU8evNqit1DS5aL3ak8evNqNi4ridHKRERERERkvOblZwBWT0TTHKnOaPZRObOIiEiEbVxWwtVLi9lV00JTp4eiLKuEWRmIIiIiIiKJoTQnDYcBvf0+Tnf1qa85CiKKiIhEhdNhcOnC/FgvQ0REREREJiHZ5aDEnUZdWy+1zT0KIqJyZhERERERERERkWGCw1XUFxFQEFFERERERERERGQYO4hYqwnNgIKIIiIiIiIiIiIiw5TlWkHEnUfO8FZ1Mz7/7B6woiCiiIiIiIiIiIhIiBeqGnj8D0cBePd4K59//G3WbX2ZF6oaYryy2FEQUUREREREREREJOCFqgbueHI3bT39Qx5vbPdwx5O7Z20gUUFEERERERERERERwOc32bx9HyMVLtuPbd6+b1aWNiuIKCIiIiIiIiIiAuyqaaGh3TPqcRNoaPewq6Zl+hYVJxREFBERERERERERAZo6Rw8gTua8mURBRBEREREREREREaAoKzWi580kCiKKiIiIiIiIiIgAayvzKHGnYoxy3ABK3KmsrcybzmXFBQURRUREREREREREAKfDYNN1SwGGBRLt+5uuW4rTMVqYceZSEFFERERERERERCRg47ISHr15NcXuoSXLxe5UHr15NRuXlcRoZbHlivUCRERERERERERE4snGZSVcvbSYXTUtNHV6KMqySphnYwaiTUFEERERERERERGRszgdBpcuzI/1MuKGyplFREREREREREQkLAURRUREREREREREJCwFEUVERERERERERCQsBRFFREREREREREQkLAURRUREREREREREJCwFEUVERERERERERCQsBRFFREREREREREQkLAURRUREREREREREJCwFEUVERERERERERCQsBRFFREREREREREQkLAURRUREREREREREJCwFEUVERERERERERCQsBRFFREREREREREQkLAURRUREREREREREJCwFEUVERERERERERCQsBRFFREREREREREQkLAURRUREREREREREJCwFEUVERERERERERCQsBRFFREREREREREQkLAURRUREREREREREJCwFEUVERERERERERCQsBRFFREREREREREQkLAURRUREREREREREJCwFEUVERERERERERCQsBRFFREREREREREQkLAURRUREREREREREJCwFEUVERERERERERCQsV6wXMBWmaQLg8/livJLosP9cM/XPJzOb9q8kMu1fSWTav5LotIclkWn/SiLT/p297L9zO842GsMc64w45vV62bt3b6yXISIiIiIiIiIiktCWL19OcnLyqMcTOojo9/sZGBjA4XBgGEaslyMiIiIiIiIiIpJQTNPE7/fjcrlwOEbvfJjQQUQRERERERERERGJPg1WERERERERERERkbAURBQREREREREREZGwFEQUERERERERERGRsBREFBERERERERERkbAURBQREREREREREZGwFEQUERERERERERGRsBREFBERERERERERkbAURBQRERFJcK2trezevZuWlpZYL0VEREREZigFEePUoUOH+MxnPsNFF13E1q1bMU0z1ksSCau1tZUrr7ySkydPBh/TPpZE8dJLL3HVVVexdOlSPvvZz1JdXQ1oD0tieP7557nmmmv49re/zSc+8Qmef/55QPtXEs8tt9zCr3/9a0D7VxLDli1bWLJkSfC/q6++GtD+lcTy0EMPcfvttwfva/9KOAoixiGv18vtt9/O+eefz7PPPkt1dXXwDZVIPGppaeH222+nrq4u+Jj2sSSK2tpa7r//fu655x5ef/115s6dy9/93d9pD0tC6OjoYMuWLfzbv/0b27ZtY/PmzTz00EPav5JwfvOb3/DGG28Aeg8hieOjjz7iscce45133uGdd97hP/7jP7R/JaEcOnSIX/ziF9x///2AXn9lbAoixqHXX3+drq4u7rvvPioqKrj77rt55plnYr0skVHdfffdXHvttUMe0z6WRFFdXc1f//Vfc+2111JQUMDnP/95qqqqRjjwPQAABSVJREFUtIclIXR3d3P//fdzzjnnAHDuuefS3t6u/SsJpa2tja1bt1JZWQnoPYQkhoGBAQ4dOsSaNWvIzs4mOzubzMxM7V9JGKZp8q1vfYsvfvGLVFRUAHr9lbEpiBiHDhw4wMqVK0lLSwNgyZIlwdI6kXi0ZcsWvvjFLw55TPtYEsUnPvEJPv/5zwfv19TUMG/ePO1hSQglJSVcf/31APT39/PEE09wzTXXaP9KQtm6dSsbNmxg1apVgN5DSGI4ePAgpmnyqU99ihUrVnDLLbdQX1+v/SsJ4+mnn+bAgQOUlZXxyiuv0N/fr/0rY1IQMQ51dXVRVlYWvG8YBg6Hg/b29hiuSmR05eXlwx7TPpZE5PV6eeKJJ/jCF76gPSwJ5cCBA1x++eXs3LmT+++/X/tXEsbbb7/NW2+9xTe+8Y3gY9q/kgiqq6tZvHgxDz/8MM8//zxJSUl861vf0v6VhNDd3c0jjzzCvHnzaGxs5Cc/+Qk333yz9q+MSUHEOOR0OklOTh7yWEpKCh6PJ0YrEpk47WNJRI888gjp6encdNNN2sOSUJYsWcJPf/pTFi1axH333af9Kwmhr6+PTZs28cADD5CZmRl8XPtXEsH111/P008/zYoVKygvL+eb3/wmO3fuxO/3a/9K3Pv9739Pb28v//qv/8qdd97JE088QUdHB88++6z2r4SlIGIccrvdtLS0DHmsu7ubpKSkGK1IZOK0jyXR7Ny5k1/96lc8/PDDJCUlaQ9LQjEMg6VLl/Lggw+yY8cO7V9JCD/+8Y9ZtmwZ69evH/K49q8kouzsbPx+PwUFBdq/EvcaGxtZsWIFOTk5ALhcLpYsWUJfX5/2r4SlIGIcWr58OXv27AneP3nyJF6vF7fbHcNViUyM9rEkkhMnTvD1r3+dBx54gEWLFgHaw5IY3nrrLbZu3Rq873Q6AViwYIH2r8S97du38/LLL7NmzRrWrFnDc889x+bNm9m2bZv2r8S97373u/z2t78N3t+7dy8Oh4MlS5Zo/0rcKy4upq+vb8hj9fX13Hvvvdq/EpaCiHHooosuorOzk23btgHw2GOPcdlllwU/GIgkAu1jSRQej4evfvWrbNiwgauuuoru7m66u7tZs2aN9rDEvQULFvDUU0/x1FNP0dDQwMMPP8zll1/O+vXrtX8l7v3iF79g+/btbNu2jW3btnHllVfyV3/1Vzz55JPavxL3zjvvPB555BHeeecd3nrrLbZs2cKnP/1pLr/8cu1fiXvr16+nurqaX/7ylzQ2NvKzn/2M/fv3s27dOu1fCcswTdOM9SJkuJdeeol77rmHjIwMfD4fTz75JIsXL471skTCWrJkCTt27Ag249U+lkTw0ksvceeddw57fMeOHRw4cEB7WOLeH/7wB7773e/S2NjIunXreOCBB8jLy9NrsCScv/3bv2Xt2rXceOON2r+SEB5++GF+9atfkZGRwYYNG7j77rtJT0/X/pWE8MEHH/Dggw+yf/9+CgoKuO+++9iwYYP2r4SlIGIcO3XqFHv37mX16tXk5eXFejkik6J9LIlOe1gSmfavJDLtX0lk2r+SyLR/ZTQKIoqIiIiIiIiIiEhY6okoIiIiIiIiIiIiYSmIKCIiIiIiIiIiImEpiCgiIiIiIiIiIiJhKYgoIiIiIiIiIiIiYSmIKCIiIiIiIiIiImEpiCgiIiIiIiIiIiJhKYgoIiIiIiIiIiIiYSmIKCIiIiIiIiIiImEpiCgiIiIiIiIiIiJh/T+fP9YhHn4itwAAAABJRU5ErkJggg==\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(16, 10))\n", + "plt.plot(range(len(y_true_xgb)), y_true_xgb, 'o-', label='真实值')\n", + "plt.plot(range(len(y_pred_xgb)), y_pred_xgb, '*-', label='预测值')\n", + "plt.legend(loc='best')\n", + "plt.title('预测结果')\n", + "plt.savefig('./figure/CO2排放强度预测结果.png')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "## 煤种标准化工程" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 73, + "outputs": [], + "source": [ + "new_values = total_data.groupby(['煤种', '入炉煤低位热值_new', '燃煤挥发份Var_new', '燃煤灰份Aar_new']).CO2_em_air.mean()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 74, + "outputs": [ + { + "data": { + "text/plain": " 煤种 入炉煤低位热值_new 燃煤挥发份Var_new 燃煤灰份Aar_new\n0 无烟煤 17050.00 6.51 31.330000\n1 无烟煤 18440.00 9.13 21.240189\n2 无烟煤 19335.65 7.06 21.400000\n3 无烟煤 20125.07 5.70 29.850000\n4 无烟煤 20463.30 5.70 29.790000\n.. ... ... ... ...\n622 贫煤 21772.91 10.66 26.320000\n623 贫煤 21907.00 10.64 28.100000\n624 贫煤 22042.72 12.96 25.690000\n625 贫煤 23215.00 11.00 19.310000\n626 贫煤 23791.00 11.00 19.310000\n\n[627 rows x 4 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
煤种入炉煤低位热值_new燃煤挥发份Var_new燃煤灰份Aar_new
0无烟煤17050.006.5131.330000
1无烟煤18440.009.1321.240189
2无烟煤19335.657.0621.400000
3无烟煤20125.075.7029.850000
4无烟煤20463.305.7029.790000
...............
622贫煤21772.9110.6626.320000
623贫煤21907.0010.6428.100000
624贫煤22042.7212.9625.690000
625贫煤23215.0011.0019.310000
626贫煤23791.0011.0019.310000
\n

627 rows × 4 columns

\n
" + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coal_df = new_values.reset_index().drop(columns='CO2_em_air')\n", + "coal_df" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 75, + "outputs": [], + "source": [ + "coal_params_dict = dict()\n", + "for coal_type in coal_df['煤种'].unique().tolist():\n", + " options = coal_df[coal_df['煤种']==coal_type][['入炉煤低位热值_new', '燃煤挥发份Var_new', '燃煤灰份Aar_new']].values\n", + " coal_params_dict[coal_type] = options" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 76, + "outputs": [ + { + "data": { + "text/plain": "{'无烟煤': array([[1.70500000e+04, 6.51000000e+00, 3.13300000e+01],\n [1.84400000e+04, 9.13000000e+00, 2.12401894e+01],\n [1.93356500e+04, 7.06000000e+00, 2.14000000e+01],\n [2.01250700e+04, 5.70000000e+00, 2.98500000e+01],\n [2.04633000e+04, 5.70000000e+00, 2.97900000e+01]]),\n '烟煤': array([[1.277100e+04, 2.126000e+01, 3.355000e+01],\n [1.500000e+04, 2.346000e+01, 1.904000e+01],\n [1.610000e+04, 2.333000e+01, 1.873000e+01],\n ...,\n [2.348751e+04, 2.927000e+01, 2.097000e+01],\n [2.365000e+04, 2.887000e+01, 7.910000e+00],\n [2.365614e+04, 2.927000e+01, 2.097000e+01]]),\n '褐煤': array([[1.059800e+04, 2.476000e+01, 2.179000e+01],\n [1.129000e+04, 4.764000e+01, 3.079000e+01],\n [1.160400e+04, 4.758000e+01, 3.025000e+01],\n [1.172435e+04, 4.601000e+01, 3.673000e+01],\n [1.203000e+04, 4.726000e+01, 3.119000e+01],\n [1.213546e+04, 4.642000e+01, 1.113000e+01],\n [1.217290e+04, 4.642000e+01, 1.113000e+01],\n [1.219256e+04, 4.642000e+01, 1.113000e+01],\n [1.221131e+04, 4.642000e+01, 1.113000e+01],\n [1.230939e+04, 4.642000e+01, 1.113000e+01],\n [1.233780e+04, 4.642000e+01, 1.113000e+01],\n [1.267400e+04, 4.324000e+01, 1.237000e+01],\n [1.278700e+04, 4.884000e+01, 4.117000e+01],\n [1.295100e+04, 2.228000e+01, 1.287000e+01],\n [1.299880e+04, 2.256000e+01, 1.716000e+01],\n [1.311100e+04, 2.367000e+01, 2.107000e+01],\n [1.313000e+04, 2.417000e+01, 1.630000e+01],\n [1.318000e+04, 2.445000e+01, 1.794000e+01],\n [1.320830e+04, 2.451000e+01, 1.429000e+01],\n [1.325722e+04, 1.703000e+01, 3.660000e+01],\n [1.327000e+04, 3.204000e+01, 1.709000e+01],\n [1.327300e+04, 2.364000e+01, 1.622000e+01],\n [1.327300e+04, 2.458000e+01, 1.261000e+01],\n [1.332771e+04, 4.090000e+01, 2.507000e+01],\n [1.333064e+04, 1.680000e+01, 3.741000e+01],\n [1.335883e+04, 2.301000e+01, 1.841000e+01],\n [1.336864e+04, 2.301000e+01, 1.841000e+01],\n [1.343787e+04, 2.336000e+01, 1.705000e+01],\n [1.344000e+04, 4.782000e+01, 2.290000e+01],\n [1.345749e+04, 2.388000e+01, 1.652000e+01],\n [1.357000e+04, 1.799000e+01, 2.177000e+01],\n [1.364000e+04, 2.526000e+01, 2.108000e+01],\n [1.365410e+04, 2.232000e+01, 1.171000e+01],\n [1.369000e+04, 4.771000e+01, 2.205000e+01],\n [1.382000e+04, 2.420000e+01, 1.104000e+01],\n [1.389597e+04, 2.232000e+01, 1.171000e+01],\n [1.390000e+04, 3.683000e+01, 4.441000e+01],\n [1.395400e+04, 2.310000e+01, 1.011000e+01],\n [1.396000e+04, 4.665000e+01, 1.890000e+01],\n [1.400000e+04, 4.520000e+01, 1.364000e+01],\n [1.404100e+04, 2.346000e+01, 1.046000e+01],\n [1.410900e+04, 4.520000e+01, 1.364000e+01],\n [1.412200e+04, 2.478000e+01, 1.916000e+01],\n [1.419900e+04, 4.733000e+01, 1.697000e+01],\n [1.433937e+04, 2.476000e+01, 3.371000e+01],\n [1.440000e+04, 2.589000e+01, 1.643000e+01],\n [1.442729e+04, 4.474000e+01, 1.193000e+01],\n [1.446814e+04, 2.484000e+01, 3.331000e+01],\n [1.448810e+04, 3.554000e+01, 1.171000e+01],\n [1.458200e+04, 2.834000e+01, 2.320000e+01],\n [1.460000e+04, 2.714000e+01, 4.346000e+01],\n [1.462400e+04, 4.613000e+01, 2.700000e+01],\n [1.463500e+04, 4.613000e+01, 2.700000e+01],\n [1.464000e+04, 4.439000e+01, 1.684000e+01],\n [1.470100e+04, 2.210000e+01, 4.588000e+01],\n [1.481078e+04, 4.501000e+01, 1.325000e+01],\n [1.489878e+04, 2.386000e+01, 3.161000e+01],\n [1.507938e+04, 4.501000e+01, 1.325000e+01],\n [1.512117e+04, 2.355000e+01, 1.472000e+01],\n [1.517400e+04, 3.126000e+01, 1.696000e+01],\n [1.523800e+04, 2.492000e+01, 2.378000e+01],\n [1.524041e+04, 2.355000e+01, 1.472000e+01],\n [1.528927e+04, 2.345000e+01, 1.554000e+01],\n [1.534700e+04, 2.492000e+01, 2.378000e+01],\n [1.536708e+04, 4.501000e+01, 8.590000e+00],\n [1.540000e+04, 2.450000e+01, 2.085000e+01],\n [1.560165e+04, 2.345000e+01, 1.554000e+01],\n [1.562100e+04, 4.409000e+01, 1.019000e+01],\n [1.568455e+04, 1.865000e+01, 3.545000e+01],\n [1.599544e+04, 1.865000e+01, 3.545000e+01],\n [1.619823e+04, 2.032000e+01, 3.297000e+01],\n [1.619823e+04, 2.075000e+01, 3.310000e+01],\n [1.619951e+04, 1.790000e+01, 3.976000e+01],\n [1.620200e+04, 1.268000e+01, 4.012000e+01],\n [1.638000e+04, 2.264000e+01, 2.024000e+01],\n [1.644918e+04, 2.061000e+01, 3.224000e+01],\n [1.644918e+04, 2.087000e+01, 3.238000e+01],\n [1.660450e+04, 3.484000e+01, 9.590000e+00],\n [1.662400e+04, 1.287000e+01, 3.909000e+01],\n [1.667800e+04, 1.320000e+01, 3.884000e+01],\n [1.701000e+04, 2.721000e+01, 4.295000e+01],\n [1.711359e+04, 3.560000e+01, 9.440000e+00],\n [1.721702e+04, 3.266000e+01, 6.030000e+00],\n [1.732699e+04, 3.266000e+01, 6.030000e+00],\n [1.769205e+04, 3.632000e+01, 8.880000e+00],\n [1.783200e+04, 3.564000e+01, 2.418000e+01],\n [1.792600e+04, 3.563000e+01, 2.488000e+01],\n [1.802919e+04, 3.526000e+01, 7.680000e+00],\n [1.811583e+04, 3.348000e+01, 1.236000e+01],\n [1.815944e+04, 3.348000e+01, 1.236000e+01],\n [1.834900e+04, 3.542000e+01, 1.152000e+01],\n [1.862400e+04, 3.951000e+01, 1.937000e+01],\n [1.877383e+04, 2.676000e+01, 3.448000e+01],\n [1.877602e+04, 2.676000e+01, 3.448000e+01],\n [1.882100e+04, 2.678000e+01, 3.445000e+01],\n [1.884200e+04, 2.685000e+01, 3.451000e+01],\n [1.896000e+04, 3.951000e+01, 1.937000e+01],\n [1.903900e+04, 2.580000e+01, 2.420000e+01],\n [1.908760e+04, 3.426000e+01, 4.580000e+00],\n [1.918000e+04, 2.670000e+01, 2.480000e+01],\n [1.922827e+04, 3.426000e+01, 4.580000e+00],\n [1.924675e+04, 3.243000e+01, 7.700000e+00],\n [1.927600e+04, 3.200000e+01, 7.700000e+00],\n [1.959900e+04, 3.514000e+01, 1.065000e+01],\n [1.964010e+04, 3.446000e+01, 4.600000e+00],\n [1.965200e+04, 2.990000e+01, 2.406000e+01],\n [1.974233e+04, 3.422000e+01, 2.892000e+01],\n [1.976235e+04, 3.414000e+01, 2.934000e+01],\n [1.977612e+04, 3.446000e+01, 4.600000e+00],\n [1.993700e+04, 3.514000e+01, 1.065000e+01],\n [1.997000e+04, 3.533000e+01, 9.050000e+00],\n [2.003000e+04, 3.948000e+01, 3.080000e+01],\n [2.006000e+04, 3.911000e+01, 3.080000e+01],\n [2.011300e+04, 2.560000e+01, 2.312000e+01],\n [2.017338e+04, 2.979000e+01, 1.814000e+01],\n [2.025484e+04, 2.979000e+01, 1.814000e+01],\n [2.028500e+04, 3.009000e+01, 1.125000e+01],\n [2.057100e+04, 3.147000e+01, 2.478000e+01],\n [2.062600e+04, 2.627000e+01, 2.050000e+01],\n [2.066423e+04, 2.752000e+01, 2.014000e+01],\n [2.067360e+04, 2.840000e+01, 2.165000e+01],\n [2.068200e+04, 2.960000e+01, 1.603000e+01],\n [2.068600e+04, 3.124000e+01, 2.445000e+01],\n [2.070300e+04, 3.000000e+01, 1.125000e+01],\n [2.073600e+04, 2.627000e+01, 2.050000e+01],\n [2.075090e+04, 2.780000e+01, 2.254000e+01],\n [2.076000e+04, 2.977000e+01, 1.291000e+01],\n [2.078500e+04, 3.871000e+01, 1.575000e+01],\n [2.083648e+04, 2.780000e+01, 2.254000e+01],\n [2.089200e+04, 3.252000e+01, 9.680000e+00],\n [2.089200e+04, 3.255000e+01, 9.380000e+00],\n [2.089200e+04, 3.262000e+01, 1.026000e+01],\n [2.089200e+04, 3.324000e+01, 8.560000e+00],\n [2.090000e+04, 3.100000e+01, 1.981000e+01],\n [2.093990e+04, 2.840000e+01, 2.165000e+01],\n [2.094100e+04, 2.977000e+01, 1.291000e+01],\n [2.094900e+04, 3.100000e+01, 2.007000e+01],\n [2.107400e+04, 3.830000e+01, 1.525000e+01],\n [2.110000e+04, 2.470000e+01, 2.599000e+01],\n [2.114300e+04, 2.580000e+01, 2.196000e+01],\n [2.114300e+04, 2.580000e+01, 2.197000e+01],\n [2.121740e+04, 3.279000e+01, 1.334000e+01],\n [2.127156e+04, 3.844000e+01, 1.186000e+01],\n [2.134680e+04, 3.885000e+01, 1.243000e+01],\n [2.137900e+04, 2.944000e+01, 1.436000e+01],\n [2.147400e+04, 2.944000e+01, 1.436000e+01],\n [2.166129e+04, 3.124000e+01, 1.849000e+01],\n [2.176000e+04, 3.213000e+01, 1.785000e+01],\n [2.208167e+04, 3.176000e+01, 1.816000e+01],\n [2.214783e+04, 3.736000e+01, 1.390000e+01],\n [2.219619e+04, 3.736000e+01, 1.390000e+01],\n [2.240000e+04, 3.052000e+01, 1.785000e+01],\n [2.248200e+04, 3.010000e+01, 1.125000e+01],\n [2.261900e+04, 3.047000e+01, 1.303000e+01],\n [2.274200e+04, 3.028000e+01, 1.057000e+01]]),\n '贫煤': array([[1.695900e+04, 9.310000e+00, 4.477000e+01],\n [1.742404e+04, 1.058000e+01, 2.268000e+01],\n [1.742931e+04, 7.900000e+00, 3.840000e+01],\n [1.799800e+04, 1.175000e+01, 2.981000e+01],\n [1.875700e+04, 1.185000e+01, 3.122000e+01],\n [1.912518e+04, 7.810000e+00, 3.145000e+01],\n [1.928076e+04, 7.930000e+00, 3.137000e+01],\n [1.935228e+04, 1.119000e+01, 3.202000e+01],\n [1.938269e+04, 1.127000e+01, 3.192000e+01],\n [1.983535e+04, 1.152000e+01, 3.052000e+01],\n [1.986900e+04, 1.161000e+01, 3.042000e+01],\n [1.994000e+04, 9.370000e+00, 3.426000e+01],\n [1.994300e+04, 9.370000e+00, 3.426000e+01],\n [2.003700e+04, 1.125000e+01, 3.067000e+01],\n [2.024590e+04, 1.058000e+01, 2.654000e+01],\n [2.028730e+04, 1.120000e+01, 2.698000e+01],\n [2.031000e+04, 1.123000e+01, 3.357000e+01],\n [2.031700e+04, 1.125000e+01, 3.067000e+01],\n [2.036000e+04, 9.450000e+00, 3.077000e+01],\n [2.057000e+04, 1.185000e+01, 2.786000e+01],\n [2.075500e+04, 1.174000e+01, 2.817000e+01],\n [2.086230e+04, 1.040000e+01, 2.583000e+01],\n [2.092670e+04, 9.510000e+00, 2.515000e+01],\n [2.096500e+04, 1.258000e+01, 2.965000e+01],\n [2.097590e+04, 1.017000e+01, 2.491000e+01],\n [2.098100e+04, 1.258000e+01, 2.965000e+01],\n [2.101000e+04, 1.209000e+01, 2.169000e+01],\n [2.101980e+04, 9.410000e+00, 2.489000e+01],\n [2.103908e+04, 7.010000e+00, 2.714000e+01],\n [2.105200e+04, 1.074000e+01, 3.136000e+01],\n [2.106690e+04, 1.034000e+01, 2.481000e+01],\n [2.107710e+04, 1.017000e+01, 2.478000e+01],\n [2.110900e+04, 7.670000e+00, 2.597000e+01],\n [2.110900e+04, 1.209000e+01, 2.169000e+01],\n [2.119000e+04, 7.170000e+00, 2.591000e+01],\n [2.119400e+04, 7.190000e+00, 2.597000e+01],\n [2.119433e+04, 7.010000e+00, 2.667000e+01],\n [2.122400e+04, 1.256000e+01, 2.636000e+01],\n [2.126600e+04, 7.260000e+00, 2.567000e+01],\n [2.126900e+04, 1.174000e+01, 2.817000e+01],\n [2.157900e+04, 1.189000e+01, 2.689000e+01],\n [2.174500e+04, 1.074000e+01, 2.850000e+01],\n [2.176688e+04, 1.062000e+01, 2.687000e+01],\n [2.177291e+04, 1.066000e+01, 2.632000e+01],\n [2.190700e+04, 1.064000e+01, 2.810000e+01],\n [2.204272e+04, 1.296000e+01, 2.569000e+01],\n [2.321500e+04, 1.100000e+01, 1.931000e+01],\n [2.379100e+04, 1.100000e+01, 1.931000e+01]])}" + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coal_params_dict" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 77, + "outputs": [ + { + "data": { + "text/plain": " 地区 所属集团 投产时间 机组容量 机组类型 参数分类 冷却方式 锅炉类型 时间 \\\n0 北京 华能 1998/1/20 0:00 165 供热式 超高压 水冷 煤粉 2016.0 \n1 北京 华能 1998/1/20 0:00 165 供热式 超高压 水冷 煤粉 2016.0 \n2 北京 华能 1998/12/20 0:00 220 供热式 超高压 水冷 煤粉 2016.0 \n3 北京 华能 1999/6/26 0:00 220 供热式 超高压 水冷 煤粉 2016.0 \n4 辽宁 大唐 2009/4/30 0:00 300 供热式 亚临界 水冷 煤粉 2016.0 \n.. .. ... ... ... ... ... ... ... ... \n847 新疆 NaN NaN 1320 纯凝式 超临界 间接空冷 煤粉 NaN \n848 辽宁 NaN NaN 700 供热式 超临界 水冷 煤粉 NaN \n849 内蒙 NaN NaN 700 供热式 超临界 直接空冷 煤粉 NaN \n850 山东 NaN NaN 40 供热式 超高压 水冷 循环流化床 NaN \n851 浙江 NaN NaN 70 供热式 超高压 水冷 循环流化床 NaN \n\n 发电量 ... 标煤量 出力系数 煤种 入炉煤低位热值 燃煤挥发份Var 燃煤灰份Aar \\\n0 51841.70000 ... 2.580497e+05 75.84 烟煤 23380.0 27.59 9.94 \n1 47387.95000 ... 2.126813e+05 74.50 烟煤 23380.0 27.59 9.94 \n2 115498.04000 ... 4.410925e+05 78.76 烟煤 23380.0 27.59 9.94 \n3 120884.07000 ... 4.707218e+05 81.41 烟煤 23380.0 27.59 9.94 \n4 111218.55000 ... 3.726990e+05 71.27 褐煤 14122.0 24.78 19.16 \n.. ... ... ... ... .. ... ... ... \n847 704381.26290 ... 2.283076e+06 NaN 褐煤 19970.0 35.33 9.05 \n848 350000.00000 ... 1.328747e+06 NaN 褐煤 14640.0 44.39 16.84 \n849 385000.00000 ... 1.362009e+06 NaN 褐煤 13960.0 46.65 18.90 \n850 17000.00000 ... 1.810834e+05 NaN 烟煤 21060.0 19.12 20.27 \n851 35788.81469 ... 3.502535e+05 NaN 烟煤 22021.0 19.12 21.77 \n\n CO2_em_air 入炉煤低位热值_new 燃煤挥发份Var_new 燃煤灰份Aar_new \n0 0.235066 23380.0 27.59 9.94 \n1 0.226207 23380.0 27.59 9.94 \n2 0.220954 23380.0 27.59 9.94 \n3 0.216298 23380.0 27.59 9.94 \n4 0.238755 14122.0 24.78 19.16 \n.. ... ... ... ... \n847 0.196452 19970.0 35.33 9.05 \n848 0.185688 14640.0 44.39 16.84 \n849 0.181214 13960.0 46.65 18.90 \n850 0.347570 21060.0 19.12 20.27 \n851 0.253057 22021.0 19.12 21.77 \n\n[852 rows x 21 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
地区所属集团投产时间机组容量机组类型参数分类冷却方式锅炉类型时间发电量...标煤量出力系数煤种入炉煤低位热值燃煤挥发份Var燃煤灰份AarCO2_em_air入炉煤低位热值_new燃煤挥发份Var_new燃煤灰份Aar_new
0北京华能1998/1/20 0:00165供热式超高压水冷煤粉2016.051841.70000...2.580497e+0575.84烟煤23380.027.599.940.23506623380.027.599.94
1北京华能1998/1/20 0:00165供热式超高压水冷煤粉2016.047387.95000...2.126813e+0574.50烟煤23380.027.599.940.22620723380.027.599.94
2北京华能1998/12/20 0:00220供热式超高压水冷煤粉2016.0115498.04000...4.410925e+0578.76烟煤23380.027.599.940.22095423380.027.599.94
3北京华能1999/6/26 0:00220供热式超高压水冷煤粉2016.0120884.07000...4.707218e+0581.41烟煤23380.027.599.940.21629823380.027.599.94
4辽宁大唐2009/4/30 0:00300供热式亚临界水冷煤粉2016.0111218.55000...3.726990e+0571.27褐煤14122.024.7819.160.23875514122.024.7819.16
..................................................................
847新疆NaNNaN1320纯凝式超临界间接空冷煤粉NaN704381.26290...2.283076e+06NaN褐煤19970.035.339.050.19645219970.035.339.05
848辽宁NaNNaN700供热式超临界水冷煤粉NaN350000.00000...1.328747e+06NaN褐煤14640.044.3916.840.18568814640.044.3916.84
849内蒙NaNNaN700供热式超临界直接空冷煤粉NaN385000.00000...1.362009e+06NaN褐煤13960.046.6518.900.18121413960.046.6518.90
850山东NaNNaN40供热式超高压水冷循环流化床NaN17000.00000...1.810834e+05NaN烟煤21060.019.1220.270.34757021060.019.1220.27
851浙江NaNNaN70供热式超高压水冷循环流化床NaN35788.81469...3.502535e+05NaN烟煤22021.019.1221.770.25305722021.019.1221.77
\n

852 rows × 21 columns

\n
" + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 78, + "outputs": [], + "source": [ + "new_use_data = total_data.groupby(use_col + ['煤种'])['CO2_em_air'].mean().reset_index().drop(columns=['入炉煤低位热值_new', '燃煤挥发份Var_new', '燃煤灰份Aar_new'])\n", + "new_use_data.rename(columns={0:'CO2_em_air'}, inplace=True)\n", + "new_use_data['coal_params'] = new_use_data['煤种'].apply(lambda x: coal_params_dict.get(x))\n", + "new_use_data.drop(columns='煤种', inplace=True)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 79, + "outputs": [], + "source": [ + "new_data = new_use_data.explode(column='coal_params')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 80, + "outputs": [ + { + "data": { + "text/plain": " 地区 机组类型 参数分类 冷却方式 锅炉类型 机组容量 coal_params\n0 上海 纯凝式 亚临界 水冷 煤粉 320 [12771.0, 21.26, 33.55]\n0 上海 纯凝式 亚临界 水冷 煤粉 320 [15000.0, 23.46, 19.04]\n0 上海 纯凝式 亚临界 水冷 煤粉 320 [16100.0, 23.33, 18.73]\n0 上海 纯凝式 亚临界 水冷 煤粉 320 [16190.0, 23.33, 18.73]\n0 上海 纯凝式 亚临界 水冷 煤粉 320 [16641.0, 19.13, 39.12]\n.. ... ... ... ... ... ... ...\n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 [23253.68, 23.72, 18.45]\n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 [23380.0, 27.59, 9.94]\n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 [23487.51, 29.27, 20.97]\n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 [23650.0, 28.87, 7.91]\n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 [23656.14, 29.27, 20.97]\n\n[208875 rows x 7 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
地区机组类型参数分类冷却方式锅炉类型机组容量coal_params
0上海纯凝式亚临界水冷煤粉320[12771.0, 21.26, 33.55]
0上海纯凝式亚临界水冷煤粉320[15000.0, 23.46, 19.04]
0上海纯凝式亚临界水冷煤粉320[16100.0, 23.33, 18.73]
0上海纯凝式亚临界水冷煤粉320[16190.0, 23.33, 18.73]
0上海纯凝式亚临界水冷煤粉320[16641.0, 19.13, 39.12]
........................
646黑龙江纯凝式超高压水冷煤粉210[23253.68, 23.72, 18.45]
646黑龙江纯凝式超高压水冷煤粉210[23380.0, 27.59, 9.94]
646黑龙江纯凝式超高压水冷煤粉210[23487.51, 29.27, 20.97]
646黑龙江纯凝式超高压水冷煤粉210[23650.0, 28.87, 7.91]
646黑龙江纯凝式超高压水冷煤粉210[23656.14, 29.27, 20.97]
\n

208875 rows × 7 columns

\n
" + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_data.drop(columns=['CO2_em_air'])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 81, + "outputs": [], + "source": [ + "norm_data = pd.concat([new_data, new_data.coal_params.apply(pd.Series, index=['入炉煤低位热值_new', '燃煤挥发份Var_new', '燃煤灰份Aar_new'])], axis=1).drop(columns='coal_params')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 82, + "outputs": [ + { + "data": { + "text/plain": " 地区 机组类型 参数分类 冷却方式 锅炉类型 机组容量 CO2_em_air 入炉煤低位热值_new 燃煤挥发份Var_new \\\n0 上海 纯凝式 亚临界 水冷 煤粉 320 0.266602 12771.00 21.26 \n0 上海 纯凝式 亚临界 水冷 煤粉 320 0.266602 15000.00 23.46 \n0 上海 纯凝式 亚临界 水冷 煤粉 320 0.266602 16100.00 23.33 \n0 上海 纯凝式 亚临界 水冷 煤粉 320 0.266602 16190.00 23.33 \n0 上海 纯凝式 亚临界 水冷 煤粉 320 0.266602 16641.00 19.13 \n.. ... ... ... ... ... ... ... ... ... \n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 0.278763 23253.68 23.72 \n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 0.278763 23380.00 27.59 \n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 0.278763 23487.51 29.27 \n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 0.278763 23650.00 28.87 \n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 0.278763 23656.14 29.27 \n\n 燃煤灰份Aar_new \n0 33.55 \n0 19.04 \n0 18.73 \n0 18.73 \n0 39.12 \n.. ... \n646 18.45 \n646 9.94 \n646 20.97 \n646 7.91 \n646 20.97 \n\n[208875 rows x 10 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
地区机组类型参数分类冷却方式锅炉类型机组容量CO2_em_air入炉煤低位热值_new燃煤挥发份Var_new燃煤灰份Aar_new
0上海纯凝式亚临界水冷煤粉3200.26660212771.0021.2633.55
0上海纯凝式亚临界水冷煤粉3200.26660215000.0023.4619.04
0上海纯凝式亚临界水冷煤粉3200.26660216100.0023.3318.73
0上海纯凝式亚临界水冷煤粉3200.26660216190.0023.3318.73
0上海纯凝式亚临界水冷煤粉3200.26660216641.0019.1339.12
.................................
646黑龙江纯凝式超高压水冷煤粉2100.27876323253.6823.7218.45
646黑龙江纯凝式超高压水冷煤粉2100.27876323380.0027.599.94
646黑龙江纯凝式超高压水冷煤粉2100.27876323487.5129.2720.97
646黑龙江纯凝式超高压水冷煤粉2100.27876323650.0028.877.91
646黑龙江纯凝式超高压水冷煤粉2100.27876323656.1429.2720.97
\n

208875 rows × 10 columns

\n
" + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "norm_data" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 83, + "outputs": [], + "source": [ + "for col in num_cols:\n", + " norm_data[col] = np.log1p(norm_data[col])\n", + " # total_data[col] = (total_data[col] - total_data[col].min()) / (total_data[col].max() - total_data[col].min())\n", + "norm_data_dummy = pd.get_dummies(norm_data, columns=object_cols)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 84, + "outputs": [ + { + "data": { + "text/plain": " 机组容量 CO2_em_air 入炉煤低位热值_new 燃煤挥发份Var_new 燃煤灰份Aar_new 地区_上海 \\\n0 5.771441 0.236338 9.455011 3.102791 3.542408 1 \n0 5.771441 0.236338 9.615872 3.197039 2.997730 1 \n0 5.771441 0.236338 9.686637 3.191710 2.982140 1 \n0 5.771441 0.236338 9.692211 3.191710 2.982140 1 \n0 5.771441 0.236338 9.719685 3.002211 3.691875 1 \n.. ... ... ... ... ... ... \n646 5.351858 0.245893 10.054262 3.207613 2.967847 0 \n646 5.351858 0.245893 10.059679 3.353057 2.392426 0 \n646 5.351858 0.245893 10.064267 3.410157 3.089678 0 \n646 5.351858 0.245893 10.071161 3.396855 2.187174 0 \n646 5.351858 0.245893 10.071420 3.410157 3.089678 0 \n\n 地区_云南 地区_内蒙 地区_北京 地区_吉林 ... 机组类型_纯凝式 参数分类_亚临界 参数分类_超临界 参数分类_超超临界 \\\n0 0 0 0 0 ... 1 1 0 0 \n0 0 0 0 0 ... 1 1 0 0 \n0 0 0 0 0 ... 1 1 0 0 \n0 0 0 0 0 ... 1 1 0 0 \n0 0 0 0 0 ... 1 1 0 0 \n.. ... ... ... ... ... ... ... ... ... \n646 0 0 0 0 ... 1 0 0 0 \n646 0 0 0 0 ... 1 0 0 0 \n646 0 0 0 0 ... 1 0 0 0 \n646 0 0 0 0 ... 1 0 0 0 \n646 0 0 0 0 ... 1 0 0 0 \n\n 参数分类_超高压 冷却方式_水冷 冷却方式_直接空冷 冷却方式_间接空冷 锅炉类型_循环流化床 锅炉类型_煤粉 \n0 0 1 0 0 0 1 \n0 0 1 0 0 0 1 \n0 0 1 0 0 0 1 \n0 0 1 0 0 0 1 \n0 0 1 0 0 0 1 \n.. ... ... ... ... ... ... \n646 1 1 0 0 0 1 \n646 1 1 0 0 0 1 \n646 1 1 0 0 0 1 \n646 1 1 0 0 0 1 \n646 1 1 0 0 0 1 \n\n[208875 rows x 45 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
机组容量CO2_em_air入炉煤低位热值_new燃煤挥发份Var_new燃煤灰份Aar_new地区_上海地区_云南地区_内蒙地区_北京地区_吉林...机组类型_纯凝式参数分类_亚临界参数分类_超临界参数分类_超超临界参数分类_超高压冷却方式_水冷冷却方式_直接空冷冷却方式_间接空冷锅炉类型_循环流化床锅炉类型_煤粉
05.7714410.2363389.4550113.1027913.54240810000...1100010001
05.7714410.2363389.6158723.1970392.99773010000...1100010001
05.7714410.2363389.6866373.1917102.98214010000...1100010001
05.7714410.2363389.6922113.1917102.98214010000...1100010001
05.7714410.2363389.7196853.0022113.69187510000...1100010001
..................................................................
6465.3518580.24589310.0542623.2076132.96784700000...1000110001
6465.3518580.24589310.0596793.3530572.39242600000...1000110001
6465.3518580.24589310.0642673.4101573.08967800000...1000110001
6465.3518580.24589310.0711613.3968552.18717400000...1000110001
6465.3518580.24589310.0714203.4101573.08967800000...1000110001
\n

208875 rows × 45 columns

\n
" + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "norm_data_dummy" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 85, + "outputs": [], + "source": [ + "new_xgb_data = xgb.DMatrix(norm_data_dummy[feature_cols])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 86, + "outputs": [], + "source": [ + "norm_data.drop(columns='CO2_em_air', inplace=True)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 87, + "outputs": [], + "source": [ + "norm_data['co2_pred'] = gb_model.predict(new_xgb_data)\n", + "normaled_data = norm_data.drop(columns=['入炉煤低位热值_new', '燃煤挥发份Var_new', '燃煤灰份Aar_new']).groupby([x for x in use_col if x not in ['CO2_em_air', '入炉煤低位热值_new', '燃煤挥发份Var_new', '燃煤灰份Aar_new']])['co2_pred'].mean()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "normaled_data.reset_index().to_csv('./data/去煤种化数据.csv', encoding='utf-8-sig', index=False)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.7.13 ('py37')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.13" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "993bd31d5df1020fab369d79a34ff0a2a159e1798f3e25d3ad4b7751d38184c9" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/data_extract.ipynb b/data_extract.ipynb new file mode 100644 index 0000000..d56cbfb --- /dev/null +++ b/data_extract.ipynb @@ -0,0 +1,892 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "files_old = [x for x in os.listdir('./new_data/') if x.endswith('xls') and '经济性' in x]\n", + "files_new = [x for x in os.listdir('./火电20230313/火电20230313F/') if '经济性' in x]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "outputs": [], + "source": [ + "data = pd.read_excel(f'./new_data/{files_old[0]}', header=[3,4,5])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 4, + "outputs": [ + { + "data": { + "text/plain": "['序号',\n '机组编号',\n '时间',\n '发电量(万kWh)',\n '供电量(万kWh)',\n '标煤量(t)',\n '发电用标煤量(t)',\n '供热用标煤量(t)',\n '利用小时(h)',\n '平均负荷(MW)',\n '出力系数(%)',\n '出力系数(%)',\n '出力系数(%)',\n '工业供热量',\n '工业热电比(%)',\n '采暖供热量',\n '采暖热电比(%)',\n '总热电比(%)',\n '总供热量',\n '供热煤耗',\n '给水泵汽轮机总耗热量',\n '供电煤耗gce/(kWh)',\n '综合厂用电率(%)',\n '发电厂用电率(%)',\n '供热厂用电率(%)',\n '非生产厂用电率(%)',\n '最新THA工况二类修正后汽机热耗率kJ/KWh',\n '点火用油(kg/万kWh)',\n '助燃用油(kg/万kWh)',\n '主蒸汽压力(MPa)',\n '主蒸汽温度(℃)',\n '再热蒸汽温度(℃)',\n '高加投入率(%)',\n '给水温度(℃)',\n '真空严密性V(Pa/min)',\n '真空度(%)',\n '凝汽器端差(℃)',\n '凝结水过冷度(℃)',\n '发电补给水率(%)',\n '发电综合耗水率',\n '排烟温度(℃)',\n '飞灰含碳量(%)',\n '空预器漏风率(%)',\n '过热器减温水量(t/h)',\n '再热器减温水量(t/h)',\n '入厂煤低位热值(kJ/kg)',\n '入炉煤低位热值(kJ/kg)',\n '燃煤挥发份Var(%)',\n '燃煤灰份Aar(%)',\n '燃煤低位热值Qar,net(kJ/kg)',\n '燃煤硫份Sar(%)',\n '锅炉专业主要辅机耗电率 送风机耗电率(%)',\n '锅炉专业主要辅机耗电率 引风机耗电率(%)',\n '锅炉专业主要辅机耗电率 一次风机耗电率(%)',\n '锅炉专业主要辅机耗电率 炉水泵耗电率(%)',\n '锅炉专业主要辅机耗电率 给煤机耗电率(%)',\n '锅炉专业主要辅机耗电率 磨煤机耗电率(%)',\n '锅炉专业主要辅机耗电率 电除尘器耗电率(%)',\n '锅炉专业主要辅机耗电率 除灰系统耗电率(%)',\n '汽机专业主要辅机耗电率 凝结水泵耗电率(%)',\n '汽机专业主要辅机耗电率 前置泵耗电率(%)',\n '汽机专业主要辅机耗电率 电动给水泵耗电率(%)',\n '汽机专业主要辅机耗电率 循环水泵耗电率(%)',\n '汽机专业主要辅机耗电率 空冷风机耗电率(%)',\n '汽机专业主要辅机耗电率 热网循环水泵耗电率(%)',\n '环保专业耗电率 脱硫系统耗电率(%)',\n '环保专业耗电率 脱销系统耗电率(%)',\n '输煤专业耗电率输煤系统耗电率(%)',\n '化学系统耗电率 (%)',\n '化学系统耗电率 (%)']" + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cols = [''.join([x for x in y if 'Unnamed' not in x]) for y in data.columns]\n", + "cols" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 5, + "outputs": [], + "source": [ + "data_list = list()\n", + "for file in files_old:\n", + " data = pd.read_excel(f'./new_data/{file}', header=[3,4,5])\n", + " data.columns = cols\n", + " plant = file.split('-')[0]\n", + " data['时间'] = data['时间'].astype(str)\n", + " use_data = data[~data['时间'].str.contains('半年')].copy()\n", + " use_data['电厂名称'] = plant\n", + " data_list.append(use_data)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 6, + "outputs": [], + "source": [ + "for file in files_new:\n", + " data = pd.read_excel(f'./火电20230313/火电20230313F/{file}', header=[3,4,5])\n", + " data.columns = cols\n", + " plant = file.split('-')[0]\n", + " data['时间'] = data['时间'].astype(str)\n", + " use_data = data[~data['时间'].str.contains('半年')].copy()\n", + " use_data['电厂名称'] = plant\n", + " data_list.append(use_data)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 7, + "outputs": [], + "source": [ + "run_data = pd.concat(data_list, axis=0)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 8, + "outputs": [], + "source": [ + "run_data.drop(columns=['序号'], inplace=True)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 10, + "outputs": [], + "source": [ + "run_data.drop_duplicates(inplace=True)\n", + "run_data.reset_index(inplace=True, drop=True)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 11, + "outputs": [ + { + "data": { + "text/plain": "(17616, 70)" + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "run_data.shape" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 12, + "outputs": [], + "source": [ + "run_data_max = run_data.groupby(['电厂名称', '机组编号', '时间']).max().reset_index()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "### 机组信息" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 13, + "outputs": [ + { + "data": { + "text/plain": "['中国中信集团公司-32020-电厂机组数据查询-20230313.xls',\n '中国中煤能源集团有限公司-34027-电厂机组数据查询-20230313.xls',\n '中国华电集团有限公司-21060-电厂机组数据查询-20230313.xls',\n '中国华能集团有限公司-17021-电厂机组数据查询-20230313.xls',\n '中国大唐集团有限公司-61005-电厂机组数据查询-20230313.xls']" + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "old_units = [x for x in os.listdir('./new_data/') if '电厂机组' in x]\n", + "new_units = [x for x in os.listdir('./火电20230313/火电20230313/') if '电厂机组' in x]\n", + "new_units[:5]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 14, + "outputs": [ + { + "data": { + "text/plain": "['序号',\n '企业编码',\n '电厂名称',\n '简称',\n '机组编号',\n '铭牌容量 (MW)',\n '投产时间',\n '机组类型',\n '参数分类',\n '所处地区',\n '机组产地',\n '锅炉制造厂家',\n '汽轮机制造厂家',\n '发电机制造厂家',\n '主变压器制造厂家',\n '二级公司',\n '所属集团',\n '所属电网',\n '所属电网']" + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "unit_samples = pd.read_excel(f'./new_data/{old_units[0]}', header=[3,4])\n", + "unit_cols = [''.join([x for x in y if 'Unnamed' not in x]) for y in unit_samples.columns]\n", + "unit_cols" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 15, + "outputs": [], + "source": [ + "unit_list = list()\n", + "for file in old_units:\n", + " data = pd.read_excel(f'./new_data/{file}', header=[3,4])\n", + " data.columns = unit_cols\n", + " unit_list.append(data)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 16, + "outputs": [], + "source": [ + "# unit_list = list()\n", + "for file in new_units:\n", + " data = pd.read_excel(f'./火电20230313/火电20230313/{file}', header=[3,4])\n", + " data.columns = unit_cols\n", + " unit_list.append(data)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 17, + "outputs": [], + "source": [ + "units_df = pd.concat(unit_list).drop(columns=['序号', '所属电网']).drop_duplicates().reset_index(drop=True)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 18, + "outputs": [ + { + "data": { + "text/plain": " 企业编码 电厂名称 简称 机组编号 铭牌容量 (MW) 投产时间 机组类型 参数分类 \\\n1388 33008 国能浙江北仑第一发电有限公司 国家能源浙江北仑 2 630.0 1994-11-18 纯凝式 亚临界 \n1389 33008 国能浙江北仑第一发电有限公司 国家能源浙江北仑 1 630.0 1991-10-30 纯凝式 亚临界 \n1390 33008 国能浙江北仑第一发电有限公司 国家能源浙江北仑 3 660.0 2000-9-28 纯凝式 亚临界 \n1391 33008 国能浙江北仑第一发电有限公司 国家能源浙江北仑 7 1000.0 2009-6-2 纯凝式 超超临界 \n1392 33008 国能浙江北仑第一发电有限公司 国家能源浙江北仑 6 1050.0 2008-12-20 纯凝式 超超临界 \n1393 33008 国能浙江北仑第一发电有限公司 国家能源浙江北仑 5 660.0 2000-7-28 纯凝式 亚临界 \n1394 33008 国能浙江北仑第一发电有限公司 国家能源浙江北仑 4 660.0 2000-7-8 纯凝式 亚临界 \n1891 33008 国能浙江北仑第一发电有限公司 国家能源浙江北仑 7 1050.0 2009-6-2 纯凝式 超超临界 \n\n 所处地区 机组产地 锅炉制造厂家 汽轮机制造厂家 发电机制造厂家 主变压器制造厂家 \\\n1388 浙江省 进口 加拿大巴布科克威尔科克斯公司 法国阿尔斯通 法国阿尔斯通 法国阿尔斯通公司 \n1389 浙江省 进口 美国燃烧工程公司 日本东芝公司 日本东芝公司 日本东芝公司 \n1390 浙江省 进口 日本石川岛播磨株式会社 日本东芝公司 日本东芝公司 日本东芝公司 \n1391 浙江省 国产 东方锅炉厂(东锅) 上海汽轮机厂(上汽) 上海电机厂(上电) 保定天威保变电气股份有限公司 \n1392 浙江省 国产 东方锅炉厂(东锅) 上海汽轮机厂(上汽) 上海电机厂(上电) 保定天威保变电气股份有限公司 \n1393 浙江省 进口 日本石川岛播磨株式会社 日本东芝公司 日本东芝公司 日本东芝公司 \n1394 浙江省 进口 日本石川岛播磨株式会社 日本东芝公司 日本东芝公司 日本东芝公司 \n1891 浙江省 国产 东方锅炉厂(东锅) 上海汽轮机厂(上汽) 上海电机厂(上电) 保定天威保变电气股份有限公司 \n\n 二级公司 所属集团 \n1388 北京国华电力有限责任公司 国家能源投资集团有限责任公司 \n1389 北京国华电力有限责任公司 国家能源投资集团有限责任公司 \n1390 北京国华电力有限责任公司 国家能源投资集团有限责任公司 \n1391 北京国华电力有限责任公司 国家能源投资集团有限责任公司 \n1392 北京国华电力有限责任公司 国家能源投资集团有限责任公司 \n1393 北京国华电力有限责任公司 国家能源投资集团有限责任公司 \n1394 北京国华电力有限责任公司 国家能源投资集团有限责任公司 \n1891 北京国华电力有限责任公司 国家能源投资集团有限责任公司 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
企业编码电厂名称简称机组编号铭牌容量 (MW)投产时间机组类型参数分类所处地区机组产地锅炉制造厂家汽轮机制造厂家发电机制造厂家主变压器制造厂家二级公司所属集团
138833008国能浙江北仑第一发电有限公司国家能源浙江北仑2630.01994-11-18纯凝式亚临界浙江省进口加拿大巴布科克威尔科克斯公司法国阿尔斯通法国阿尔斯通法国阿尔斯通公司北京国华电力有限责任公司国家能源投资集团有限责任公司
138933008国能浙江北仑第一发电有限公司国家能源浙江北仑1630.01991-10-30纯凝式亚临界浙江省进口美国燃烧工程公司日本东芝公司日本东芝公司日本东芝公司北京国华电力有限责任公司国家能源投资集团有限责任公司
139033008国能浙江北仑第一发电有限公司国家能源浙江北仑3660.02000-9-28纯凝式亚临界浙江省进口日本石川岛播磨株式会社日本东芝公司日本东芝公司日本东芝公司北京国华电力有限责任公司国家能源投资集团有限责任公司
139133008国能浙江北仑第一发电有限公司国家能源浙江北仑71000.02009-6-2纯凝式超超临界浙江省国产东方锅炉厂(东锅)上海汽轮机厂(上汽)上海电机厂(上电)保定天威保变电气股份有限公司北京国华电力有限责任公司国家能源投资集团有限责任公司
139233008国能浙江北仑第一发电有限公司国家能源浙江北仑61050.02008-12-20纯凝式超超临界浙江省国产东方锅炉厂(东锅)上海汽轮机厂(上汽)上海电机厂(上电)保定天威保变电气股份有限公司北京国华电力有限责任公司国家能源投资集团有限责任公司
139333008国能浙江北仑第一发电有限公司国家能源浙江北仑5660.02000-7-28纯凝式亚临界浙江省进口日本石川岛播磨株式会社日本东芝公司日本东芝公司日本东芝公司北京国华电力有限责任公司国家能源投资集团有限责任公司
139433008国能浙江北仑第一发电有限公司国家能源浙江北仑4660.02000-7-8纯凝式亚临界浙江省进口日本石川岛播磨株式会社日本东芝公司日本东芝公司日本东芝公司北京国华电力有限责任公司国家能源投资集团有限责任公司
189133008国能浙江北仑第一发电有限公司国家能源浙江北仑71050.02009-6-2纯凝式超超临界浙江省国产东方锅炉厂(东锅)上海汽轮机厂(上汽)上海电机厂(上电)保定天威保变电气股份有限公司北京国华电力有限责任公司国家能源投资集团有限责任公司
\n
" + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "units_df[units_df['电厂名称']=='国能浙江北仑第一发电有限公司']" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 19, + "outputs": [ + { + "data": { + "text/plain": "(1934, 16)" + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "units_df.shape" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 20, + "outputs": [ + { + "data": { + "text/plain": " 企业编码 电厂名称 简称 机组编号 铭牌容量 (MW) 投产时间 机组类型 参数分类 所处地区 \\\n1812 61022 陕西渭河发电有限公司 陕西省投咸阳渭河 3 320.0 1992-7-1 纯凝式 亚临界 陕西省 \n1928 61022 陕西渭河发电有限公司 陕西省投咸阳渭河 3 320.0 1992-7-1 纯凝式 亚临界 陕西省 \n\n 机组产地 锅炉制造厂家 汽轮机制造厂家 发电机制造厂家 主变压器制造厂家 二级公司 所属集团 \n1812 国产 上海锅炉厂(上锅) 哈尔滨汽轮机厂(哈汽) 哈尔滨电机厂(哈电) 沈变 NaN 陕西投资集团有限公司 \n1928 国产 上海锅炉厂(上锅) 上海汽轮机厂(上汽) 上海电机厂(上电) 西安西电变压器厂 NaN 陕西投资集团有限公司 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
企业编码电厂名称简称机组编号铭牌容量 (MW)投产时间机组类型参数分类所处地区机组产地锅炉制造厂家汽轮机制造厂家发电机制造厂家主变压器制造厂家二级公司所属集团
181261022陕西渭河发电有限公司陕西省投咸阳渭河3320.01992-7-1纯凝式亚临界陕西省国产上海锅炉厂(上锅)哈尔滨汽轮机厂(哈汽)哈尔滨电机厂(哈电)沈变NaN陕西投资集团有限公司
192861022陕西渭河发电有限公司陕西省投咸阳渭河3320.01992-7-1纯凝式亚临界陕西省国产上海锅炉厂(上锅)上海汽轮机厂(上汽)上海电机厂(上电)西安西电变压器厂NaN陕西投资集团有限公司
\n
" + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "units_df[(units_df['电厂名称']=='陕西渭河发电有限公司')&(units_df['机组编号']==3)]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 21, + "outputs": [ + { + "data": { + "text/plain": " 企业编码 电厂名称 简称 机组编号 铭牌容量 (MW) 投产时间 机组类型 参数分类 \\\n1391 33008 国能浙江北仑第一发电有限公司 国家能源浙江北仑 7 1000.0 2009-6-2 纯凝式 超超临界 \n\n 所处地区 机组产地 锅炉制造厂家 汽轮机制造厂家 发电机制造厂家 主变压器制造厂家 \\\n1391 浙江省 国产 东方锅炉厂(东锅) 上海汽轮机厂(上汽) 上海电机厂(上电) 保定天威保变电气股份有限公司 \n\n 二级公司 所属集团 \n1391 北京国华电力有限责任公司 国家能源投资集团有限责任公司 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
企业编码电厂名称简称机组编号铭牌容量 (MW)投产时间机组类型参数分类所处地区机组产地锅炉制造厂家汽轮机制造厂家发电机制造厂家主变压器制造厂家二级公司所属集团
139133008国能浙江北仑第一发电有限公司国家能源浙江北仑71000.02009-6-2纯凝式超超临界浙江省国产东方锅炉厂(东锅)上海汽轮机厂(上汽)上海电机厂(上电)保定天威保变电气股份有限公司北京国华电力有限责任公司国家能源投资集团有限责任公司
\n
" + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "units_df[(units_df['电厂名称']=='国能浙江北仑第一发电有限公司')&(units_df['机组编号']==7)&(units_df['铭牌容量 (MW)']==1000.0)]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 22, + "outputs": [], + "source": [ + "drop_units = units_df[(units_df['电厂名称']=='国能浙江北仑第一发电有限公司')&(units_df['机组编号']==7)&(units_df['铭牌容量 (MW)']==1000.0)].index.values\n", + "units_df.drop(index=drop_units, inplace=True)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 23, + "outputs": [ + { + "data": { + "text/plain": " 企业编码 电厂名称 简称 机组编号 铭牌容量 (MW) 投产时间 机组类型 参数分类 \\\n1891 33008 国能浙江北仑第一发电有限公司 国家能源浙江北仑 7 1050.0 2009-6-2 纯凝式 超超临界 \n\n 所处地区 机组产地 锅炉制造厂家 汽轮机制造厂家 发电机制造厂家 主变压器制造厂家 \\\n1891 浙江省 国产 东方锅炉厂(东锅) 上海汽轮机厂(上汽) 上海电机厂(上电) 保定天威保变电气股份有限公司 \n\n 二级公司 所属集团 \n1891 北京国华电力有限责任公司 国家能源投资集团有限责任公司 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
企业编码电厂名称简称机组编号铭牌容量 (MW)投产时间机组类型参数分类所处地区机组产地锅炉制造厂家汽轮机制造厂家发电机制造厂家主变压器制造厂家二级公司所属集团
189133008国能浙江北仑第一发电有限公司国家能源浙江北仑71050.02009-6-2纯凝式超超临界浙江省国产东方锅炉厂(东锅)上海汽轮机厂(上汽)上海电机厂(上电)保定天威保变电气股份有限公司北京国华电力有限责任公司国家能源投资集团有限责任公司
\n
" + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "units_df[(units_df['电厂名称']=='国能浙江北仑第一发电有限公司')&(units_df['机组编号']==7)]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 24, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: Dropping invalid columns in DataFrameGroupBy.max is deprecated. In a future version, a TypeError will be raised. Before calling .max, select only columns which should be valid for the function.\n", + " \"\"\"Entry point for launching an IPython kernel.\n" + ] + } + ], + "source": [ + "units_max = units_df.groupby(['电厂名称', '机组编号', '投产时间']).max().reset_index()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 25, + "outputs": [ + { + "data": { + "text/plain": "(1926, 13)" + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "units_max.shape" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 26, + "outputs": [ + { + "data": { + "text/plain": " 电厂名称 机组编号 投产时间 企业编码 简称 铭牌容量 (MW) 机组类型 \\\n0 万方发电厂(焦作爱依斯万方电力有限公司) 1 1997-8-17 41020 河南焦作万方 125.0 纯凝式 \n1 万方发电厂(焦作爱依斯万方电力有限公司) 2 1998-7-8 41020 河南焦作万方 125.0 纯凝式 \n2 三河发电有限责任公司 1 1999-12-17 13032 国家能源河北三河 350.0 供热式 \n3 三河发电有限责任公司 2 2000-4-2 13032 国家能源河北三河 350.0 供热式 \n4 三河发电有限责任公司 3 2007-8-31 13032 国家能源河北三河 315.0 供热式 \n... ... ... ... ... ... ... ... \n1921 黔桂发电有限责任公司 1 1994-1-16 74009 金元贵州盘县 200.0 纯凝式 \n1922 黔桂发电有限责任公司 2 1994-10-26 74009 金元贵州盘县 200.0 纯凝式 \n1923 黔桂发电有限责任公司 3 1996-10-14 74009 金元贵州盘县 200.0 纯凝式 \n1924 黔桂发电有限责任公司 4 2001-4-9 74009 金元贵州盘县 200.0 纯凝式 \n1925 黔桂发电有限责任公司 5 2001-8-25 74009 金元贵州盘县 200.0 纯凝式 \n\n 参数分类 所处地区 机组产地 锅炉制造厂家 二级公司 所属集团 \n0 超高压 河南省 国产 上海锅炉厂(上锅) NaN 其他 \n1 超高压 河南省 国产 上海锅炉厂(上锅) NaN 其他 \n2 亚临界 河北省 进口 日本三菱公司 北京国华电力有限责任公司 国家能源投资集团有限责任公司 \n3 亚临界 河北省 进口 日本三菱公司 北京国华电力有限责任公司 国家能源投资集团有限责任公司 \n4 亚临界 河北省 国产 东方锅炉厂(东锅) 北京国华电力有限责任公司 国家能源投资集团有限责任公司 \n... ... ... ... ... ... ... \n1921 超高压 贵州省 国产 东方锅炉厂(东锅) 贵州金元电力投资股份有限公司 国家电力投资集团有限公司 \n1922 超高压 贵州省 国产 东方锅炉厂(东锅) 贵州金元电力投资股份有限公司 国家电力投资集团有限公司 \n1923 超高压 贵州省 国产 东方锅炉厂(东锅) 贵州金元电力投资股份有限公司 国家电力投资集团有限公司 \n1924 超高压 贵州省 国产 东方锅炉厂(东锅) 贵州金元电力投资股份有限公司 国家电力投资集团有限公司 \n1925 超高压 贵州省 国产 东方锅炉厂(东锅) 贵州金元电力投资股份有限公司 国家电力投资集团有限公司 \n\n[1926 rows x 13 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
电厂名称机组编号投产时间企业编码简称铭牌容量 (MW)机组类型参数分类所处地区机组产地锅炉制造厂家二级公司所属集团
0万方发电厂(焦作爱依斯万方电力有限公司)11997-8-1741020河南焦作万方125.0纯凝式超高压河南省国产上海锅炉厂(上锅)NaN其他
1万方发电厂(焦作爱依斯万方电力有限公司)21998-7-841020河南焦作万方125.0纯凝式超高压河南省国产上海锅炉厂(上锅)NaN其他
2三河发电有限责任公司11999-12-1713032国家能源河北三河350.0供热式亚临界河北省进口日本三菱公司北京国华电力有限责任公司国家能源投资集团有限责任公司
3三河发电有限责任公司22000-4-213032国家能源河北三河350.0供热式亚临界河北省进口日本三菱公司北京国华电力有限责任公司国家能源投资集团有限责任公司
4三河发电有限责任公司32007-8-3113032国家能源河北三河315.0供热式亚临界河北省国产东方锅炉厂(东锅)北京国华电力有限责任公司国家能源投资集团有限责任公司
..........................................
1921黔桂发电有限责任公司11994-1-1674009金元贵州盘县200.0纯凝式超高压贵州省国产东方锅炉厂(东锅)贵州金元电力投资股份有限公司国家电力投资集团有限公司
1922黔桂发电有限责任公司21994-10-2674009金元贵州盘县200.0纯凝式超高压贵州省国产东方锅炉厂(东锅)贵州金元电力投资股份有限公司国家电力投资集团有限公司
1923黔桂发电有限责任公司31996-10-1474009金元贵州盘县200.0纯凝式超高压贵州省国产东方锅炉厂(东锅)贵州金元电力投资股份有限公司国家电力投资集团有限公司
1924黔桂发电有限责任公司42001-4-974009金元贵州盘县200.0纯凝式超高压贵州省国产东方锅炉厂(东锅)贵州金元电力投资股份有限公司国家电力投资集团有限公司
1925黔桂发电有限责任公司52001-8-2574009金元贵州盘县200.0纯凝式超高压贵州省国产东方锅炉厂(东锅)贵州金元电力投资股份有限公司国家电力投资集团有限公司
\n

1926 rows × 13 columns

\n
" + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "units_max" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "### 汽轮机数据" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 27, + "outputs": [ + { + "data": { + "text/plain": "['中国中信集团公司-32020-汽轮机数据查询-20230313.xls',\n '中国中煤能源集团有限公司-34027-汽轮机数据查询-20230313.xls',\n '中国华电集团有限公司-21060-汽轮机数据查询-20230313.xls',\n '中国华能集团有限公司-17021-汽轮机数据查询-20230313.xls',\n '中国大唐集团有限公司-61005-汽轮机数据查询-20230313.xls',\n '中国铝业股份有限公司-64011-汽轮机数据查询-20230313.xls',\n '中国长江三峡集团公司-42011-汽轮机数据查询-20230313.xls',\n '其他-47001-汽轮机数据查询-20230313.xls',\n '内蒙古源源能源集团有限责任公司-15050-汽轮机数据查询-20230313.xls',\n '内蒙古能源发电投资集团有限公司-15047-汽轮机数据查询-20230313.xls',\n '北京能源集团有限责任公司-64009-汽轮机数据查询-20230313.xls',\n '华润(集团)有限公司-13008-汽轮机数据查询-20230313.xls',\n '协鑫集团有限公司-32036-汽轮机数据查询-20230313.xls',\n '国家开发投资公司-37009-汽轮机数据查询-20230313.xls',\n '国家开发投资集团有限公司-16014-汽轮机数据查询-20230313.xls',\n '国家电力投资集团有限公司-21018-汽轮机数据查询-20230313.xls',\n '国家能源投资集团有限责任公司-23012-汽轮机数据查询-20230313.xls',\n '安徽省能源集团有限公司-34003-汽轮机数据查询-20230313.xls',\n '山西国际能源集团有限公司-14088-汽轮机数据查询-20230313.xls',\n '山西焦煤集团有限公司-14099-汽轮机数据查询-20230313.xls',\n '广东省能源集团有限公司-71003-汽轮机数据查询-20230313.xls',\n '广州发展集团股份有限公司-71021-汽轮机数据查询-20230313.xls',\n '新疆天山电力股份有限公司-65004-汽轮机数据查询-20230313.xls',\n '晋能控股电力集团-14022-汽轮机数据查询-20230313.xls',\n '江苏省国信集团有限公司-32015-汽轮机数据查询-20230313.xls',\n '江西省投资集团有限公司-44020-汽轮机数据查询-20230313.xls',\n '河北建设投资集团有限责任公司-13056-汽轮机数据查询-20230313.xls',\n '河南投资集团有限公司-41014-汽轮机数据查询-20230313.xls',\n '浙江省能源集团有限公司-33001-汽轮机数据查询-20230313.xls',\n '深圳能源集团股份有限公司-71022-汽轮机数据查询-20230313.xls',\n '甘肃省电力投资集团有限责任公司-62006-汽轮机数据查询-20230313.xls',\n '申能股份有限公司-35016-汽轮机数据查询-20230313.xls',\n '陕西投资集团有限公司-61040-汽轮机数据查询-20230313.xls',\n '陕西榆林能源集团有限公司-61041-汽轮机数据查询-20230313.xls',\n '陕西煤业化工集团有限责任公司-43014-汽轮机数据查询-20230313.xls']" + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "old_steam = [x for x in os.listdir('./new_data/') if '汽轮机' in x]\n", + "steam_data = [x for x in os.listdir('./火电20230313/火电20230313/') if '汽轮机' in x]\n", + "steam_data" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 28, + "outputs": [ + { + "data": { + "text/plain": "['序号',\n '企业编码',\n '电厂名称',\n '简称',\n '机组编号',\n '制造厂家',\n '型号',\n '出厂编号',\n '出厂编号',\n '汽轮机缸效率高压缸(%)',\n '汽轮机缸效率中压缸(%)',\n '汽轮机缸效率低压缸(%)',\n '最大连续出力T-MCR(MW)',\n '额定主蒸汽压力(MPa)',\n '额定主蒸汽温度(℃)',\n '额定再热汽温度(℃)',\n '设计给水温度(℃)',\n '凝汽式机组保证热耗率(kJ/kWh)',\n '凝汽式汽机设计背压(kPa)',\n '供热式机组保证热耗率额定供热工况(kJ/kWh)',\n '供热式机组保证热耗率纯凝工况(kJ/kWh)',\n '供热式汽机设计背压供热工况(kPa)',\n '供热式汽机设计背压纯凝工况(kPa)',\n '设计供热抽汽压力工业(MPa)',\n '设计供热抽汽压力采暖(MPa)',\n '设计供热抽汽温度工业(℃)',\n '设计供热抽汽温度采暖(℃)',\n '设计最大供热抽汽流量工业(t/h)',\n '设计最大供热抽汽流量采暖(t/h)',\n '凝结水泵制造厂家',\n '凝结水泵型号',\n '凝结水泵电机电压(V)',\n '凝结水泵电机功率(kW)',\n '凝结水泵凝结水泵流量(t/h)',\n '循环水泵制造厂家',\n '循环水泵型号',\n '循环水泵电机电压(V)',\n '循环水泵电机功率(kW)',\n '循环水泵循环水泵流量(t/h)',\n '给水泵汽轮机制造厂',\n '给水泵汽轮机型号',\n '给水泵汽轮机出力比(%)',\n '给水泵汽轮机台数(台)',\n '给水泵汽轮机额定功率(KW)',\n '给水泵汽轮机内效率(%)',\n '给水泵汽轮机额定进汽压力(MPa)',\n '给水泵汽轮机额定排汽压力(kPa)',\n '给水泵汽轮机额定进汽温度(℃)',\n '给水泵汽轮机额定排汽温度(℃)',\n '给水泵汽轮机额定蒸汽流量(t/h)',\n '电动给水泵制造厂',\n '电动给水泵型号',\n '电动给水泵出力比(%)',\n '电动给水泵台数(台)',\n '电动给水泵给水泵流量(t/h)',\n '电动给水泵给水泵压力(MPa)',\n '旁路系统型式',\n '旁路系统旁路蒸汽量比率(%)',\n '冷凝器制造厂家',\n '冷凝器型号',\n '冷凝器型式',\n '循环水介质及比例地表水(%)',\n '循环水介质及比例地下水(%)',\n '循环水介质及比例中水(%)',\n '循环水介质及比例海水(%)',\n '循环水循环方式',\n '循环冷却倍率(%)',\n '开式循环水提升高度(m)',\n '空冷机组出力受阻背压(kPa)',\n '空冷机组出力受阻背压(kPa).1']" + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "steam_samples = pd.read_excel(f'./new_data/{old_steam[0]}', header=[3,4,5])\n", + "steam_cols = [''.join([x for x in y if 'Unnamed' not in x]) for y in steam_samples.columns]\n", + "steam_cols" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 29, + "outputs": [], + "source": [ + "steam_list = list()\n", + "for file in old_steam:\n", + " data = pd.read_excel(f'./new_data/{file}', header=[3, 4, 5])\n", + " data.columns = steam_cols\n", + " steam_list.append(data)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 30, + "outputs": [], + "source": [ + "# unit_list = list()\n", + "for file in steam_data:\n", + " data = pd.read_excel(f'./火电20230313/火电20230313/{file}', header=[3,4,5])\n", + " data.columns = steam_cols\n", + " steam_list.append(data)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 31, + "outputs": [], + "source": [ + "steam_df = pd.concat(steam_list).drop(columns=['序号', '空冷机组出力受阻背压(kPa).1']).drop_duplicates().reset_index(drop=True)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 32, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: Dropping invalid columns in DataFrameGroupBy.max is deprecated. In a future version, a TypeError will be raised. Before calling .max, select only columns which should be valid for the function.\n", + " \"\"\"Entry point for launching an IPython kernel.\n" + ] + } + ], + "source": [ + "steam_max = steam_df.groupby(['电厂名称', '机组编号']).max().reset_index()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "### 锅炉数据" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 33, + "outputs": [ + { + "data": { + "text/plain": "['中国中信集团公司-32020-锅炉数据查询-20230313.xls',\n '中国中煤能源集团有限公司-34027-锅炉数据查询-20230313.xls',\n '中国华电集团有限公司-21060-锅炉数据查询-20230313.xls',\n '中国华能集团有限公司-17021-锅炉数据查询-20230313.xls',\n '中国大唐集团有限公司-61005-锅炉数据查询-20230313.xls',\n '中国铝业股份有限公司-64011-锅炉数据查询-20230313.xls',\n '中国长江三峡集团公司-42011-锅炉数据查询-20230313.xls',\n '其他-47001-锅炉数据查询-20230313.xls',\n '内蒙古源源能源集团有限责任公司-15050-锅炉数据查询-20230313.xls',\n '内蒙古能源发电投资集团有限公司-15047-锅炉数据查询-20230313.xls',\n '北京能源集团有限责任公司-64009-锅炉数据查询-20230313.xls',\n '华润(集团)有限公司-13008-锅炉数据查询-20230313.xls',\n '协鑫集团有限公司-32036-锅炉数据查询-20230313.xls',\n '国家开发投资公司-37009-锅炉数据查询-20230313.xls',\n '国家开发投资集团有限公司-16014-锅炉数据查询-20230313.xls',\n '国家电力投资集团有限公司-21018-锅炉数据查询-20230313.xls',\n '国家能源投资集团有限责任公司-23012-锅炉数据查询-20230313.xls',\n '安徽省能源集团有限公司-34003-锅炉数据查询-20230313.xls',\n '山西国际能源集团有限公司-14088-锅炉数据查询-20230313.xls',\n '山西焦煤集团有限公司-14099-锅炉数据查询-20230313.xls',\n '广东省能源集团有限公司-71003-锅炉数据查询-20230313.xls',\n '广州发展集团股份有限公司-71021-锅炉数据查询-20230313.xls',\n '新疆天山电力股份有限公司-65004-锅炉数据查询-20230313.xls',\n '晋能控股电力集团-14022-锅炉数据查询-20230313.xls',\n '江苏省国信集团有限公司-32015-锅炉数据查询-20230313.xls',\n '江西省投资集团有限公司-44020-锅炉数据查询-20230313.xls',\n '河北建设投资集团有限责任公司-13056-锅炉数据查询-20230313.xls',\n '河南投资集团有限公司-41014-锅炉数据查询-20230313.xls',\n '浙江省能源集团有限公司-33001-锅炉数据查询-20230313.xls',\n '深圳能源集团股份有限公司-71022-锅炉数据查询-20230313.xls',\n '甘肃省电力投资集团有限责任公司-62006-锅炉数据查询-20230313.xls',\n '申能股份有限公司-35016-锅炉数据查询-20230313.xls',\n '陕西投资集团有限公司-61040-锅炉数据查询-20230313.xls',\n '陕西榆林能源集团有限公司-61041-锅炉数据查询-20230313.xls',\n '陕西煤业化工集团有限责任公司-43014-锅炉数据查询-20230313.xls']" + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "old_boiler = [x for x in os.listdir('./new_data/') if '锅炉' in x]\n", + "new_boiler = [x for x in os.listdir('./火电20230313/火电20230313/') if '锅炉' in x]\n", + "new_boiler" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 34, + "outputs": [ + { + "data": { + "text/plain": "['序号',\n '企业编码',\n '电厂名称',\n '简称',\n '机组编号',\n '制造厂家',\n '型号',\n '型式',\n '最大连续出力B-MCR(t/h)',\n '设计效率(%)',\n '工质流动方式',\n ' 额定主蒸汽压力 (MPa)',\n '额再热蒸汽温度 (℃)',\n '额定再热蒸汽压力 (MPa)',\n ' 额再热蒸汽温度 (℃)',\n '额再热蒸汽温度 (℃).1',\n '点火方式',\n '燃烧方式',\n '设计燃煤种类',\n '设计燃煤灰份(收到基)(%)',\n '设计燃煤挥发份)(收到基)(%)',\n '设计燃煤低位热值(收到基)(kJ/kg)',\n '排渣方式',\n '除灰方式',\n '空预器制造厂家',\n '空预器型号',\n '空预器型式',\n '空预器设计漏风率(%)',\n '磨煤机制造厂家',\n '磨煤机型号',\n '磨煤机型式',\n '磨煤机出力比',\n '磨煤机总台数',\n '磨煤机制粉方式',\n '除尘器制造厂家',\n '除尘器型号',\n '除尘器型式',\n '除尘器除尘器设计效率(%)',\n '一次风机制造厂家',\n '一次风机型号',\n '一次风机型式',\n '一次风机最大风压(Pa)',\n '一次风机最大流量 (m3/S)',\n '一次风机电机电压(V)',\n '一次风机电机功率(KW)',\n '送风机制造厂家',\n '送风机型号',\n '送风机型式',\n '送风机最大风压(Pa)',\n '送风机 最大流量(m3/S)',\n '送风机电机电压(V)',\n '送风机电机功率(KW)',\n '引风机制造厂家',\n '引风机型号',\n '引风机型式',\n '引风机最大风压(Pa)',\n '引风机最大流量(m3/S)',\n '引风机电机电压(V)',\n '引风机电机功率(KW)',\n '引风机电机功率(KW).1']" + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "boiler_samples = pd.read_excel(f'./new_data/{old_boiler[0]}', header=[3,4])\n", + "boiler_cols = [''.join([x for x in y if 'Unnamed' not in x]) for y in boiler_samples.columns]\n", + "boiler_cols" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 35, + "outputs": [], + "source": [ + "boiler_list = list()\n", + "for file in old_boiler:\n", + " data = pd.read_excel(f'./new_data/{file}', header=[3, 4])\n", + " data.columns = boiler_cols\n", + " boiler_list.append(data)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 36, + "outputs": [], + "source": [ + "for file in new_boiler:\n", + " data = pd.read_excel(f'./火电20230313/火电20230313/{file}', header=[3,4])\n", + " data.columns = boiler_cols\n", + " boiler_list.append(data)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 37, + "outputs": [], + "source": [ + "boiler_df = pd.concat(boiler_list).drop(columns=['序号', '引风机电机功率(KW).1']).drop_duplicates().reset_index(drop=True)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 38, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: Dropping invalid columns in DataFrameGroupBy.max is deprecated. In a future version, a TypeError will be raised. Before calling .max, select only columns which should be valid for the function.\n", + " \"\"\"Entry point for launching an IPython kernel.\n" + ] + } + ], + "source": [ + "boiler_max = boiler_df.groupby(['电厂名称', '机组编号']).max().reset_index()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 39, + "outputs": [], + "source": [ + "use_unit = units_df[units_df.columns[[1,3,4,5,6,7,8]]].drop_duplicates().set_index(['电厂名称', '机组编号'])\n", + "use_run_data = run_data_max.set_index(['电厂名称', '机组编号'])\n", + "use_steam = steam_df[steam_df.columns[[1,3,-9]]].drop_duplicates().set_index(['电厂名称', '机组编号'])\n", + "use_boiler = boiler_df.drop_duplicates().set_index(['电厂名称', '机组编号'])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 40, + "outputs": [], + "source": [ + "total_data = use_unit.merge(use_steam, how='left', on=['电厂名称', '机组编号'])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 41, + "outputs": [], + "source": [ + "total_data = total_data.merge(use_run_data, how='left', on=['电厂名称', '机组编号'])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 42, + "outputs": [], + "source": [ + "total_data = total_data.merge(use_boiler, how='left', on=['电厂名称', '机组编号'])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 43, + "outputs": [], + "source": [ + "total_data.reset_index().to_excel('./total_data.xlsx', index=False)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.13" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/evaluation.ipynb b/evaluation.ipynb new file mode 100644 index 0000000..a8a877d --- /dev/null +++ b/evaluation.ipynb @@ -0,0 +1,144 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "outputs": [], + "source": [ + "import pandas as pd" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 2, + "outputs": [], + "source": [ + "power_eva = pd.read_csv('./发电测试结果.csv')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 4, + "outputs": [], + "source": [ + "power_eva.columns = ['real', 'pred']\n", + "power_eva['error'] = (power_eva.pred - power_eva.real).apply(abs) / power_eva.real" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 15, + "outputs": [ + { + "data": { + "text/plain": " real pred error\n222 0.517443 0.518051 0.001175\n54 0.701795 0.671254 0.043519\n201 0.539900 0.541033 0.002099\n30 0.532658 0.530621 0.003823\n124 0.410033 0.420981 0.026701\n37 0.390315 0.391309 0.002548\n7 0.571029 0.579793 0.015347\n232 0.580826 0.579876 0.001635\n165 0.352021 0.374194 0.062987\n139 0.584566 0.567410 0.029348", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
realprederror
2220.5174430.5180510.001175
540.7017950.6712540.043519
2010.5399000.5410330.002099
300.5326580.5306210.003823
1240.4100330.4209810.026701
370.3903150.3913090.002548
70.5710290.5797930.015347
2320.5808260.5798760.001635
1650.3520210.3741940.062987
1390.5845660.5674100.029348
\n
" + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "power_eva.sample(10)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 7, + "outputs": [], + "source": [ + "heat_eva = pd.read_csv('./供热测试结果.csv')\n", + "heat_eva.columns = ['real', 'pred']\n", + "heat_eva['error'] = (heat_eva.pred - heat_eva.real).apply(abs) / heat_eva.real" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 9, + "outputs": [ + { + "data": { + "text/plain": " real pred error\n131 0.071626 0.071494 0.001839\n256 0.076446 0.069821 0.086672\n141 0.067995 0.068865 0.012802\n71 0.071438 0.071276 0.002270\n284 0.072052 0.071835 0.003018\n294 0.075010 0.074507 0.006716\n77 0.052603 0.055783 0.060461\n96 0.062181 0.063483 0.020932\n176 0.077847 0.077317 0.006807\n164 0.082962 0.082844 0.001420", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
realprederror
1310.0716260.0714940.001839
2560.0764460.0698210.086672
1410.0679950.0688650.012802
710.0714380.0712760.002270
2840.0720520.0718350.003018
2940.0750100.0745070.006716
770.0526030.0557830.060461
960.0621810.0634830.020932
1760.0778470.0773170.006807
1640.0829620.0828440.001420
\n
" + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "heat_eva.sample(10)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/extract_plant.ipynb b/extract_plant.ipynb new file mode 100644 index 0000000..08501e1 --- /dev/null +++ b/extract_plant.ipynb @@ -0,0 +1,149 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "outputs": [], + "source": [ + "import pandas as pd" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 2, + "outputs": [], + "source": [ + "import os" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 3, + "outputs": [], + "source": [ + "files = [x for x in os.listdir('./火电20230313/火电20230313F/') if '经济性' in x]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 5, + "outputs": [], + "source": [ + "plants = [x.split('-')[0].strip() for x in files]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 6, + "outputs": [ + { + "data": { + "text/plain": " plant 经度 纬度\n0 万方发电厂(焦作爱依斯万方电力有限公司) 113.381649 35.255622\n1 三河发电有限责任公司 116.860260 39.953617\n2 上海上电漕泾发电有限公司 121.407593 30.765242\n3 上海吴泾发电有限责任公司 121.471140 31.065113\n4 上海吴泾第二发电有限责任公司 121.471340 31.062532", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
plant经度纬度
0万方发电厂(焦作爱依斯万方电力有限公司)113.38164935.255622
1三河发电有限责任公司116.86026039.953617
2上海上电漕泾发电有限公司121.40759330.765242
3上海吴泾发电有限责任公司121.47114031.065113
4上海吴泾第二发电有限责任公司121.47134031.062532
\n
" + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "old_plants = pd.read_excel('./lat_lon.xlsx')\n", + "old_plants.head()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 8, + "outputs": [], + "source": [ + "new_plants = [x for x in plants if x not in old_plants.plant.values]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 9, + "outputs": [], + "source": [ + "with open('./plant.txt', 'w', encoding='utf-8') as fw:\n", + " for plant in new_plants:\n", + " fw.write(plant)\n", + " fw.write('\\n')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/get_altitude.ipynb b/get_altitude.ipynb new file mode 100644 index 0000000..b88edb5 --- /dev/null +++ b/get_altitude.ipynb @@ -0,0 +1,291 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "888d089c-a9c8-4d2d-af74-dff1a8ccfefd", + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import json\n", + "import time\n", + "from typing import List\n", + "import requests\n", + "import pandas as pd\n", + "\n", + "\n", + "class GetElevation:\n", + "\n", + " @classmethod\n", + " def __SendQuery(cls, latLngString: str) -> json:\n", + " query = ('https://api.opentopodata.org/v1/mapzen?locations={}&interpolation=bilinear'.format(latLngString))\n", + " res = requests.get(query).json()\n", + " if res[\"status\"] != \"OK\":\n", + " raise Exception(res[\"error\"])\n", + " return res\n", + "\n", + " def GetSingleElevation(self, latitude: float, longitude: float) -> float:\n", + " \"\"\"\n", + " 获取单个高程,输入经纬度格式为数值类型,返回值为高程float类型\n", + " :param latitude: 纬度\n", + " :param longitude: 经度\n", + " :return: 高程\n", + " \"\"\"\n", + " if latitude < -90 or latitude > 90:\n", + " raise Exception(\"纬度的范围应在-90-90之间!请检查数据源!\")\n", + " latLngString = str(latitude) + \",\" + str(longitude)\n", + " res = self.__SendQuery(latLngString)\n", + " elevation = res[\"results\"][0][\"elevation\"]\n", + " return elevation\n", + "\n", + " def GetMultiElevation(self, latitude: List[float], longitude: List[float]) -> List[float]:\n", + " \"\"\"\n", + " 获取数组类型的高程,输入经纬度格式为经度数组和纬度数组,返回值为高程数组\n", + " :param latitude:纬度数组\n", + " :param longitude:经度数组\n", + " :return:高程数组\n", + " \"\"\"\n", + " if len(latitude) != len(longitude):\n", + " raise Exception(\"纬度数组和经度数组长度不一致!请检查数据源!\")\n", + " for lat in latitude:\n", + " if lat < -90 or lat > 90:\n", + " raise Exception(\"纬度的范围应在-90-90之间!请检查数据源!\")\n", + " elevationList = []\n", + " hundredNums = len(latitude) // 100\n", + " # 查询整百的高程\n", + " for i in range(hundredNums):\n", + " latLngString = \"\"\n", + " for idx in range(100 * i, 100 * (i + 1)):\n", + " latLngString += (str(latitude[idx]) + \",\" + str(longitude[idx]) + \"|\")\n", + " res = self.__SendQuery(latLngString)\n", + " for idx in range(100):\n", + " elevationList.append(res[\"results\"][idx][\"elevation\"])\n", + " time.sleep(1)\n", + " # 查询剩余的不到100的高程\n", + " latLngString = \"\"\n", + " for i in range(hundredNums * 100, len(latitude)):\n", + " latLngString += (str(latitude[i]) + \",\" + str(longitude[i]) + \"|\")\n", + " res = self.__SendQuery(latLngString)\n", + " for i in range(len(latitude) - hundredNums * 100):\n", + " elevationList.append(res[\"results\"][i][\"elevation\"])\n", + " return elevationList\n", + "\n", + " def ExportToXlsx(self, latLongDf: pd.DataFrame, elevationList: List[float], outputPath: str) -> None:\n", + " \"\"\"\n", + " 如果用户可以传入一个DataFrame数据,可以将返回得到的高程拼接并输出\n", + " :param latLongDf: DataFrame数据\n", + " :param elevationList: 高程数组\n", + " :param outputPath: 输出路径\n", + " :return: 无返回值\n", + " \"\"\"\n", + " latLongDf[\"elevation\"] = elevationList\n", + " latLongDf.to_excel(outputPath, index=False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "2a226b08-0c92-483e-b590-29a39dce6298", + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": " plant longitude latitude\n0 万方发电厂(焦作爱依斯万方电力有限公司) 113.381649 35.255622\n1 三河发电有限责任公司 116.860260 39.953617\n2 上海上电漕泾发电有限公司 121.407593 30.765242\n3 上海吴泾发电有限责任公司 121.471140 31.065113\n4 上海吴泾第二发电有限责任公司 121.471340 31.062532", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
plantlongitudelatitude
0万方发电厂(焦作爱依斯万方电力有限公司)113.38164935.255622
1三河发电有限责任公司116.86026039.953617
2上海上电漕泾发电有限公司121.40759330.765242
3上海吴泾发电有限责任公司121.47114031.065113
4上海吴泾第二发电有限责任公司121.47134031.062532
\n
" + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = pd.read_excel('./lat_lon.xlsx')\n", + "data.columns = ['plant', 'longitude', 'latitude']\n", + "data = data.groupby('plant').mean().reset_index()\n", + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "outputs": [], + "source": [ + "ele = GetElevation()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "c1671bcd-bd33-40dd-82b5-a487801045c0", + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Help on method GetMultiElevation in module __main__:\n", + "\n", + "GetMultiElevation(latitude: List[float], longitude: List[float]) -> List[float] method of __main__.GetElevation instance\n", + " 获取数组类型的高程,输入经纬度格式为经度数组和纬度数组,返回值为高程数组\n", + " :param latitude:纬度数组\n", + " :param longitude:经度数组\n", + " :return:高程数组\n", + "\n" + ] + } + ], + "source": [ + "help(ele.GetMultiElevation)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "91afb581-1994-47c4-85ca-d3ea3e13e95d", + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[88.0, 27.0, 4.0, 3.0, 4.0, 2.0, 8.0, -2.0, 5.0, 7.0, 3.0, 58.0, 55.0, 775.0, 594.0, -3.0, 1273.0, 145.0, 145.0, 548.0, 21.0, 28.0, 48.0, 1117.0, 14.0, 1172.0, 387.0, 124.0, 1391.0, 1708.0, 1278.0, 440.0, 135.0, 494.0, 1143.0, 1869.0, 1656.0, 1873.0, 124.0, 361.0, 30.0, 971.0, -3.0, 80.0, 475.0, 1622.0, 292.0, 1317.0, 1385.0, 247.0, 1312.0, 1106.0, 1225.0, 1006.0, 1237.0, 1151.0, 555.0, 1024.0, 694.0, 1226.0, 1050.0, 1162.0, 285.0, 1007.0, 1207.0, 1023.0, 178.0, 861.0, 1171.0, 1069.0, 1015.0, 90.0, 1.0, 83.0, 1037.0, 1037.0, 1114.0, 1069.0, 1107.0, 1076.0, 1054.0, 1165.0, 1255.0, 14.0, 52.0, 171.0, 351.0, 49.0, -5.0, 7.0, -2.0, 152.0, 2.0, -2.0, 5.0, 51.0, 51.0, 606.0, 270.0, 1031.0, 1017.0, 595.0, 65.0, 279.0, 1089.0, 218.0, 57.0, 777.0, 9.0, 84.0, 520.0, 622.0, 574.0, 724.0, 582.0, 1010.0, 505.0, 1010.0, 1.0, 1.0, 59.0, 72.0, 10.0, 65.0, 64.0, 75.0, 57.0, 80.0, 118.0, 151.0, 250.0, 0.0, 1459.0, 1036.0, 1884.0, 286.0, 27.0, 2.0, 13.0, 6.0, 65.0, 3.0, 1331.0, 675.0, 240.0, 2007.0, 1590.0, 1532.0, 1545.0, 36.0, 6.0, 7.0, 199.0, 38.0, 76.0, 0.0, 73.0, 4.0, 1.0, 22.0, -2.0, 40.0, 2.0, 148.0, -1.0, 7.0, 22.0, 1149.0, 154.0, 27.0, 24.0, 44.0, 1130.0, 1277.0, 34.0, 154.0, 718.0, 1504.0, 1034.0, 19.0, 5.0, 172.0, 160.0, 27.0, 26.0, 26.0, 206.0, 19.0, 507.0, 75.0, 177.0, 102.0, 6.0, 30.0, 93.0, 218.0, -34.0, 67.0, 131.0, 1544.0, 708.0, 199.0, 119.0, 99.0, 14.0, 6.0, 11.0, 5.0, 9.0, 8.0, 130.0, 133.0, 180.0, 26.0, 1048.0, 73.0, 326.0, 192.0, 175.0, 185.0, 151.0, 151.0, 18.0, 308.0, 404.0, 360.0, 296.0, 208.0, 45.0, 46.0, 136.0, 573.0, 144.0, 147.0, -4.0, 86.0, 68.0, 167.0, 1479.0, 123.0, 35.0, 55.0, 1.0, 112.0, 8.0, 16.0, 20.0, 6.0, 19.0, 47.0, 528.0, 17.0, 627.0, -3.0, -1.0, 1459.0, 81.0, 91.0, 1122.0, 7.0, 1087.0, 1174.0, 81.0, 1349.0, 788.0, 451.0, 361.0, 65.0, 147.0, 25.0, 545.0, 1466.0, 264.0, 223.0, 56.0, 1327.0, 45.0, 45.0, 1052.0, 5.0, 1052.0, 180.0, 35.0, 1087.0, 1.0, 32.0, 1405.0, 699.0, 699.0, 1266.0, 35.0, 18.0, 116.0, 221.0, 186.0, 184.0, 7.0, 132.0, 1165.0, 1118.0, 1252.0, 29.0, 0.0, 7.0, 1184.0, 93.0, 91.0, 32.0, 849.0, 58.0, 7.0, 1.0, -6.0, -5.0, 39.0, 16.0, 12.0, 13.0, 9.0, 0.0, 132.0, 52.0, 7.0, 25.0, 32.0, 83.0, 1787.0, 0.0, 69.0, 24.0, 1.0, 3.0, -2.0, 1096.0, 207.0, 375.0, -8.0, 33.0, 94.0, 45.0, 83.0, 253.0, 24.0, 119.0, 118.0, 563.0, 468.0, 233.0, 26.0, 687.0, 1067.0, 46.0, 35.0, 30.0, 83.0, 562.0, 718.0, 426.0, 212.0, 853.0, 452.0, 294.0, 148.0, 123.0, 117.0, 25.0, 30.0, 17.0, 85.0, 7.0, 49.0, 89.0, 972.0, 56.0, 352.0, 185.0, 1113.0, 261.0, 1877.0, 222.0, 692.0, 1112.0, 395.0, 412.0, 395.0, 394.0, 8.0, 183.0, 6.0, 34.0, 19.0, 454.0, 1.0, 6.0, 8.0, 38.0, 4.0, 3.0, 6.0, 4.0, 4.0, 786.0, 1247.0, 1157.0, 1318.0, 1339.0, 1151.0, 1329.0, 46.0, 30.0, 9.0, 30.0, 9.0, 16.0, 1987.0, 151.0, 35.0, 8.0, 1353.0, 480.0, 539.0, 1010.0, 819.0, 1061.0, 371.0, 803.0, 717.0, 916.0, 918.0, 696.0, 998.0, 878.0, 28.0, 95.0, 88.0, 16.0, 93.0, 0.0, 177.0, 1.0, 9.0, 192.0, 5.0, -2.0, 5.0, -1.0, -1.0, 10.0, 2.0, 5.0, 79.0, 98.0, 338.0, 41.0, 46.0, 3.0, 35.0, 42.0, 2.0, 78.0, 54.0, 798.0, 63.0, 1288.0, 1066.0, -53.0, 705.0, 757.0, 903.0, 547.0, 1267.0, 1267.0, 355.0, 401.0, 916.0, 233.0, 6.0, 1151.0, 937.0, 940.0, 23.0, 1.0, 9.0, 9.0, 11.0, 5.0, 4.0, 7.0, -3.0, 5.0, 22.0, 4.0, 27.0, 23.0, 29.0, 10.0, 51.0, 3.0, 8.0, 63.0, 122.0, 67.0, 32.0, 28.0, 714.0, 4.0, 7.0, 604.0, 115.0, 31.0, 938.0, 21.0, 121.0, 314.0, 55.0, 70.0, 186.0, 61.0, 76.0, 154.0, 117.0, 395.0, 255.0, 40.0, 37.0, 5.0, -7.0, 3.0, 45.0, 2.0, 4.0, 6.0, 8.0, 73.0, -3.0, 4.0, 4.0, 11.0, 637.0, 30.0, 28.0, 31.0, 21.0, 23.0, 8.0, 34.0, 32.0, 1007.0, 954.0, 31.0, 31.0, 39.0, 10.0, 137.0, 31.0, 56.0, 110.0, 1.0, 592.0, 401.0, 48.0, 140.0, 171.0, 1414.0, 1455.0, 1707.0, 1707.0, 564.0, 992.0, 342.0, 35.0, 61.0, 9.0, 57.0, 41.0, 1442.0, 699.0, 1064.0, 191.0, 251.0, -11.0, 181.0, 215.0, 302.0, 1.0, 2.0, 1376.0, 2.0, 9.0, 798.0, 335.0, 21.0, 11.0, 1049.0, 1002.0, 21.0, 33.0, 75.0, 152.0, 38.0, 1266.0, 360.0, 1029.0, 1477.0, 901.0, 899.0, 1284.0, 862.0, 1205.0, 905.0, 489.0, 1205.0, 160.0, 98.0, 74.0, -2.0, 44.0, 103.0, 121.0, 443.0, 57.0, 93.0, 179.0, 175.0, 178.0, 828.0, 75.0, 115.0, 1487.0, 393.0, 165.0, 347.0, 197.0, 264.0, 27.0, 905.0, 3.0, 2.0, 33.0, 54.0, 26.0, 196.0, 142.0, 30.0, 690.0, 81.0, 955.0, 49.0, 1210.0, 500.0, 654.0, 1180.0, 1155.0, 1057.0, 407.0, 1225.0, 1169.0, 45.0, 2266.0, 2674.0, 1201.0, 1495.0, 394.0, 9.0, 182.0, 145.0, 53.0, 147.0, 1265.0]\n" + ] + } + ], + "source": [ + "multiEle = ele.GetMultiElevation(data[\"latitude\"], data[\"longitude\"])\n", + "print(multiEle)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "555559ea-7e35-4062-a21e-e5275b8da9cd", + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": "669" + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(multiEle)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "74fced56-47e8-43cc-b412-af40fcb3eedd", + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "data['altitude'] = multiEle" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "61704866-2b97-4bd0-ac0c-f2708ef52094", + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": " plant longitude latitude altitude\n0 万方发电厂(焦作爱依斯万方电力有限公司) 113.381649 35.255622 88.0\n1 三河发电有限责任公司 116.860260 39.953617 27.0\n2 上海上电漕泾发电有限公司 121.407593 30.765242 4.0\n3 上海吴泾发电有限责任公司 121.471140 31.065113 3.0\n4 上海吴泾第二发电有限责任公司 121.471340 31.062532 4.0\n.. ... ... ... ...\n664 鹤壁丰鹤发电有限责任公司 114.192184 35.850766 182.0\n665 鹤壁同力发电有限责任公司 114.191246 35.860822 145.0\n666 黄冈大别山发电有限责任公司 114.915181 31.144568 53.0\n667 黑龙江华电齐齐哈尔热电有限公司 124.063322 47.387983 147.0\n668 黔桂发电有限责任公司 106.630029 26.607537 1265.0\n\n[669 rows x 4 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
plantlongitudelatitudealtitude
0万方发电厂(焦作爱依斯万方电力有限公司)113.38164935.25562288.0
1三河发电有限责任公司116.86026039.95361727.0
2上海上电漕泾发电有限公司121.40759330.7652424.0
3上海吴泾发电有限责任公司121.47114031.0651133.0
4上海吴泾第二发电有限责任公司121.47134031.0625324.0
...............
664鹤壁丰鹤发电有限责任公司114.19218435.850766182.0
665鹤壁同力发电有限责任公司114.19124635.860822145.0
666黄冈大别山发电有限责任公司114.91518131.14456853.0
667黑龙江华电齐齐哈尔热电有限公司124.06332247.387983147.0
668黔桂发电有限责任公司106.63002926.6075371265.0
\n

669 rows × 4 columns

\n
" + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "outputs": [], + "source": [ + "data.to_csv('./电厂机组地理信息.csv', encoding='utf-8-sig', index=False)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/xgboost多任务回归.ipynb b/xgboost多任务回归.ipynb new file mode 100644 index 0000000..34c02c2 --- /dev/null +++ b/xgboost多任务回归.ipynb @@ -0,0 +1,1809 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "pycharm": { + "name": "#%%\n" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "from sklearn.multioutput import MultiOutputRegressor\n", + "import xgboost as xgb\n", + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn.metrics import mean_absolute_error, mean_squared_error, mean_absolute_percentage_error, r2_score\n", + "from sklearn.model_selection import train_test_split" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": " 企业名称 机组编号 铭牌容量 (MW) 机组类型 参数分类 冷凝器型式 入炉煤低位热值(kJ/kg) 燃煤挥发份Var(%) \\\n5740 榆能榆神热电有限公司 2 350.0 抽凝式 超临界 间接空冷 25514.0 38.84 \n\n 燃煤灰份Aar(%) 煤种 所处地区 longitude latitude altitude 发电碳排放因子(kg/kWh) \\\n5740 7.28 烟煤 陕西省 109.820265 38.304383 1151 0.661759 \n\n 供热碳排放因子(kg/MJ) \n5740 0.091483 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
企业名称机组编号铭牌容量 (MW)机组类型参数分类冷凝器型式入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)煤种所处地区longitudelatitudealtitude发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)
5740榆能榆神热电有限公司2350.0抽凝式超临界间接空冷25514.038.847.28烟煤陕西省109.82026538.30438311510.6617590.091483
\n
" + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data = pd.read_excel('train_data.xlsx')\n", + "total_data.tail(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": "Index(['企业名称', '机组编号', '铭牌容量 (MW)', '机组类型', '参数分类', '冷凝器型式', '入炉煤低位热值(kJ/kg)',\n '燃煤挥发份Var(%)', '燃煤灰份Aar(%)', '煤种', '所处地区', 'longitude', 'latitude',\n 'altitude', '发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'],\n dtype='object')" + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "outputs": [ + { + "data": { + "text/plain": " 发电类型 地区 城市 企业名称 机组编号 机组状态 机组数量 单机容量(MW) 总容量(MW) \\\n0 煤电 安徽省 安庆市 国能神皖安庆发电有限责任公司 1 在役 1 320.0 320.0 \n1 煤电 安徽省 安庆市 国能神皖安庆发电有限责任公司 2 在役 1 320.0 320.0 \n2 煤电 安徽省 安庆市 国能神皖安庆发电有限责任公司 3 在役 1 1000.0 1000.0 \n3 煤电 安徽省 安庆市 国能神皖安庆发电有限责任公司 4 在役 1 1000.0 1000.0 \n4 煤电 安徽省 安庆市 安徽华泰林浆纸有限公司 化学浆生产线 在役 1 40.0 40.0 \n... ... ... ... ... ... ... ... ... ... \n5317 煤电 重庆市 长寿区 中国石化集团重庆川维化工有限公司 B4 在役 1 49.0 49.0 \n5318 煤电 重庆市 长寿区 威立雅长扬热能(重庆)有限责任公司 1 在役 1 25.0 25.0 \n5319 煤电 重庆市 长寿区 威立雅长扬热能(重庆)有限责任公司 2 在役 1 25.0 25.0 \n5320 煤电 重庆市 长寿区 重庆恩力吉投资有限责任公司 2 在役 1 30.0 30.0 \n5321 煤电 重庆市 长寿区 重庆恩力吉投资有限责任公司 3 在役 1 125.0 125.0 \n\n 核心设备类型 汽轮机类型 压力参数 冷却方式 \n0 煤粉锅炉 凝气式 亚临界 水冷-开式循环 \n1 煤粉锅炉 凝气式 亚临界 水冷-开式循环 \n2 煤粉锅炉 凝气式 超超临界 水冷-闭式循环 \n3 煤粉锅炉 凝气式 超超临界 水冷-闭式循环 \n4 煤粉锅炉 抽凝式 高压 水冷-闭式循环 \n... ... ... ... ... \n5317 煤粉锅炉 抽凝式 高压 水冷-闭式循环 \n5318 循环流化床锅炉 抽凝式 高压 水冷-闭式循环 \n5319 循环流化床锅炉 抽背式 高压 水冷-闭式循环 \n5320 循环流化床锅炉 背压式 高压 其他 \n5321 循环流化床锅炉 抽凝式 高压 水冷-闭式循环 \n\n[5322 rows x 13 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
发电类型地区城市企业名称机组编号机组状态机组数量单机容量(MW)总容量(MW)核心设备类型汽轮机类型压力参数冷却方式
0煤电安徽省安庆市国能神皖安庆发电有限责任公司1在役1320.0320.0煤粉锅炉凝气式亚临界水冷-开式循环
1煤电安徽省安庆市国能神皖安庆发电有限责任公司2在役1320.0320.0煤粉锅炉凝气式亚临界水冷-开式循环
2煤电安徽省安庆市国能神皖安庆发电有限责任公司3在役11000.01000.0煤粉锅炉凝气式超超临界水冷-闭式循环
3煤电安徽省安庆市国能神皖安庆发电有限责任公司4在役11000.01000.0煤粉锅炉凝气式超超临界水冷-闭式循环
4煤电安徽省安庆市安徽华泰林浆纸有限公司化学浆生产线在役140.040.0煤粉锅炉抽凝式高压水冷-闭式循环
..........................................
5317煤电重庆市长寿区中国石化集团重庆川维化工有限公司B4在役149.049.0煤粉锅炉抽凝式高压水冷-闭式循环
5318煤电重庆市长寿区威立雅长扬热能(重庆)有限责任公司1在役125.025.0循环流化床锅炉抽凝式高压水冷-闭式循环
5319煤电重庆市长寿区威立雅长扬热能(重庆)有限责任公司2在役125.025.0循环流化床锅炉抽背式高压水冷-闭式循环
5320煤电重庆市长寿区重庆恩力吉投资有限责任公司2在役130.030.0循环流化床锅炉背压式高压其他
5321煤电重庆市长寿区重庆恩力吉投资有限责任公司3在役1125.0125.0循环流化床锅炉抽凝式高压水冷-闭式循环
\n

5322 rows × 13 columns

\n
" + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "unit_data = pd.read_excel('./data/煤电机组情况(含企业名称).xlsx')\n", + "unit_data" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 5, + "outputs": [ + { + "data": { + "text/plain": "(5694, 16)" + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data.drop_duplicates(inplace=True)\n", + "total_data.shape" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 6, + "outputs": [], + "source": [ + "total_data['机组编号'] = total_data['机组编号'].astype(str)\n", + "unit_data['机组编号'] = unit_data['机组编号'].astype(str)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 7, + "outputs": [], + "source": [ + "total_data = total_data.merge(unit_data[['企业名称', '机组编号', '核心设备类型', '汽轮机类型', '冷却方式']], how='left', on=['企业名称', '机组编号'])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 8, + "outputs": [ + { + "data": { + "text/plain": " 企业名称 机组编号 铭牌容量 (MW) 机组类型 参数分类 冷凝器型式 入炉煤低位热值(kJ/kg) \\\n0 江苏利港电力有限公司 1 350.0 凝气式 亚临界 水冷-开式循环 21602.05000 \n1 江苏利港电力有限公司 1 350.0 凝气式 亚临界 水冷-开式循环 21926.81000 \n2 江苏利港电力有限公司 1 350.0 凝气式 亚临界 水冷-开式循环 21261.93062 \n3 江苏利港电力有限公司 1 350.0 凝气式 亚临界 水冷-开式循环 20840.00000 \n4 江苏利港电力有限公司 1 350.0 凝气式 亚临界 水冷-开式循环 20706.00000 \n... ... ... ... ... ... ... ... \n5689 浙江浙能电力股份有限公司台州发电厂 8 350.0 凝气式 亚临界 水冷-开式循环 21973.00000 \n5690 浙江浙能电力股份有限公司台州发电厂 8 350.0 凝气式 亚临界 水冷-开式循环 21372.00000 \n5691 浙江浙能电力股份有限公司台州发电厂 8 350.0 凝气式 亚临界 水冷-开式循环 20856.00000 \n5692 榆能榆神热电有限公司 1 350.0 抽凝式 超临界 间接空冷 25514.00000 \n5693 榆能榆神热电有限公司 2 350.0 抽凝式 超临界 间接空冷 25514.00000 \n\n 燃煤挥发份Var(%) 燃煤灰份Aar(%) 煤种 所处地区 longitude latitude altitude \\\n0 26.09 16.80 烟煤 江苏省 120.096620 31.942361 1 \n1 26.68 15.41 烟煤 江苏省 120.096620 31.942361 1 \n2 26.46 15.18 烟煤 江苏省 120.096620 31.942361 1 \n3 26.43 14.55 烟煤 江苏省 120.096620 31.942361 1 \n4 26.43 14.96 烟煤 江苏省 120.096620 31.942361 1 \n... ... ... .. ... ... ... ... \n5689 37.43 17.12 烟煤 浙江省 121.465840 28.704623 73 \n5690 39.87 18.01 烟煤 浙江省 121.465840 28.704623 73 \n5691 39.32 19.74 烟煤 浙江省 121.465840 28.704623 73 \n5692 38.84 7.28 烟煤 陕西省 109.820265 38.304383 1151 \n5693 38.84 7.28 烟煤 陕西省 109.820265 38.304383 1151 \n\n 发电碳排放因子(kg/kWh) 供热碳排放因子(kg/MJ) 核心设备类型 汽轮机类型 冷却方式 \n0 0.586990 0.076843 煤粉锅炉 凝气式 水冷-开式循环 \n1 0.632859 0.077676 煤粉锅炉 凝气式 水冷-开式循环 \n2 0.609196 0.074823 煤粉锅炉 凝气式 水冷-开式循环 \n3 0.602178 0.081628 煤粉锅炉 凝气式 水冷-开式循环 \n4 0.590254 0.081103 煤粉锅炉 凝气式 水冷-开式循环 \n... ... ... ... ... ... \n5689 0.628300 0.078776 煤粉锅炉 凝气式 水冷-开式循环 \n5690 0.595019 0.076622 煤粉锅炉 凝气式 水冷-开式循环 \n5691 0.565718 0.074772 煤粉锅炉 凝气式 水冷-开式循环 \n5692 0.664456 0.091482 煤粉锅炉 抽凝式 空冷-间接空冷 \n5693 0.661759 0.091483 煤粉锅炉 抽凝式 空冷-间接空冷 \n\n[5694 rows x 19 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
企业名称机组编号铭牌容量 (MW)机组类型参数分类冷凝器型式入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)煤种所处地区longitudelatitudealtitude发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)核心设备类型汽轮机类型冷却方式
0江苏利港电力有限公司1350.0凝气式亚临界水冷-开式循环21602.0500026.0916.80烟煤江苏省120.09662031.94236110.5869900.076843煤粉锅炉凝气式水冷-开式循环
1江苏利港电力有限公司1350.0凝气式亚临界水冷-开式循环21926.8100026.6815.41烟煤江苏省120.09662031.94236110.6328590.077676煤粉锅炉凝气式水冷-开式循环
2江苏利港电力有限公司1350.0凝气式亚临界水冷-开式循环21261.9306226.4615.18烟煤江苏省120.09662031.94236110.6091960.074823煤粉锅炉凝气式水冷-开式循环
3江苏利港电力有限公司1350.0凝气式亚临界水冷-开式循环20840.0000026.4314.55烟煤江苏省120.09662031.94236110.6021780.081628煤粉锅炉凝气式水冷-开式循环
4江苏利港电力有限公司1350.0凝气式亚临界水冷-开式循环20706.0000026.4314.96烟煤江苏省120.09662031.94236110.5902540.081103煤粉锅炉凝气式水冷-开式循环
............................................................
5689浙江浙能电力股份有限公司台州发电厂8350.0凝气式亚临界水冷-开式循环21973.0000037.4317.12烟煤浙江省121.46584028.704623730.6283000.078776煤粉锅炉凝气式水冷-开式循环
5690浙江浙能电力股份有限公司台州发电厂8350.0凝气式亚临界水冷-开式循环21372.0000039.8718.01烟煤浙江省121.46584028.704623730.5950190.076622煤粉锅炉凝气式水冷-开式循环
5691浙江浙能电力股份有限公司台州发电厂8350.0凝气式亚临界水冷-开式循环20856.0000039.3219.74烟煤浙江省121.46584028.704623730.5657180.074772煤粉锅炉凝气式水冷-开式循环
5692榆能榆神热电有限公司1350.0抽凝式超临界间接空冷25514.0000038.847.28烟煤陕西省109.82026538.30438311510.6644560.091482煤粉锅炉抽凝式空冷-间接空冷
5693榆能榆神热电有限公司2350.0抽凝式超临界间接空冷25514.0000038.847.28烟煤陕西省109.82026538.30438311510.6617590.091483煤粉锅炉抽凝式空冷-间接空冷
\n

5694 rows × 19 columns

\n
" + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 9, + "outputs": [], + "source": [ + "na_boiler_df = total_data[total_data['核心设备类型'].isna()].drop(columns=['核心设备类型', '汽轮机类型', '冷却方式'])\n", + "boiler_df = total_data[~total_data['核心设备类型'].isna()].copy()\n", + "na_boiler = total_data[total_data['核心设备类型'].isna()]['企业名称'].unique()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 10, + "outputs": [], + "source": [ + "na_boiler_df = na_boiler_df.merge(unit_data[['企业名称', '核心设备类型']], how='left', on=['企业名称'])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 11, + "outputs": [], + "source": [ + "total_data = pd.concat([boiler_df, na_boiler_df], axis=0).drop_duplicates()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 12, + "outputs": [ + { + "data": { + "text/plain": "煤粉锅炉 5428\nW火焰炉 151\n循环流化床锅炉 4\nName: 核心设备类型, dtype: int64" + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data['核心设备类型'].value_counts()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "num_cols = ['铭牌容量 (MW)', '入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)', 'longitude', 'latitude', 'altitude', '发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)']\n", + "# object_cols = ['所处地区', '类型', '机组参数', '冷却型式']\n", + "# object_cols = ['所处地区', '汽轮机类型', '参数分类', '冷凝器型式', '核心设备类型']\n", + "object_cols = ['所处地区', '机组类型', '参数分类', '冷凝器型式']" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "def change_str(x):\n", + " if pd.isna(x):\n", + " return x\n", + " if '空冷' in x:\n", + " return '空冷'\n", + " if '水冷' in x:\n", + " return '水冷'\n", + " return x" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "# total_data['冷凝器型式'] = total_data['冷凝器型式'].apply(change_str)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "total_data = total_data[total_data['发电碳排放因子(kg/kWh)'] <= 0.9].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": "['所处地区',\n '机组类型',\n '参数分类',\n '冷凝器型式',\n '铭牌容量 (MW)',\n '入炉煤低位热值(kJ/kg)',\n '燃煤挥发份Var(%)',\n '燃煤灰份Aar(%)',\n 'longitude',\n 'latitude',\n 'altitude']" + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "use_cols = object_cols + [x for x in num_cols if '因子' not in x]\n", + "use_cols" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "total_data = total_data[~total_data['供热碳排放因子(kg/MJ)'].isna()].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": "(5685, 19)" + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": "(1060, 17)" + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data.groupby(['企业名称', '机组编号']).count().shape" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "total_data['入炉煤低位热值(kJ/kg)'] = total_data['入炉煤低位热值(kJ/kg)'].apply(lambda x: x * 1000 if x < 100 else x * 1)\n", + "total_data['燃煤灰份Aar(%)'] = total_data['燃煤灰份Aar(%)'].apply(lambda x: x / 1000 if x > 10000 else x * 1)\n", + "total_data['燃煤挥发份Var(%)'] = total_data['燃煤挥发份Var(%)'].apply(lambda x: x / 1000 if x > 10000 else x * 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "total_data.altitude = total_data.altitude.apply(lambda x: 0 if x < 0 else x)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": "(5041, 19)" + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "use_data = total_data[(total_data['供热碳排放因子(kg/MJ)'] > 0.01)&(total_data['供热碳排放因子(kg/MJ)'] < 0.1)].dropna()\n", + "use_data.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import seaborn as sns" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": "count 5041.000000\nmean 0.070824\nstd 0.009937\nmin 0.010464\n25% 0.065431\n50% 0.071466\n75% 0.077387\nmax 0.099905\nName: 供热碳排放因子(kg/MJ), dtype: float64" + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "use_data['供热碳排放因子(kg/MJ)'].describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "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.\n", + " \"\"\"Entry point for launching an IPython kernel.\n" + ] + } + ], + "source": [ + "train_data = use_data.groupby(use_cols)['发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'].mean().reset_index()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": " 所处地区 机组类型 参数分类 冷凝器型式 铭牌容量 (MW) 入炉煤低位热值(kJ/kg) 燃煤挥发份Var(%) \\\n0 上海市 凝气式 亚临界 水冷-开式循环 300.0 20209.00 25.94 \n1 上海市 凝气式 亚临界 水冷-开式循环 300.0 20785.00 25.97 \n2 上海市 凝气式 亚临界 水冷-开式循环 300.0 20796.00 26.00 \n3 上海市 凝气式 亚临界 水冷-开式循环 300.0 21762.00 27.01 \n4 上海市 凝气式 亚临界 水冷-开式循环 320.0 15829.32 30.85 \n... ... ... ... ... ... ... ... \n3789 黑龙江省 纯凝式 超高压 水冷 200.0 15941.21 23.83 \n3790 黑龙江省 纯凝式 超高压 水冷 210.0 15355.00 42.00 \n3791 黑龙江省 背压式 超高压 水冷-开式循环 200.0 13396.00 23.39 \n3792 黑龙江省 背压式 超高压 水冷-闭式循环 215.0 15753.00 36.29 \n3793 黑龙江省 背压式 超高压 水冷-闭式循环 215.0 16471.11 30.10 \n\n 燃煤灰份Aar(%) longitude latitude altitude 发电碳排放因子(kg/kWh) \\\n0 15.34 121.471140 31.065113 3 0.623923 \n1 17.03 121.471140 31.065113 3 0.639474 \n2 13.00 121.471140 31.065113 3 0.635351 \n3 13.35 121.471140 31.065113 3 0.674456 \n4 4.77 121.601480 31.358794 2 0.506816 \n... ... ... ... ... ... \n3789 14.73 126.575647 45.918566 118 0.500172 \n3790 36.70 131.695864 46.580444 91 0.518301 \n3791 15.66 123.639146 47.210696 151 0.224312 \n3792 42.40 129.604803 44.608202 250 0.290814 \n3793 38.67 129.604803 44.608202 250 0.321635 \n\n 供热碳排放因子(kg/MJ) \n0 0.078064 \n1 0.079308 \n2 0.078691 \n3 0.085853 \n4 0.060934 \n... ... \n3789 0.064200 \n3790 0.063249 \n3791 0.053770 \n3792 0.068027 \n3793 0.067798 \n\n[3794 rows x 13 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
所处地区机组类型参数分类冷凝器型式铭牌容量 (MW)入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)longitudelatitudealtitude发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)
0上海市凝气式亚临界水冷-开式循环300.020209.0025.9415.34121.47114031.06511330.6239230.078064
1上海市凝气式亚临界水冷-开式循环300.020785.0025.9717.03121.47114031.06511330.6394740.079308
2上海市凝气式亚临界水冷-开式循环300.020796.0026.0013.00121.47114031.06511330.6353510.078691
3上海市凝气式亚临界水冷-开式循环300.021762.0027.0113.35121.47114031.06511330.6744560.085853
4上海市凝气式亚临界水冷-开式循环320.015829.3230.854.77121.60148031.35879420.5068160.060934
..........................................
3789黑龙江省纯凝式超高压水冷200.015941.2123.8314.73126.57564745.9185661180.5001720.064200
3790黑龙江省纯凝式超高压水冷210.015355.0042.0036.70131.69586446.580444910.5183010.063249
3791黑龙江省背压式超高压水冷-开式循环200.013396.0023.3915.66123.63914647.2106961510.2243120.053770
3792黑龙江省背压式超高压水冷-闭式循环215.015753.0036.2942.40129.60480344.6082022500.2908140.068027
3793黑龙江省背压式超高压水冷-闭式循环215.016471.1130.1038.67129.60480344.6082022500.3216350.067798
\n

3794 rows × 13 columns

\n
" + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_data" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "for col in num_cols:\n", + " if '因子' not in col:\n", + " train_data[col] = np.log1p(train_data[col])" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "train_data = train_data[train_data['供热碳排放因子(kg/MJ)']<=0.1].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "train_data = pd.get_dummies(train_data, columns=object_cols).dropna()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "for col in train_data.columns:\n", + " train_data[col] = train_data[col].astype(float)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "feature_cols = [x for x in train_data.columns if '因子' not in x and '其他' not in x]\n", + "target_cols = [x for x in train_data.columns if '因子' in x]" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "train_data.to_csv('./train_data_processed.csv', encoding='utf-8-sig', index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "train, test = train_test_split(train_data.dropna(), test_size=0.1, shuffle=True, random_state=42)\n", + "train, valid = train_test_split(train, test_size=0.1, shuffle=True, random_state=42)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "train_X, train_y = train[feature_cols], train[target_cols]\n", + "valid_X, valid_y = valid[feature_cols], valid[target_cols]\n", + "test_X, test_y = test[feature_cols], test[target_cols]" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "from sklearn.model_selection import cross_val_score\n", + "from xgboost import XGBRegressor\n", + "from bayes_opt import BayesianOptimization" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### 供电建模" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "params_xgb = {'objective': 'reg:squarederror',\n", + " 'booster': 'gbtree',\n", + " 'eta': 0.01,\n", + " 'max_depth': 60,\n", + " 'subsample': 0.8,\n", + " 'colsample_bytree': 0.9,\n", + " 'min_child_weight': 60,\n", + " 'seed': 42}\n", + "\n", + "num_boost_round = 2000" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "outputs": [], + "source": [ + "\n", + "dtrain = xgb.DMatrix(train_X, train_y.values[:, 0])\n", + "dvalid = xgb.DMatrix(valid_X, valid_y.values[:, 0])\n", + "watchlist = [(dtrain, 'train'), (dvalid, 'eval')]\n", + "\n", + "gb_model = xgb.train(params_xgb, dtrain, num_boost_round, evals=watchlist,\n", + " early_stopping_rounds=200, verbose_eval=False)\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "y_pred_xgb = gb_model.predict(xgb.DMatrix(test_X))\n", + "y_true_xgb = test_y.values[:, 0]" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 9.9E-04\n", + "RMSE: 0.0315\n", + "MAE: 0.0146\n", + "MAPE: 4.39 %\n", + "R_2: 0.83\n" + ] + } + ], + "source": [ + "MSE = mean_squared_error(y_true_xgb, y_pred_xgb)\n", + "RMSE = np.sqrt(mean_squared_error(y_true_xgb, y_pred_xgb))\n", + "MAE = mean_absolute_error(y_true_xgb, y_pred_xgb)\n", + "MAPE = mean_absolute_percentage_error(y_true_xgb, y_pred_xgb)\n", + "R_2 = r2_score(y_true_xgb, y_pred_xgb)\n", + "print('MSE:', format(MSE, '.1E'))\n", + "print('RMSE:', round(RMSE, 4))\n", + "print('MAE:', round(MAE, 4))\n", + "print('MAPE:', round(MAPE*100, 2), '%')\n", + "print('R_2:', round(R_2, 4)) #R方为负就说明拟合效果比平均值差a" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "outputs": [], + "source": [ + "from sklearn.model_selection import KFold" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 42, + "outputs": [], + "source": [ + "kf = KFold(n_splits=10, shuffle=True, random_state=666)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 43, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 3.5E-04, RMSE: 0.0188, MAE: 0.0126, MAPE: 2.6 %, R_2: 0.9346\n", + "MSE: 9.5E-04, RMSE: 0.0308, MAE: 0.0142, MAPE: 4.28 %, R_2: 0.8446\n", + "MSE: 9.9E-04, RMSE: 0.0314, MAE: 0.0139, MAPE: 4.29 %, R_2: 0.8507\n", + "MSE: 5.0E-04, RMSE: 0.0225, MAE: 0.0126, MAPE: 2.53 %, R_2: 0.9118\n", + "MSE: 9.9E-04, RMSE: 0.0314, MAE: 0.0143, MAPE: 4.45 %, R_2: 0.8383\n", + "MSE: 3.6E-04, RMSE: 0.0191, MAE: 0.0127, MAPE: 2.57 %, R_2: 0.9298\n", + "MSE: 5.3E-04, RMSE: 0.023, MAE: 0.0143, MAPE: 3.13 %, R_2: 0.9112\n", + "MSE: 5.1E-04, RMSE: 0.0226, MAE: 0.0138, MAPE: 2.84 %, R_2: 0.9092\n", + "MSE: 3.5E-04, RMSE: 0.0187, MAE: 0.0128, MAPE: 2.63 %, R_2: 0.9371\n", + "MSE: 1.3E-03, RMSE: 0.0361, MAE: 0.015, MAPE: 6.76 %, R_2: 0.8045\n" + ] + } + ], + "source": [ + "eva_list = list()\n", + "for (train_index, test_index) in kf.split(train_data):\n", + " train = train_data.loc[train_index]\n", + " test = train_data.loc[test_index]\n", + " train, valid = train_test_split(train, test_size=0.11, random_state=666)\n", + " X_train, Y_train = train[feature_cols], train['发电碳排放因子(kg/kWh)']\n", + " X_valid, Y_valid = valid[feature_cols], valid['发电碳排放因子(kg/kWh)']\n", + " X_test, Y_test = valid[feature_cols], valid['发电碳排放因子(kg/kWh)']\n", + " dtrain = xgb.DMatrix(X_train, Y_train)\n", + " dvalid = xgb.DMatrix(X_valid, Y_valid)\n", + " watchlist = [(dvalid, 'eval')]\n", + " gb_model = xgb.train(params_xgb, dtrain, num_boost_round, evals=watchlist,\n", + " early_stopping_rounds=100, verbose_eval=False)\n", + " y_pred = gb_model.predict(xgb.DMatrix(X_test))\n", + " y_true = Y_test.values\n", + " MSE = mean_squared_error(y_true, y_pred)\n", + " RMSE = np.sqrt(mean_squared_error(y_true, y_pred))\n", + " MAE = mean_absolute_error(y_true, y_pred)\n", + " MAPE = mean_absolute_percentage_error(y_true, y_pred)\n", + " R_2 = r2_score(y_true, y_pred)\n", + " print('MSE:', format(MSE, '.1E'), end=', ')\n", + " print('RMSE:', round(RMSE, 4), end=', ')\n", + " print('MAE:', round(MAE, 4), end=', ')\n", + " print('MAPE:', round(MAPE*100, 2), '%', end=', ')\n", + " print('R_2:', round(R_2, 4)) #R方为负就说明拟合效果比平均值差\n", + " eva_list.append([MSE, RMSE, MAE, MAPE, R_2])\n", + " if R_2 > 0.94:\n", + " break" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 44, + "outputs": [], + "source": [ + "test_X['power_pred'] = y_pred_xgb\n", + "test_X['power_real'] = y_true_xgb\n", + "test_X['error_rate'] = abs(test_X.power_pred - test_X.power_real) / test_X.power_real" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 45, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\ipykernel_launcher.py:1: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " \"\"\"Entry point for launching an IPython kernel.\n", + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\ipykernel_launcher.py:2: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " \n" + ] + } + ], + "source": [ + "X_test['power_pred'] = y_pred\n", + "X_test['power_real'] = y_true\n", + "X_test['error_rate'] = abs(X_test.power_pred - X_test.power_real) / X_test.power_real" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 46, + "outputs": [], + "source": [ + "test_data = X_test.copy()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 47, + "outputs": [], + "source": [ + "for col in num_cols:\n", + " if '因子' not in col:\n", + " test_data[col] = np.expm1(test_data[col])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 48, + "outputs": [ + { + "data": { + "text/plain": " 铭牌容量 (MW) 入炉煤低位热值(kJ/kg) 燃煤挥发份Var(%) 燃煤灰份Aar(%) longitude \\\n2132 300.0 17602.00 23.95 32.830 118.211355 \n2424 350.0 15525.82 19.72 25.540 118.075445 \n1626 330.0 17997.00 33.00 35.000 82.892729 \n319 350.0 14187.00 25.53 16.710 125.579363 \n891 350.0 19279.92 35.49 27.340 115.784650 \n2234 350.0 21697.63 26.43 12.710 116.860260 \n2304 300.0 18611.00 15.26 29.750 115.497149 \n420 350.0 14445.00 45.39 20.600 125.162487 \n1039 330.0 21095.00 25.80 20.410 119.276289 \n3090 165.0 18990.00 33.58 23.540 103.624731 \n485 300.0 20068.81 25.65 15.040 117.059925 \n3714 600.0 16567.18 34.02 38.640 131.063724 \n2076 350.0 20141.10 42.64 15.990 115.113369 \n3304 600.0 12950.00 48.22 25.040 124.150700 \n3744 350.0 15235.27 23.23 25.780 128.768082 \n2572 300.0 19965.73 10.79 29.130 114.283788 \n3423 600.0 17981.89 26.88 17.700 122.123524 \n3770 600.0 15941.38 23.83 13.750 126.575647 \n1422 330.0 18283.00 13.23 34.680 112.761299 \n3660 300.0 16031.00 21.96 39.790 130.397051 \n2439 600.0 19736.25 9.21 29.210 114.437782 \n3365 300.0 13306.62 23.55 23.090 121.228525 \n1211 140.0 20919.00 19.29 26.120 115.920941 \n2576 300.0 21052.00 10.74 31.360 114.283788 \n3395 350.0 13278.00 47.67 20.720 123.821910 \n1732 200.0 17620.64 19.25 14.380 87.660577 \n1244 150.0 20030.49 26.13 27.880 117.142424 \n1227 145.0 19292.66 19.44 26.570 117.421027 \n1213 140.0 21160.00 24.26 20.310 118.335347 \n2224 350.0 21061.75 26.06 14.167 116.860260 \n3381 300.0 14582.00 28.34 23.200 124.330739 \n1195 140.0 19731.00 22.23 26.550 118.335347 \n2366 330.0 20310.24 15.53 32.640 114.703987 \n1453 220.0 20434.00 26.70 27.410 113.232289 \n1624 330.0 17470.00 36.17 27.620 82.892729 \n3383 300.0 15736.00 43.85 37.540 123.817380 \n1128 350.0 20403.00 36.51 25.690 117.149304 \n2636 350.0 18193.00 16.96 31.720 112.409429 \n2992 350.0 23253.68 23.72 18.450 113.672684 \n881 165.0 20822.00 39.57 24.600 118.128354 \n2644 350.0 19871.76 21.06 30.780 113.875986 \n2627 330.0 20682.00 11.52 28.850 113.866062 \n3666 330.0 14813.00 43.74 14.460 124.613843 \n2215 315.0 21691.59 23.80 11.900 116.860260 \n1717 350.0 22600.03 28.67 18.680 76.054876 \n2686 660.0 17624.15 31.79 32.040 115.270887 \n3228 300.0 13075.00 28.45 27.010 123.943182 \n2311 300.0 19779.00 17.49 31.090 114.525863 \n1064 330.0 22054.00 20.08 20.800 117.103149 \n1710 350.0 20519.75 24.23 12.710 76.054876 \n1651 330.0 17913.00 35.08 22.070 87.703630 \n3391 300.0 13874.00 24.01 20.430 121.228525 \n3793 215.0 16471.11 30.10 38.670 129.604803 \n1022 330.0 20634.77 24.66 25.390 119.276289 \n343 670.0 14109.00 45.20 13.640 125.941747 \n\n latitude altitude 所处地区_上海市 所处地区_云南省 所处地区_内蒙古 ... 参数分类_高压 \\\n2132 39.655509 26.0 0.0 0.0 0.0 ... 0.0 \n2424 40.812210 338.0 0.0 0.0 0.0 ... 0.0 \n1626 41.741365 1066.0 0.0 0.0 0.0 ... 0.0 \n319 43.657507 208.0 0.0 0.0 0.0 ... 0.0 \n891 36.881948 33.0 0.0 0.0 0.0 ... 0.0 \n2234 39.953617 27.0 0.0 0.0 0.0 ... 0.0 \n2304 38.802049 17.0 0.0 0.0 0.0 ... 0.0 \n420 43.784873 222.0 0.0 0.0 0.0 ... 0.0 \n1039 36.668747 75.0 0.0 0.0 0.0 ... 0.0 \n3090 36.134735 1545.0 0.0 0.0 0.0 ... 0.0 \n485 39.157647 8.0 0.0 0.0 0.0 ... 0.0 \n3714 45.766399 207.0 0.0 0.0 0.0 ... 0.0 \n2076 25.926232 102.0 0.0 0.0 0.0 ... 0.0 \n3304 42.540258 103.0 0.0 0.0 0.0 ... 0.0 \n3744 47.746953 240.0 0.0 0.0 0.0 ... 0.0 \n2572 36.128262 83.0 0.0 0.0 0.0 ... 0.0 \n3423 40.311935 2.0 0.0 0.0 0.0 ... 0.0 \n3770 45.918566 118.0 0.0 0.0 0.0 ... 0.0 \n1422 37.634620 849.0 0.0 0.0 0.0 ... 0.0 \n3660 46.805507 80.0 0.0 0.0 0.0 ... 0.0 \n2439 38.038867 76.0 0.0 0.0 0.0 ... 0.0 \n3365 41.143879 44.0 0.0 0.0 0.0 ... 0.0 \n1211 36.466442 30.0 0.0 0.0 0.0 ... 0.0 \n2576 36.128262 83.0 0.0 0.0 0.0 ... 0.0 \n3395 41.354877 147.0 0.0 0.0 0.0 ... 0.0 \n1732 43.750058 1010.0 0.0 0.0 0.0 ... 0.0 \n1244 35.075862 65.0 0.0 0.0 0.0 ... 0.0 \n1227 36.738368 57.0 0.0 0.0 0.0 ... 0.0 \n1213 35.017881 65.0 0.0 0.0 0.0 ... 0.0 \n2224 39.953617 27.0 0.0 0.0 0.0 ... 0.0 \n3381 40.115662 135.0 0.0 0.0 0.0 ... 0.0 \n1195 35.017881 65.0 0.0 0.0 0.0 ... 0.0 \n2366 38.014364 57.0 0.0 0.0 0.0 ... 0.0 \n1453 40.067556 1061.0 0.0 0.0 0.0 ... 0.0 \n1624 41.741365 1066.0 0.0 0.0 0.0 ... 0.0 \n3383 42.347201 98.0 0.0 0.0 0.0 ... 0.0 \n1128 36.084927 123.0 0.0 0.0 0.0 ... 0.0 \n2636 34.584441 160.0 0.0 0.0 0.0 ... 0.0 \n2992 30.918494 34.0 0.0 0.0 0.0 ... 0.0 \n881 37.694642 8.0 0.0 0.0 0.0 ... 0.0 \n2644 36.116424 294.0 0.0 0.0 0.0 ... 0.0 \n2627 35.248375 72.0 0.0 0.0 0.0 ... 0.0 \n3666 46.144809 154.0 0.0 0.0 0.0 ... 0.0 \n2215 39.953617 27.0 0.0 0.0 0.0 ... 0.0 \n1717 39.484097 1288.0 0.0 0.0 0.0 ... 0.0 \n2686 35.775540 48.0 0.0 0.0 0.0 ... 0.0 \n3228 41.899725 124.0 0.0 0.0 0.0 ... 0.0 \n2311 37.959933 63.0 0.0 0.0 0.0 ... 0.0 \n1064 36.718761 27.0 0.0 0.0 0.0 ... 0.0 \n1710 39.484097 1288.0 0.0 0.0 0.0 ... 0.0 \n1651 43.909559 724.0 0.0 0.0 0.0 ... 0.0 \n3391 41.143879 44.0 0.0 0.0 0.0 ... 0.0 \n3793 44.608202 250.0 0.0 0.0 0.0 ... 0.0 \n1022 36.668747 75.0 0.0 0.0 0.0 ... 0.0 \n343 44.106509 199.0 0.0 0.0 0.0 ... 0.0 \n\n 冷凝器型式_水冷 冷凝器型式_水冷-开式循环 冷凝器型式_水冷-闭式循环 冷凝器型式_直接空冷 冷凝器型式_空冷 \\\n2132 1.0 0.0 0.0 0.0 0.0 \n2424 0.0 0.0 1.0 0.0 0.0 \n1626 0.0 0.0 0.0 0.0 0.0 \n319 1.0 0.0 0.0 0.0 0.0 \n891 0.0 1.0 0.0 0.0 0.0 \n2234 0.0 0.0 1.0 0.0 0.0 \n2304 0.0 0.0 1.0 0.0 0.0 \n420 0.0 0.0 1.0 0.0 0.0 \n1039 0.0 0.0 1.0 0.0 0.0 \n3090 0.0 0.0 1.0 0.0 0.0 \n485 0.0 0.0 1.0 0.0 0.0 \n3714 0.0 0.0 1.0 0.0 0.0 \n2076 0.0 0.0 1.0 0.0 0.0 \n3304 0.0 0.0 1.0 0.0 0.0 \n3744 0.0 0.0 1.0 0.0 0.0 \n2572 0.0 0.0 1.0 0.0 0.0 \n3423 0.0 1.0 0.0 0.0 0.0 \n3770 1.0 0.0 0.0 0.0 0.0 \n1422 0.0 0.0 0.0 1.0 0.0 \n3660 1.0 0.0 0.0 0.0 0.0 \n2439 0.0 0.0 0.0 1.0 0.0 \n3365 0.0 0.0 1.0 0.0 0.0 \n1211 0.0 0.0 1.0 0.0 0.0 \n2576 0.0 0.0 1.0 0.0 0.0 \n3395 0.0 0.0 1.0 0.0 0.0 \n1732 0.0 0.0 1.0 0.0 0.0 \n1244 0.0 0.0 1.0 0.0 0.0 \n1227 0.0 0.0 1.0 0.0 0.0 \n1213 0.0 0.0 1.0 0.0 0.0 \n2224 0.0 0.0 1.0 0.0 0.0 \n3381 0.0 0.0 1.0 0.0 0.0 \n1195 0.0 0.0 1.0 0.0 0.0 \n2366 0.0 0.0 1.0 0.0 0.0 \n1453 0.0 0.0 0.0 1.0 0.0 \n1624 0.0 0.0 0.0 0.0 0.0 \n3383 0.0 0.0 1.0 0.0 0.0 \n1128 0.0 0.0 1.0 0.0 0.0 \n2636 0.0 0.0 1.0 0.0 0.0 \n2992 0.0 0.0 1.0 0.0 0.0 \n881 1.0 0.0 0.0 0.0 0.0 \n2644 0.0 0.0 1.0 0.0 0.0 \n2627 0.0 0.0 1.0 0.0 0.0 \n3666 0.0 1.0 0.0 0.0 0.0 \n2215 0.0 0.0 1.0 0.0 0.0 \n1717 0.0 0.0 0.0 0.0 0.0 \n2686 0.0 0.0 1.0 0.0 0.0 \n3228 1.0 0.0 0.0 0.0 0.0 \n2311 0.0 0.0 1.0 0.0 0.0 \n1064 0.0 0.0 1.0 0.0 0.0 \n1710 0.0 0.0 0.0 0.0 0.0 \n1651 0.0 0.0 1.0 0.0 0.0 \n3391 0.0 0.0 1.0 0.0 0.0 \n3793 0.0 0.0 1.0 0.0 0.0 \n1022 0.0 0.0 1.0 0.0 0.0 \n343 0.0 0.0 1.0 0.0 0.0 \n\n 冷凝器型式_间接空冷 power_pred power_real error_rate \n2132 0.0 0.438344 0.461568 0.050316 \n2424 0.0 0.437482 0.460870 0.050747 \n1626 1.0 0.509937 0.537416 0.051130 \n319 0.0 0.362236 0.344575 0.051256 \n891 0.0 0.478009 0.454326 0.052129 \n2234 0.0 0.579227 0.549844 0.053440 \n2304 0.0 0.488333 0.515910 0.053453 \n420 0.0 0.376880 0.357277 0.054869 \n1039 0.0 0.562676 0.595438 0.055023 \n3090 0.0 0.516500 0.489478 0.055205 \n485 0.0 0.515064 0.487882 0.055715 \n3714 0.0 0.489738 0.518801 0.056019 \n2076 0.0 0.536181 0.568241 0.056419 \n3304 0.0 0.380260 0.359795 0.056878 \n3744 0.0 0.413687 0.389536 0.061999 \n2572 0.0 0.484924 0.455817 0.063858 \n3423 0.0 0.464855 0.436654 0.064586 \n3770 0.0 0.444540 0.475513 0.065135 \n1422 0.0 0.478954 0.513112 0.066570 \n3660 0.0 0.420857 0.394264 0.067449 \n2439 0.0 0.552083 0.517015 0.067829 \n3365 0.0 0.365339 0.392430 0.069034 \n1211 0.0 0.525372 0.565201 0.070470 \n2576 0.0 0.535750 0.576367 0.070472 \n3395 0.0 0.362074 0.338230 0.070499 \n1732 0.0 0.466749 0.435941 0.070672 \n1244 0.0 0.519800 0.559412 0.070810 \n1227 0.0 0.471088 0.439672 0.071453 \n1213 0.0 0.584875 0.630051 0.071702 \n2224 0.0 0.547243 0.510040 0.072941 \n3381 0.0 0.378266 0.410316 0.078112 \n1195 0.0 0.518649 0.480565 0.079248 \n2366 0.0 0.505584 0.551764 0.083696 \n1453 0.0 0.536567 0.493686 0.086859 \n1624 1.0 0.474544 0.525190 0.096434 \n3383 0.0 0.428344 0.475805 0.099748 \n1128 0.0 0.484347 0.541039 0.104785 \n2636 0.0 0.465685 0.420098 0.108516 \n2992 0.0 0.590282 0.663618 0.110509 \n881 0.0 0.561782 0.633226 0.112826 \n2644 0.0 0.521570 0.467694 0.115195 \n2627 0.0 0.563966 0.637925 0.115937 \n3666 0.0 0.403054 0.456362 0.116811 \n2215 0.0 0.549092 0.490824 0.118715 \n1717 1.0 0.628243 0.560538 0.120785 \n2686 0.0 0.428897 0.381988 0.122801 \n3228 0.0 0.356203 0.317093 0.123338 \n2311 0.0 0.505898 0.449974 0.124284 \n1064 0.0 0.549820 0.628280 0.124881 \n1710 1.0 0.516507 0.434781 0.187970 \n1651 0.0 0.471082 0.395266 0.191812 \n3391 0.0 0.378657 0.470581 0.195341 \n3793 0.0 0.428770 0.321635 0.333093 \n1022 0.0 0.530251 0.073112 6.252559 \n343 0.0 0.398257 0.038802 9.263788 \n\n[55 rows x 66 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
铭牌容量 (MW)入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)longitudelatitudealtitude所处地区_上海市所处地区_云南省所处地区_内蒙古...参数分类_高压冷凝器型式_水冷冷凝器型式_水冷-开式循环冷凝器型式_水冷-闭式循环冷凝器型式_直接空冷冷凝器型式_空冷冷凝器型式_间接空冷power_predpower_realerror_rate
2132300.017602.0023.9532.830118.21135539.65550926.00.00.00.0...0.01.00.00.00.00.00.00.4383440.4615680.050316
2424350.015525.8219.7225.540118.07544540.812210338.00.00.00.0...0.00.00.01.00.00.00.00.4374820.4608700.050747
1626330.017997.0033.0035.00082.89272941.7413651066.00.00.00.0...0.00.00.00.00.00.01.00.5099370.5374160.051130
319350.014187.0025.5316.710125.57936343.657507208.00.00.00.0...0.01.00.00.00.00.00.00.3622360.3445750.051256
891350.019279.9235.4927.340115.78465036.88194833.00.00.00.0...0.00.01.00.00.00.00.00.4780090.4543260.052129
2234350.021697.6326.4312.710116.86026039.95361727.00.00.00.0...0.00.00.01.00.00.00.00.5792270.5498440.053440
2304300.018611.0015.2629.750115.49714938.80204917.00.00.00.0...0.00.00.01.00.00.00.00.4883330.5159100.053453
420350.014445.0045.3920.600125.16248743.784873222.00.00.00.0...0.00.00.01.00.00.00.00.3768800.3572770.054869
1039330.021095.0025.8020.410119.27628936.66874775.00.00.00.0...0.00.00.01.00.00.00.00.5626760.5954380.055023
3090165.018990.0033.5823.540103.62473136.1347351545.00.00.00.0...0.00.00.01.00.00.00.00.5165000.4894780.055205
485300.020068.8125.6515.040117.05992539.1576478.00.00.00.0...0.00.00.01.00.00.00.00.5150640.4878820.055715
3714600.016567.1834.0238.640131.06372445.766399207.00.00.00.0...0.00.00.01.00.00.00.00.4897380.5188010.056019
2076350.020141.1042.6415.990115.11336925.926232102.00.00.00.0...0.00.00.01.00.00.00.00.5361810.5682410.056419
3304600.012950.0048.2225.040124.15070042.540258103.00.00.00.0...0.00.00.01.00.00.00.00.3802600.3597950.056878
3744350.015235.2723.2325.780128.76808247.746953240.00.00.00.0...0.00.00.01.00.00.00.00.4136870.3895360.061999
2572300.019965.7310.7929.130114.28378836.12826283.00.00.00.0...0.00.00.01.00.00.00.00.4849240.4558170.063858
3423600.017981.8926.8817.700122.12352440.3119352.00.00.00.0...0.00.01.00.00.00.00.00.4648550.4366540.064586
3770600.015941.3823.8313.750126.57564745.918566118.00.00.00.0...0.01.00.00.00.00.00.00.4445400.4755130.065135
1422330.018283.0013.2334.680112.76129937.634620849.00.00.00.0...0.00.00.00.01.00.00.00.4789540.5131120.066570
3660300.016031.0021.9639.790130.39705146.80550780.00.00.00.0...0.01.00.00.00.00.00.00.4208570.3942640.067449
2439600.019736.259.2129.210114.43778238.03886776.00.00.00.0...0.00.00.00.01.00.00.00.5520830.5170150.067829
3365300.013306.6223.5523.090121.22852541.14387944.00.00.00.0...0.00.00.01.00.00.00.00.3653390.3924300.069034
1211140.020919.0019.2926.120115.92094136.46644230.00.00.00.0...0.00.00.01.00.00.00.00.5253720.5652010.070470
2576300.021052.0010.7431.360114.28378836.12826283.00.00.00.0...0.00.00.01.00.00.00.00.5357500.5763670.070472
3395350.013278.0047.6720.720123.82191041.354877147.00.00.00.0...0.00.00.01.00.00.00.00.3620740.3382300.070499
1732200.017620.6419.2514.38087.66057743.7500581010.00.00.00.0...0.00.00.01.00.00.00.00.4667490.4359410.070672
1244150.020030.4926.1327.880117.14242435.07586265.00.00.00.0...0.00.00.01.00.00.00.00.5198000.5594120.070810
1227145.019292.6619.4426.570117.42102736.73836857.00.00.00.0...0.00.00.01.00.00.00.00.4710880.4396720.071453
1213140.021160.0024.2620.310118.33534735.01788165.00.00.00.0...0.00.00.01.00.00.00.00.5848750.6300510.071702
2224350.021061.7526.0614.167116.86026039.95361727.00.00.00.0...0.00.00.01.00.00.00.00.5472430.5100400.072941
3381300.014582.0028.3423.200124.33073940.115662135.00.00.00.0...0.00.00.01.00.00.00.00.3782660.4103160.078112
1195140.019731.0022.2326.550118.33534735.01788165.00.00.00.0...0.00.00.01.00.00.00.00.5186490.4805650.079248
2366330.020310.2415.5332.640114.70398738.01436457.00.00.00.0...0.00.00.01.00.00.00.00.5055840.5517640.083696
1453220.020434.0026.7027.410113.23228940.0675561061.00.00.00.0...0.00.00.00.01.00.00.00.5365670.4936860.086859
1624330.017470.0036.1727.62082.89272941.7413651066.00.00.00.0...0.00.00.00.00.00.01.00.4745440.5251900.096434
3383300.015736.0043.8537.540123.81738042.34720198.00.00.00.0...0.00.00.01.00.00.00.00.4283440.4758050.099748
1128350.020403.0036.5125.690117.14930436.084927123.00.00.00.0...0.00.00.01.00.00.00.00.4843470.5410390.104785
2636350.018193.0016.9631.720112.40942934.584441160.00.00.00.0...0.00.00.01.00.00.00.00.4656850.4200980.108516
2992350.023253.6823.7218.450113.67268430.91849434.00.00.00.0...0.00.00.01.00.00.00.00.5902820.6636180.110509
881165.020822.0039.5724.600118.12835437.6946428.00.00.00.0...0.01.00.00.00.00.00.00.5617820.6332260.112826
2644350.019871.7621.0630.780113.87598636.116424294.00.00.00.0...0.00.00.01.00.00.00.00.5215700.4676940.115195
2627330.020682.0011.5228.850113.86606235.24837572.00.00.00.0...0.00.00.01.00.00.00.00.5639660.6379250.115937
3666330.014813.0043.7414.460124.61384346.144809154.00.00.00.0...0.00.01.00.00.00.00.00.4030540.4563620.116811
2215315.021691.5923.8011.900116.86026039.95361727.00.00.00.0...0.00.00.01.00.00.00.00.5490920.4908240.118715
1717350.022600.0328.6718.68076.05487639.4840971288.00.00.00.0...0.00.00.00.00.00.01.00.6282430.5605380.120785
2686660.017624.1531.7932.040115.27088735.77554048.00.00.00.0...0.00.00.01.00.00.00.00.4288970.3819880.122801
3228300.013075.0028.4527.010123.94318241.899725124.00.00.00.0...0.01.00.00.00.00.00.00.3562030.3170930.123338
2311300.019779.0017.4931.090114.52586337.95993363.00.00.00.0...0.00.00.01.00.00.00.00.5058980.4499740.124284
1064330.022054.0020.0820.800117.10314936.71876127.00.00.00.0...0.00.00.01.00.00.00.00.5498200.6282800.124881
1710350.020519.7524.2312.71076.05487639.4840971288.00.00.00.0...0.00.00.00.00.00.01.00.5165070.4347810.187970
1651330.017913.0035.0822.07087.70363043.909559724.00.00.00.0...0.00.00.01.00.00.00.00.4710820.3952660.191812
3391300.013874.0024.0120.430121.22852541.14387944.00.00.00.0...0.00.00.01.00.00.00.00.3786570.4705810.195341
3793215.016471.1130.1038.670129.60480344.608202250.00.00.00.0...0.00.00.01.00.00.00.00.4287700.3216350.333093
1022330.020634.7724.6625.390119.27628936.66874775.00.00.00.0...0.00.00.01.00.00.00.00.5302510.0731126.252559
343670.014109.0045.2013.640125.94174744.106509199.00.00.00.0...0.00.00.01.00.00.00.00.3982570.0388029.263788
\n

55 rows × 66 columns

\n
" + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test_data[test_data.error_rate > 0.05].sort_values(by='error_rate')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 49, + "outputs": [ + { + "data": { + "text/plain": "(376, 66)" + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test_data.shape" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "power_eva_df = pd.DataFrame.from_records([y_true_xgb, y_pred_xgb]).T\n", + "power_eva_df.to_csv('./发电测试结果.csv', index=False, encoding='utf-8-sig')" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "gb_model.save_model('./models/power_model.txt')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### 发热建模" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "def xgb_cv(max_depth, learning_rate, min_child_weight, subsample, colsample_bytree, reg_alpha, gamma):\n", + " val = cross_val_score(estimator=XGBRegressor(max_depth=int(max_depth),\n", + " learning_rate=learning_rate,\n", + " n_estimators=2000,\n", + " min_child_weight=min_child_weight,\n", + " subsample=max(min(subsample, 1), 0),\n", + " colsample_bytree=max(min(colsample_bytree, 1), 0),\n", + " reg_alpha=max(reg_alpha, 0), gamma=gamma, objective='reg:squarederror',\n", + " booster='gbtree',\n", + " seed=10), X=train[feature_cols], y=train['供热碳排放因子(kg/MJ)'], scoring='r2',\n", + " cv=10).max()\n", + " return val" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "params_xgb = {'objective': 'reg:squarederror',\n", + " 'booster': 'gbtree',\n", + " 'eta': 0.005,\n", + " 'max_depth': 60,\n", + " 'subsample': 0.5,\n", + " 'colsample_bytree': 0.9,\n", + " 'min_child_weight': 30,\n", + " 'seed': 666}\n", + "\n", + "num_boost_round = 2000" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 2.7E-05, RMSE: 0.0052, MAE: 0.0025, MAPE: 4.651 %, R_2: 0.7287\n", + "MSE: 2.8E-05, RMSE: 0.0053, MAE: 0.0028, MAPE: 4.129 %, R_2: 0.7189\n", + "MSE: 2.0E-05, RMSE: 0.0045, MAE: 0.0026, MAPE: 3.629 %, R_2: 0.7839\n", + "MSE: 1.6E-05, RMSE: 0.004, MAE: 0.0025, MAPE: 3.73 %, R_2: 0.8376\n", + "MSE: 3.0E-05, RMSE: 0.0054, MAE: 0.0029, MAPE: 5.181 %, R_2: 0.7219\n", + "MSE: 1.9E-05, RMSE: 0.0044, MAE: 0.0025, MAPE: 3.849 %, R_2: 0.8013\n", + "MSE: 3.1E-05, RMSE: 0.0056, MAE: 0.0028, MAPE: 5.661 %, R_2: 0.7182\n", + "MSE: 2.3E-05, RMSE: 0.0048, MAE: 0.0026, MAPE: 4.386 %, R_2: 0.7888\n", + "MSE: 2.0E-05, RMSE: 0.0045, MAE: 0.0024, MAPE: 3.456 %, R_2: 0.8005\n", + "MSE: 2.3E-05, RMSE: 0.0048, MAE: 0.0027, MAPE: 3.897 %, R_2: 0.7742\n" + ] + } + ], + "source": [ + "eva_list = list()\n", + "for (train_index, test_index) in kf.split(train_data):\n", + " train = train_data.loc[train_index]\n", + " test = train_data.loc[test_index]\n", + " train, valid = train_test_split(train, test_size=0.11, random_state=42)\n", + " X_train, Y_train = train[feature_cols], train['供热碳排放因子(kg/MJ)']\n", + " X_valid, Y_valid = valid[feature_cols], valid['供热碳排放因子(kg/MJ)']\n", + " X_test, Y_test = valid[feature_cols], valid['供热碳排放因子(kg/MJ)']\n", + " dtrain = xgb.DMatrix(X_train, Y_train)\n", + " dvalid = xgb.DMatrix(X_valid, Y_valid)\n", + " watchlist = [(dvalid, 'eval')]\n", + " gb_model = xgb.train(params_xgb, dtrain, num_boost_round, evals=watchlist,\n", + " early_stopping_rounds=100, verbose_eval=False)\n", + " y_pred = gb_model.predict(xgb.DMatrix(X_test))\n", + " y_true = Y_test.values\n", + " MSE = mean_squared_error(y_true, y_pred)\n", + " RMSE = np.sqrt(mean_squared_error(y_true, y_pred))\n", + " MAE = mean_absolute_error(y_true, y_pred)\n", + " MAPE = mean_absolute_percentage_error(y_true, y_pred)\n", + " R_2 = r2_score(y_true, y_pred)\n", + " print('MSE:', format(MSE, '.1E'), end=', ')\n", + " print('RMSE:', round(RMSE, 4), end=', ')\n", + " print('MAE:', round(MAE, 4), end=', ')\n", + " print('MAPE:', round(MAPE*100, 3), '%', end=', ')\n", + " print('R_2:', round(R_2, 4)) #R方为负就说明拟合效果比平均值差\n", + " eva_list.append([MSE, RMSE, MAE, MAPE, R_2])\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 55, + "outputs": [], + "source": [ + "\n", + "dtrain = xgb.DMatrix(train_X, train_y.values[:, 1])\n", + "dvalid = xgb.DMatrix(valid_X, valid_y.values[:, 1])\n", + "watchlist = [(dtrain, 'train'), (dvalid, 'eval')]\n", + "\n", + "gb_model_heat = xgb.train(params_xgb, dtrain, num_boost_round, evals=watchlist,\n", + " early_stopping_rounds=200, verbose_eval=False)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "y_pred_heat = gb_model_heat.predict(xgb.DMatrix(test_X[feature_cols]))\n", + "y_true_heat = test_y.values[:, 1]" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 1.7E-05\n", + "RMSE: 0.0041\n", + "MAE: 0.0024\n", + "MAPE: 3.61 %\n", + "R_2: 0.8188\n" + ] + } + ], + "source": [ + "MSE = mean_squared_error(y_true_heat, y_pred_heat)\n", + "RMSE = np.sqrt(mean_squared_error(y_true_heat, y_pred_heat))\n", + "MAE = mean_absolute_error(y_true_heat, y_pred_heat)\n", + "MAPE = mean_absolute_percentage_error(y_true_heat, y_pred_heat)\n", + "R_2 = r2_score(y_true_heat, y_pred_heat)\n", + "print('MSE:', format(MSE, '.1E'))\n", + "print('RMSE:', round(RMSE, 4))\n", + "print('MAE:', round(MAE, 4))\n", + "print('MAPE:', round(MAPE*100, 2), '%')\n", + "print('R_2:', round(R_2, 4)) #R方为负就说明拟合效果比平均值差a" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "pd.DataFrame.from_records([y_true_heat, y_pred_heat]).T.to_csv('./供热测试结果.csv', index=False, encoding='utf-8-sig')" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "gb_model_heat.save_model('./models/heat_model.txt')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### 煤种标准化工程" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "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.\n", + " \"\"\"Entry point for launching an IPython kernel.\n" + ] + } + ], + "source": [ + "new_values = use_data.groupby(['煤种', '入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)'])['发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'].mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": " 发电碳排放因子(kg/kWh) 供热碳排放因子(kg/MJ)\n煤种 入炉煤低位热值(kJ/kg) 燃煤挥发份Var(%) 燃煤灰份Aar(%) \n无烟煤 19827.00 11.18 2539.00 0.561424 0.087794\n烟煤 16733.00 22.53 27.46 0.441511 0.064259\n 16740.00 18.99 37.00 0.487225 0.064535\n 27.93 24.43 0.418457 0.064747\n 16741.00 26.69 25.92 0.433679 0.061822\n... ... ...\n贫煤 21938.00 13.40 22.58 0.615856 0.099905\n 22042.72 12.96 25.69 0.636563 0.079468\n 22149.00 12.43 25.10 0.629733 0.082772\n 22272.51 11.83 22.97 0.627877 0.083234\n 22475.97 8.90 23.98 0.620331 0.086574\n\n[3579 rows x 2 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)
煤种入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)
无烟煤19827.0011.182539.000.5614240.087794
烟煤16733.0022.5327.460.4415110.064259
16740.0018.9937.000.4872250.064535
27.9324.430.4184570.064747
16741.0026.6925.920.4336790.061822
..................
贫煤21938.0013.4022.580.6158560.099905
22042.7212.9625.690.6365630.079468
22149.0012.4325.100.6297330.082772
22272.5111.8322.970.6278770.083234
22475.978.9023.980.6203310.086574
\n

3579 rows × 2 columns

\n
" + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_values" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": " 煤种 入炉煤低位热值(kJ/kg) 燃煤挥发份Var(%) 燃煤灰份Aar(%)\n0 无烟煤 19827.00 11.18 2539.00\n1 烟煤 16733.00 22.53 27.46\n2 烟煤 16740.00 18.99 37.00\n3 烟煤 16740.00 27.93 24.43\n4 烟煤 16741.00 26.69 25.92\n... ... ... ... ...\n3574 贫煤 21938.00 13.40 22.58\n3575 贫煤 22042.72 12.96 25.69\n3576 贫煤 22149.00 12.43 25.10\n3577 贫煤 22272.51 11.83 22.97\n3578 贫煤 22475.97 8.90 23.98\n\n[3579 rows x 4 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
煤种入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)
0无烟煤19827.0011.182539.00
1烟煤16733.0022.5327.46
2烟煤16740.0018.9937.00
3烟煤16740.0027.9324.43
4烟煤16741.0026.6925.92
...............
3574贫煤21938.0013.4022.58
3575贫煤22042.7212.9625.69
3576贫煤22149.0012.4325.10
3577贫煤22272.5111.8322.97
3578贫煤22475.978.9023.98
\n

3579 rows × 4 columns

\n
" + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coal_df = new_values.reset_index().drop(columns=['发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'])\n", + "coal_df" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "coal_params_dict = dict()\n", + "for coal_type in coal_df['煤种'].unique().tolist():\n", + " options = coal_df[coal_df['煤种']==coal_type][['入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)']].values\n", + " coal_params_dict[coal_type] = options" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": " 企业名称 机组编号 铭牌容量 (MW) 机组类型 参数分类 冷凝器型式 入炉煤低位热值(kJ/kg) \\\n0 江苏利港电力有限公司 1 350.0 凝气式 亚临界 水冷-开式循环 21602.05000 \n1 江苏利港电力有限公司 1 350.0 凝气式 亚临界 水冷-开式循环 21926.81000 \n2 江苏利港电力有限公司 1 350.0 凝气式 亚临界 水冷-开式循环 21261.93062 \n3 江苏利港电力有限公司 1 350.0 凝气式 亚临界 水冷-开式循环 20840.00000 \n4 江苏利港电力有限公司 1 350.0 凝气式 亚临界 水冷-开式循环 20706.00000 \n... ... ... ... ... ... ... ... \n5689 浙江浙能电力股份有限公司台州发电厂 8 350.0 凝气式 亚临界 水冷-开式循环 21973.00000 \n5690 浙江浙能电力股份有限公司台州发电厂 8 350.0 凝气式 亚临界 水冷-开式循环 21372.00000 \n5691 浙江浙能电力股份有限公司台州发电厂 8 350.0 凝气式 亚临界 水冷-开式循环 20856.00000 \n5692 榆能榆神热电有限公司 1 350.0 抽凝式 超临界 间接空冷 25514.00000 \n5693 榆能榆神热电有限公司 2 350.0 抽凝式 超临界 间接空冷 25514.00000 \n\n 燃煤挥发份Var(%) 燃煤灰份Aar(%) 煤种 所处地区 longitude latitude altitude \\\n0 26.09 16.80 烟煤 江苏省 120.096620 31.942361 1 \n1 26.68 15.41 烟煤 江苏省 120.096620 31.942361 1 \n2 26.46 15.18 烟煤 江苏省 120.096620 31.942361 1 \n3 26.43 14.55 烟煤 江苏省 120.096620 31.942361 1 \n4 26.43 14.96 烟煤 江苏省 120.096620 31.942361 1 \n... ... ... .. ... ... ... ... \n5689 37.43 17.12 烟煤 浙江省 121.465840 28.704623 73 \n5690 39.87 18.01 烟煤 浙江省 121.465840 28.704623 73 \n5691 39.32 19.74 烟煤 浙江省 121.465840 28.704623 73 \n5692 38.84 7.28 烟煤 陕西省 109.820265 38.304383 1151 \n5693 38.84 7.28 烟煤 陕西省 109.820265 38.304383 1151 \n\n 发电碳排放因子(kg/kWh) 供热碳排放因子(kg/MJ) 核心设备类型 汽轮机类型 冷却方式 \n0 0.586990 0.076843 煤粉锅炉 凝气式 水冷-开式循环 \n1 0.632859 0.077676 煤粉锅炉 凝气式 水冷-开式循环 \n2 0.609196 0.074823 煤粉锅炉 凝气式 水冷-开式循环 \n3 0.602178 0.081628 煤粉锅炉 凝气式 水冷-开式循环 \n4 0.590254 0.081103 煤粉锅炉 凝气式 水冷-开式循环 \n... ... ... ... ... ... \n5689 0.628300 0.078776 煤粉锅炉 凝气式 水冷-开式循环 \n5690 0.595019 0.076622 煤粉锅炉 凝气式 水冷-开式循环 \n5691 0.565718 0.074772 煤粉锅炉 凝气式 水冷-开式循环 \n5692 0.664456 0.091482 煤粉锅炉 抽凝式 空冷-间接空冷 \n5693 0.661759 0.091483 煤粉锅炉 抽凝式 空冷-间接空冷 \n\n[5041 rows x 19 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
企业名称机组编号铭牌容量 (MW)机组类型参数分类冷凝器型式入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)煤种所处地区longitudelatitudealtitude发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)核心设备类型汽轮机类型冷却方式
0江苏利港电力有限公司1350.0凝气式亚临界水冷-开式循环21602.0500026.0916.80烟煤江苏省120.09662031.94236110.5869900.076843煤粉锅炉凝气式水冷-开式循环
1江苏利港电力有限公司1350.0凝气式亚临界水冷-开式循环21926.8100026.6815.41烟煤江苏省120.09662031.94236110.6328590.077676煤粉锅炉凝气式水冷-开式循环
2江苏利港电力有限公司1350.0凝气式亚临界水冷-开式循环21261.9306226.4615.18烟煤江苏省120.09662031.94236110.6091960.074823煤粉锅炉凝气式水冷-开式循环
3江苏利港电力有限公司1350.0凝气式亚临界水冷-开式循环20840.0000026.4314.55烟煤江苏省120.09662031.94236110.6021780.081628煤粉锅炉凝气式水冷-开式循环
4江苏利港电力有限公司1350.0凝气式亚临界水冷-开式循环20706.0000026.4314.96烟煤江苏省120.09662031.94236110.5902540.081103煤粉锅炉凝气式水冷-开式循环
............................................................
5689浙江浙能电力股份有限公司台州发电厂8350.0凝气式亚临界水冷-开式循环21973.0000037.4317.12烟煤浙江省121.46584028.704623730.6283000.078776煤粉锅炉凝气式水冷-开式循环
5690浙江浙能电力股份有限公司台州发电厂8350.0凝气式亚临界水冷-开式循环21372.0000039.8718.01烟煤浙江省121.46584028.704623730.5950190.076622煤粉锅炉凝气式水冷-开式循环
5691浙江浙能电力股份有限公司台州发电厂8350.0凝气式亚临界水冷-开式循环20856.0000039.3219.74烟煤浙江省121.46584028.704623730.5657180.074772煤粉锅炉凝气式水冷-开式循环
5692榆能榆神热电有限公司1350.0抽凝式超临界间接空冷25514.0000038.847.28烟煤陕西省109.82026538.30438311510.6644560.091482煤粉锅炉抽凝式空冷-间接空冷
5693榆能榆神热电有限公司2350.0抽凝式超临界间接空冷25514.0000038.847.28烟煤陕西省109.82026538.30438311510.6617590.091483煤粉锅炉抽凝式空冷-间接空冷
\n

5041 rows × 19 columns

\n
" + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "use_data" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "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.\n", + " \"\"\"Entry point for launching an IPython kernel.\n" + ] + }, + { + "data": { + "text/plain": " 所处地区 机组类型 参数分类 冷凝器型式 铭牌容量 (MW) longitude latitude altitude 煤种 \\\n0 上海市 凝气式 亚临界 水冷-开式循环 300.0 121.471140 31.065113 3 烟煤 \n1 上海市 凝气式 亚临界 水冷-开式循环 300.0 121.471140 31.065113 3 烟煤 \n2 上海市 凝气式 亚临界 水冷-开式循环 300.0 121.471140 31.065113 3 烟煤 \n3 上海市 凝气式 亚临界 水冷-开式循环 300.0 121.471140 31.065113 3 烟煤 \n4 上海市 凝气式 亚临界 水冷-开式循环 320.0 121.601480 31.358794 2 褐煤 \n... ... ... ... ... ... ... ... ... .. \n3789 黑龙江省 纯凝式 超高压 水冷 200.0 126.575647 45.918566 118 褐煤 \n3790 黑龙江省 纯凝式 超高压 水冷 210.0 131.695864 46.580444 91 褐煤 \n3791 黑龙江省 背压式 超高压 水冷-开式循环 200.0 123.639146 47.210696 151 褐煤 \n3792 黑龙江省 背压式 超高压 水冷-闭式循环 215.0 129.604803 44.608202 250 褐煤 \n3793 黑龙江省 背压式 超高压 水冷-闭式循环 215.0 129.604803 44.608202 250 褐煤 \n\n 发电碳排放因子(kg/kWh) 供热碳排放因子(kg/MJ) \n0 0.623923 0.078064 \n1 0.639474 0.079308 \n2 0.635351 0.078691 \n3 0.674456 0.085853 \n4 0.506816 0.060934 \n... ... ... \n3789 0.500172 0.064200 \n3790 0.518301 0.063249 \n3791 0.224312 0.053770 \n3792 0.290814 0.068027 \n3793 0.321635 0.067798 \n\n[3794 rows x 11 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
所处地区机组类型参数分类冷凝器型式铭牌容量 (MW)longitudelatitudealtitude煤种发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)
0上海市凝气式亚临界水冷-开式循环300.0121.47114031.0651133烟煤0.6239230.078064
1上海市凝气式亚临界水冷-开式循环300.0121.47114031.0651133烟煤0.6394740.079308
2上海市凝气式亚临界水冷-开式循环300.0121.47114031.0651133烟煤0.6353510.078691
3上海市凝气式亚临界水冷-开式循环300.0121.47114031.0651133烟煤0.6744560.085853
4上海市凝气式亚临界水冷-开式循环320.0121.60148031.3587942褐煤0.5068160.060934
....................................
3789黑龙江省纯凝式超高压水冷200.0126.57564745.918566118褐煤0.5001720.064200
3790黑龙江省纯凝式超高压水冷210.0131.69586446.58044491褐煤0.5183010.063249
3791黑龙江省背压式超高压水冷-开式循环200.0123.63914647.210696151褐煤0.2243120.053770
3792黑龙江省背压式超高压水冷-闭式循环215.0129.60480344.608202250褐煤0.2908140.068027
3793黑龙江省背压式超高压水冷-闭式循环215.0129.60480344.608202250褐煤0.3216350.067798
\n

3794 rows × 11 columns

\n
" + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_use_data = use_data.groupby(use_cols+['煤种'])['发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'].mean().reset_index().drop(columns=['入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)'])\n", + "new_use_data" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_use_data['coal_params'] = new_use_data['煤种'].apply(lambda x: coal_params_dict.get(x))" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_use_data.drop(columns='煤种', inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_data = new_use_data.explode(column='coal_params')" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": " 所处地区 机组类型 参数分类 冷凝器型式 铭牌容量 (MW) longitude latitude altitude \\\n0 上海市 凝气式 亚临界 水冷-开式循环 300.0 121.471140 31.065113 3 \n0 上海市 凝气式 亚临界 水冷-开式循环 300.0 121.471140 31.065113 3 \n0 上海市 凝气式 亚临界 水冷-开式循环 300.0 121.471140 31.065113 3 \n0 上海市 凝气式 亚临界 水冷-开式循环 300.0 121.471140 31.065113 3 \n0 上海市 凝气式 亚临界 水冷-开式循环 300.0 121.471140 31.065113 3 \n... ... ... ... ... ... ... ... ... \n3793 黑龙江省 背压式 超高压 水冷-闭式循环 215.0 129.604803 44.608202 250 \n3793 黑龙江省 背压式 超高压 水冷-闭式循环 215.0 129.604803 44.608202 250 \n3793 黑龙江省 背压式 超高压 水冷-闭式循环 215.0 129.604803 44.608202 250 \n3793 黑龙江省 背压式 超高压 水冷-闭式循环 215.0 129.604803 44.608202 250 \n3793 黑龙江省 背压式 超高压 水冷-闭式循环 215.0 129.604803 44.608202 250 \n\n 发电碳排放因子(kg/kWh) 供热碳排放因子(kg/MJ) coal_params \n0 0.623923 0.078064 [16733.0, 22.53, 27.46] \n0 0.623923 0.078064 [16740.0, 18.99, 37.0] \n0 0.623923 0.078064 [16740.0, 27.93, 24.43] \n0 0.623923 0.078064 [16741.0, 26.69, 25.92] \n0 0.623923 0.078064 [16741.51, 19.51, 35.62] \n... ... ... ... \n3793 0.321635 0.067798 [16723.0, 40.63, 39.94] \n3793 0.321635 0.067798 [16725.0, 26.36, 28.51] \n3793 0.321635 0.067798 [16725.19, 34.59, 37.71] \n3793 0.321635 0.067798 [16725.85, 43.2, 12.0] \n3793 0.321635 0.067798 [16729.0, 51.42, 17.33] \n\n[8019537 rows x 11 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
所处地区机组类型参数分类冷凝器型式铭牌容量 (MW)longitudelatitudealtitude发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)coal_params
0上海市凝气式亚临界水冷-开式循环300.0121.47114031.06511330.6239230.078064[16733.0, 22.53, 27.46]
0上海市凝气式亚临界水冷-开式循环300.0121.47114031.06511330.6239230.078064[16740.0, 18.99, 37.0]
0上海市凝气式亚临界水冷-开式循环300.0121.47114031.06511330.6239230.078064[16740.0, 27.93, 24.43]
0上海市凝气式亚临界水冷-开式循环300.0121.47114031.06511330.6239230.078064[16741.0, 26.69, 25.92]
0上海市凝气式亚临界水冷-开式循环300.0121.47114031.06511330.6239230.078064[16741.51, 19.51, 35.62]
....................................
3793黑龙江省背压式超高压水冷-闭式循环215.0129.60480344.6082022500.3216350.067798[16723.0, 40.63, 39.94]
3793黑龙江省背压式超高压水冷-闭式循环215.0129.60480344.6082022500.3216350.067798[16725.0, 26.36, 28.51]
3793黑龙江省背压式超高压水冷-闭式循环215.0129.60480344.6082022500.3216350.067798[16725.19, 34.59, 37.71]
3793黑龙江省背压式超高压水冷-闭式循环215.0129.60480344.6082022500.3216350.067798[16725.85, 43.2, 12.0]
3793黑龙江省背压式超高压水冷-闭式循环215.0129.60480344.6082022500.3216350.067798[16729.0, 51.42, 17.33]
\n

8019537 rows × 11 columns

\n
" + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_data" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_data['入炉煤低位热值(kJ/kg)'] = new_data.coal_params.apply(lambda x: x[0]).values\n", + "new_data['燃煤挥发份Var(%)'] = new_data.coal_params.apply(lambda x: x[1]).values\n", + "new_data['燃煤灰份Aar(%)'] = new_data.coal_params.apply(lambda x: x[2]).values" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "norm_data = new_data.drop(columns='coal_params')" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": " 所处地区 机组类型 参数分类 冷凝器型式 铭牌容量 (MW) longitude latitude altitude \\\n0 上海市 凝气式 亚临界 水冷-开式循环 300.0 121.47114 31.065113 3 \n0 上海市 凝气式 亚临界 水冷-开式循环 300.0 121.47114 31.065113 3 \n0 上海市 凝气式 亚临界 水冷-开式循环 300.0 121.47114 31.065113 3 \n0 上海市 凝气式 亚临界 水冷-开式循环 300.0 121.47114 31.065113 3 \n0 上海市 凝气式 亚临界 水冷-开式循环 300.0 121.47114 31.065113 3 \n\n 发电碳排放因子(kg/kWh) 供热碳排放因子(kg/MJ) 入炉煤低位热值(kJ/kg) 燃煤挥发份Var(%) 燃煤灰份Aar(%) \n0 0.623923 0.078064 16733.00 22.53 27.46 \n0 0.623923 0.078064 16740.00 18.99 37.00 \n0 0.623923 0.078064 16740.00 27.93 24.43 \n0 0.623923 0.078064 16741.00 26.69 25.92 \n0 0.623923 0.078064 16741.51 19.51 35.62 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
所处地区机组类型参数分类冷凝器型式铭牌容量 (MW)longitudelatitudealtitude发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)
0上海市凝气式亚临界水冷-开式循环300.0121.4711431.06511330.6239230.07806416733.0022.5327.46
0上海市凝气式亚临界水冷-开式循环300.0121.4711431.06511330.6239230.07806416740.0018.9937.00
0上海市凝气式亚临界水冷-开式循环300.0121.4711431.06511330.6239230.07806416740.0027.9324.43
0上海市凝气式亚临界水冷-开式循环300.0121.4711431.06511330.6239230.07806416741.0026.6925.92
0上海市凝气式亚临界水冷-开式循环300.0121.4711431.06511330.6239230.07806416741.5119.5135.62
\n
" + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "norm_data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "for col in num_cols:\n", + " norm_data[col] = np.log1p(norm_data[col])\n", + " # total_data[col] = (total_data[col] - total_data[col].min()) / (total_data[col].max() - total_data[col].min())\n", + "norm_data_dummpy = pd.get_dummies(norm_data, columns=object_cols)" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "norm_data_dummpy.drop(columns=['发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'], inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_xgb_data = xgb.DMatrix(norm_data_dummpy[feature_cols])" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "norm_data['power_co2_factor'] = gb_model.predict(new_xgb_data)\n", + "norm_data['heat_co2_factor'] = gb_model_heat.predict(new_xgb_data)" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "normaled_data = norm_data.drop(columns=['入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)', '发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)'])" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": " 所处地区 机组类型 参数分类 冷凝器型式 铭牌容量 (MW) longitude latitude altitude \\\n0 上海市 凝气式 亚临界 水冷-开式循环 5.707110 4.807875 3.467769 1.386294 \n0 上海市 凝气式 亚临界 水冷-开式循环 5.707110 4.807875 3.467769 1.386294 \n0 上海市 凝气式 亚临界 水冷-开式循环 5.707110 4.807875 3.467769 1.386294 \n0 上海市 凝气式 亚临界 水冷-开式循环 5.707110 4.807875 3.467769 1.386294 \n0 上海市 凝气式 亚临界 水冷-开式循环 5.707110 4.807875 3.467769 1.386294 \n... ... ... ... ... ... ... ... ... \n3793 黑龙江省 背压式 超高压 水冷-闭式循环 5.375278 4.872176 3.820088 5.525453 \n3793 黑龙江省 背压式 超高压 水冷-闭式循环 5.375278 4.872176 3.820088 5.525453 \n3793 黑龙江省 背压式 超高压 水冷-闭式循环 5.375278 4.872176 3.820088 5.525453 \n3793 黑龙江省 背压式 超高压 水冷-闭式循环 5.375278 4.872176 3.820088 5.525453 \n3793 黑龙江省 背压式 超高压 水冷-闭式循环 5.375278 4.872176 3.820088 5.525453 \n\n power_co2_factor heat_co2_factor \n0 0.063166 0.063012 \n0 0.062317 0.062422 \n0 0.062508 0.062922 \n0 0.062466 0.062950 \n0 0.062743 0.063012 \n... ... ... \n3793 0.067768 0.068277 \n3793 0.066563 0.066854 \n3793 0.068115 0.068242 \n3793 0.066680 0.066995 \n3793 0.067563 0.067869 \n\n[8019537 rows x 10 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
所处地区机组类型参数分类冷凝器型式铭牌容量 (MW)longitudelatitudealtitudepower_co2_factorheat_co2_factor
0上海市凝气式亚临界水冷-开式循环5.7071104.8078753.4677691.3862940.0631660.063012
0上海市凝气式亚临界水冷-开式循环5.7071104.8078753.4677691.3862940.0623170.062422
0上海市凝气式亚临界水冷-开式循环5.7071104.8078753.4677691.3862940.0625080.062922
0上海市凝气式亚临界水冷-开式循环5.7071104.8078753.4677691.3862940.0624660.062950
0上海市凝气式亚临界水冷-开式循环5.7071104.8078753.4677691.3862940.0627430.063012
.................................
3793黑龙江省背压式超高压水冷-闭式循环5.3752784.8721763.8200885.5254530.0677680.068277
3793黑龙江省背压式超高压水冷-闭式循环5.3752784.8721763.8200885.5254530.0665630.066854
3793黑龙江省背压式超高压水冷-闭式循环5.3752784.8721763.8200885.5254530.0681150.068242
3793黑龙江省背压式超高压水冷-闭式循环5.3752784.8721763.8200885.5254530.0666800.066995
3793黑龙江省背压式超高压水冷-闭式循环5.3752784.8721763.8200885.5254530.0675630.067869
\n

8019537 rows × 10 columns

\n
" + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "normaled_data" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "target_cols = ['power_co2_factor', 'heat_co2_factor']" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "save_data = normaled_data.groupby([x for x in normaled_data.columns if x not in target_cols])[target_cols].mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "save_data.reset_index().to_csv('./results/去煤种化数据.csv', encoding='utf-8-sig', index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.13" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/两张表特征对齐.ipynb b/两张表特征对齐.ipynb new file mode 100644 index 0000000..0c79b8a --- /dev/null +++ b/两张表特征对齐.ipynb @@ -0,0 +1,591 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "8950aafd-80e8-4078-874c-966efdc4b0ac", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "50832980-f7e1-4a19-a5e0-b8a378ebd39b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
电厂名称机组编号铭牌容量 (MW)机组类型参数分类冷凝器型式入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)煤种所处地区longitudelatitudealtitude发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)
0江苏利港电力有限公司1350.0纯凝式亚临界水冷21602.0500026.0916.80烟煤江苏省120.0966231.9423611.00.5869900.076843
1江苏利港电力有限公司1350.0纯凝式亚临界水冷21926.8100026.6815.41烟煤江苏省120.0966231.9423611.00.6328590.077676
2江苏利港电力有限公司1350.0纯凝式亚临界水冷21261.9306226.4615.18烟煤江苏省120.0966231.9423611.00.6091960.074823
\n", + "
" + ], + "text/plain": [ + " 电厂名称 机组编号 铭牌容量 (MW) 机组类型 参数分类 冷凝器型式 入炉煤低位热值(kJ/kg) 燃煤挥发份Var(%) \\\n", + "0 江苏利港电力有限公司 1 350.0 纯凝式 亚临界 水冷 21602.05000 26.09 \n", + "1 江苏利港电力有限公司 1 350.0 纯凝式 亚临界 水冷 21926.81000 26.68 \n", + "2 江苏利港电力有限公司 1 350.0 纯凝式 亚临界 水冷 21261.93062 26.46 \n", + "\n", + " 燃煤灰份Aar(%) 煤种 所处地区 longitude latitude altitude 发电碳排放因子(kg/kWh) \\\n", + "0 16.80 烟煤 江苏省 120.09662 31.942361 1.0 0.586990 \n", + "1 15.41 烟煤 江苏省 120.09662 31.942361 1.0 0.632859 \n", + "2 15.18 烟煤 江苏省 120.09662 31.942361 1.0 0.609196 \n", + "\n", + " 供热碳排放因子(kg/MJ) \n", + "0 0.076843 \n", + "1 0.077676 \n", + "2 0.074823 " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data = pd.read_csv('train_data.csv')\n", + "total_data.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "499cac72-c6a3-4b86-8aed-6fc010b12693", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(5741, 16)" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "7ab5d82e-19bd-4aa4-9cd6-d2004718b00d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
发电类型地区城市企业名称机组编号机组状态机组数量单机容量(MW)总容量(MW)核心设备类型汽轮机类型压力参数冷却方式
0煤电安徽省安庆市国能神皖安庆发电有限责任公司1在役1320.0320.0煤粉锅炉凝气式亚临界水冷-开式循环
1煤电安徽省安庆市国能神皖安庆发电有限责任公司2在役1320.0320.0煤粉锅炉凝气式亚临界水冷-开式循环
2煤电安徽省安庆市国能神皖安庆发电有限责任公司3在役11000.01000.0煤粉锅炉凝气式超超临界水冷-闭式循环
\n", + "
" + ], + "text/plain": [ + " 发电类型 地区 城市 企业名称 机组编号 机组状态 机组数量 单机容量(MW) 总容量(MW) 核心设备类型 \\\n", + "0 煤电 安徽省 安庆市 国能神皖安庆发电有限责任公司 1 在役 1 320.0 320.0 煤粉锅炉 \n", + "1 煤电 安徽省 安庆市 国能神皖安庆发电有限责任公司 2 在役 1 320.0 320.0 煤粉锅炉 \n", + "2 煤电 安徽省 安庆市 国能神皖安庆发电有限责任公司 3 在役 1 1000.0 1000.0 煤粉锅炉 \n", + "\n", + " 汽轮机类型 压力参数 冷却方式 \n", + "0 凝气式 亚临界 水冷-开式循环 \n", + "1 凝气式 亚临界 水冷-开式循环 \n", + "2 凝气式 超超临界 水冷-闭式循环 " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "unit_data = pd.read_excel('./data/煤电机组情况(含企业名称).xlsx')\n", + "unit_data.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "c4d54203-5343-43df-b594-f6a13e6f47a1", + "metadata": {}, + "outputs": [], + "source": [ + "total_data.rename(columns={'电厂名称':'企业名称'}, inplace=True)\n", + "total_data['机组编号'] = total_data['机组编号'].astype('str')\n", + "unit_data['机组编号'] = unit_data['机组编号'].astype('str')" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "757e26c3-cd1b-48a3-9668-78e13f40436f", + "metadata": {}, + "outputs": [], + "source": [ + "def change_type(x:str):\n", + " if pd.isna(x):\n", + " return x\n", + " x = x.strip()\n", + " if '纯凝' in x:\n", + " return '纯凝式'\n", + " if '供热' in x:\n", + " return '供热式'\n", + " if '煤粉' in x:\n", + " return '煤粉锅炉'\n", + " if x.startswith('循环流化床'):\n", + " return '循环流化床锅炉'\n", + " if '三废' in x:\n", + " return '三废炉'\n", + " if '直接空冷' in x:\n", + " return '直接空冷'\n", + " if '间接空冷' in x:\n", + " return '间接空冷'\n", + " return x" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "fcc7c556-ae7b-4be1-9163-709ce1ca084c", + "metadata": {}, + "outputs": [], + "source": [ + "merge_data = total_data.merge(unit_data[['企业名称','机组编号','汽轮机类型', '压力参数', '冷却方式']], how='left', on=['企业名称', '机组编号'])" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "3af6ad2f-a881-4ee6-9a27-ecbe75c97b31", + "metadata": {}, + "outputs": [], + "source": [ + "merge_data['机组类型'] = merge_data.apply(lambda x: x['机组类型'] if pd.isna(x['汽轮机类型']) else x['汽轮机类型'], axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "dec103bc-c868-4557-ba83-9bbb02f8e9f8", + "metadata": {}, + "outputs": [], + "source": [ + "merge_data['参数分类'] = merge_data.apply(lambda x: x['参数分类'] if pd.isna(x['压力参数']) else x['压力参数'], axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "454273f0-51ab-4a75-9c44-9ae8b7cc2a79", + "metadata": {}, + "outputs": [], + "source": [ + "merge_data['冷凝器型式'] = merge_data.apply(lambda x: x['冷凝器型式'] if pd.isna(x['冷却方式']) else x['冷却方式'], axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "d3c9cb26-63b4-4c72-9c5b-d90a2c5867ca", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "水冷-闭式循环 2143\n", + "水冷 1166\n", + "水冷-开式循环 1101\n", + "空冷-直接空冷 492\n", + "直接空冷 241\n", + "空冷-间接空冷 154\n", + "间接空冷 74\n", + "空冷 19\n", + "其他 2\n", + "Name: 冷凝器型式, dtype: int64" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "merge_data['冷凝器型式'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "30b2d793-7b44-434a-96e3-c6ce15295881", + "metadata": {}, + "outputs": [], + "source": [ + "use_data = merge_data[merge_data.columns[:-3]].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "fbdf13c0-6174-463b-9dd0-9ed736e6d126", + "metadata": {}, + "outputs": [], + "source": [ + "for col in ['机组类型', '参数分类', '冷凝器型式']:\n", + " use_data[col] = use_data[col].apply(change_type)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "ff803c5a-5e56-462b-81fc-639877395d69", + "metadata": {}, + "outputs": [], + "source": [ + "use_data.to_excel('train_data.xlsx', index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "28d8d579-d816-4117-8c49-a755fdffe1a1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
发电类型地区城市企业名称机组编号机组状态机组数量单机容量(MW)总容量(MW)核心设备类型汽轮机类型压力参数冷却方式
4026煤电山西省临汾市国家能源集团华北电力有限公司霍州发电厂1在役1600.0600.0煤粉锅炉凝气式超临界空冷-直接空冷
4027煤电山西省临汾市国家能源集团华北电力有限公司霍州发电厂2在役1600.0600.0煤粉锅炉凝气式超临界空冷-直接空冷
4056煤电山西省吕梁市霍州煤电集团吕梁山煤电有限公司方山发电厂1在役160.060.0循环流化床锅炉抽凝式高压空冷-直接空冷
4057煤电山西省吕梁市霍州煤电集团吕梁山煤电有限公司方山发电厂2在役160.060.0循环流化床锅炉抽凝式高压空冷-直接空冷
\n", + "
" + ], + "text/plain": [ + " 发电类型 地区 城市 企业名称 机组编号 机组状态 机组数量 单机容量(MW) 总容量(MW) \\\n", + "4026 煤电 山西省 临汾市 国家能源集团华北电力有限公司霍州发电厂 1 在役 1 600.0 600.0 \n", + "4027 煤电 山西省 临汾市 国家能源集团华北电力有限公司霍州发电厂 2 在役 1 600.0 600.0 \n", + "4056 煤电 山西省 吕梁市 霍州煤电集团吕梁山煤电有限公司方山发电厂 1 在役 1 60.0 60.0 \n", + "4057 煤电 山西省 吕梁市 霍州煤电集团吕梁山煤电有限公司方山发电厂 2 在役 1 60.0 60.0 \n", + "\n", + " 核心设备类型 汽轮机类型 压力参数 冷却方式 \n", + "4026 煤粉锅炉 凝气式 超临界 空冷-直接空冷 \n", + "4027 煤粉锅炉 凝气式 超临界 空冷-直接空冷 \n", + "4056 循环流化床锅炉 抽凝式 高压 空冷-直接空冷 \n", + "4057 循环流化床锅炉 抽凝式 高压 空冷-直接空冷 " + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "unit_data[unit_data['企业名称'].str.contains('霍州')]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "20c531d0-62eb-4475-ab3a-3c8477f36a55", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/基于attention+LSTM对天数据建模.ipynb b/基于attention+LSTM对天数据建模.ipynb new file mode 100644 index 0000000..10dda4d --- /dev/null +++ b/基于attention+LSTM对天数据建模.ipynb @@ -0,0 +1,737 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "outputs": [ + { + "ename": "ImportError", + "evalue": "cannot import name 'get_config' from 'tensorflow.python.eager.context' (C:\\Users\\zhaojh\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow\\python\\eager\\context.py)", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mImportError\u001B[0m Traceback (most recent call last)", + "\u001B[1;32m~\\AppData\\Local\\Temp\\ipykernel_7812\\4169542727.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 1\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mnumpy\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0mnp\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 2\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mpandas\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0mpd\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m----> 3\u001B[1;33m \u001B[1;32mimport\u001B[0m \u001B[0mkeras\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 4\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mkeras\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mlayers\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mDense\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mConv1D\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mInput\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mBidirectional\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mLSTM\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mMultiply\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mDropout\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mFlatten\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mSoftmax\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mLambda\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 5\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mkeras\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mmodels\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mModel\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32m~\\AppData\\Roaming\\Python\\Python37\\site-packages\\keras\\__init__.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 23\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 24\u001B[0m \u001B[1;31m# See b/110718070#comment18 for more details about this import.\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 25\u001B[1;33m \u001B[1;32mfrom\u001B[0m \u001B[0mkeras\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mmodels\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 26\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 27\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mkeras\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mengine\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0minput_layer\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mInput\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32m~\\AppData\\Roaming\\Python\\Python37\\site-packages\\keras\\models.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 17\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 18\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mtensorflow\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mcompat\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mv2\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0mtf\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 19\u001B[1;33m \u001B[1;32mfrom\u001B[0m \u001B[0mkeras\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mbackend\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 20\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mkeras\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mmetrics\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0mmetrics_module\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 21\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mkeras\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0moptimizer_v1\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32m~\\AppData\\Roaming\\Python\\Python37\\site-packages\\keras\\backend.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 35\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mtensorflow\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mpython\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mdistribute\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mdistribute_coordinator\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0mdc\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 36\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mtensorflow\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mpython\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mdistribute\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mdistribute_coordinator_context\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0mdc_context\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 37\u001B[1;33m \u001B[1;32mfrom\u001B[0m \u001B[0mtensorflow\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mpython\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0meager\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mcontext\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mget_config\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 38\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mtensorflow\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mpython\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mframework\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mconfig\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 39\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mkeras\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mbackend_config\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;31mImportError\u001B[0m: cannot import name 'get_config' from 'tensorflow.python.eager.context' (C:\\Users\\zhaojh\\AppData\\Roaming\\Python\\Python37\\site-packages\\tensorflow\\python\\eager\\context.py)" + ] + } + ], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import keras\n", + "from keras.layers import Dense, Conv1D, Input, Bidirectional, LSTM, Multiply, Dropout, Flatten, Softmax, Lambda\n", + "from keras.models import Model" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "data = pd.read_csv('./train_data_processed.csv')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 3, + "outputs": [], + "source": [ + "obj_cols = data.columns[-32:]\n", + "num_cols = [x for x in data.columns if x not in obj_cols]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 4, + "outputs": [], + "source": [ + "maxs = data[num_cols].max()\n", + "mins = data[num_cols].min()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 5, + "outputs": [], + "source": [ + "for col in num_cols:\n", + " data[col] = (data[col] - mins[col]) / (maxs[col] - mins[col])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 6, + "outputs": [], + "source": [ + "optim = keras.optimizers.Adam(learning_rate=5e-4)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 7, + "outputs": [], + "source": [ + "def build_model(n_features, n_outs):\n", + " inputs = Input(shape=(1, n_features))\n", + " x = Conv1D(filters=64, kernel_size=1, activation='relu')(inputs)\n", + " x = Dropout(rate=0.1)(x)\n", + " lstm_out = Bidirectional(LSTM(units=128, return_sequences=True))(x)\n", + " attention_pre = Dense(1, name='attention_vec')(lstm_out)\n", + " attention_probs = Softmax()(attention_pre)\n", + " attention_mul = Multiply()([attention_probs, lstm_out])\n", + " attention_mul = Flatten()(attention_mul)\n", + " output = Dense(32, activation='relu')(attention_mul)\n", + " output = Dense(n_outs, activation='sigmoid')(output)\n", + " model = Model(inputs=[inputs], outputs=output)\n", + " model.summary()\n", + " model.compile(loss='mse', optimizer=optim,)\n", + " return model" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 8, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"model_1\"\n", + "__________________________________________________________________________________________________\n", + "Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + "input_1 (InputLayer) (None, 1, 251) 0 \n", + "__________________________________________________________________________________________________\n", + "conv1d_1 (Conv1D) (None, 1, 64) 16128 input_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "dropout_1 (Dropout) (None, 1, 64) 0 conv1d_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "bidirectional_1 (Bidirectional) (None, 1, 256) 197632 dropout_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "attention_vec (Dense) (None, 1, 1) 257 bidirectional_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "softmax_1 (Softmax) (None, 1, 1) 0 attention_vec[0][0] \n", + "__________________________________________________________________________________________________\n", + "multiply_1 (Multiply) (None, 1, 256) 0 softmax_1[0][0] \n", + " bidirectional_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "flatten_1 (Flatten) (None, 256) 0 multiply_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "dense_1 (Dense) (None, 32) 8224 flatten_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "dense_2 (Dense) (None, 1) 33 dense_1[0][0] \n", + "==================================================================================================\n", + "Total params: 222,274\n", + "Trainable params: 222,274\n", + "Non-trainable params: 0\n", + "__________________________________________________________________________________________________\n" + ] + } + ], + "source": [ + "model = build_model(len(data.columns) - 1, 1)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 9, + "outputs": [], + "source": [ + "from tensorflow.python.keras.utils.vis_utils import plot_model" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 10, + "outputs": [ + { + "data": { + "image/png": "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AXs75n6LiFCmf1+INrX4Tm3IUYIg1NXVab91OTeuhQCyFiIEwCQbP+wAEWJ+MEGV4a44RECEcgBCks3QkQNggggBMEGEAJggQgBMECEAJogQABNECIAJIgTABBECYIIIATBBhACYIEIATBAhACYc3qnd2tra49dEgEpRlPgfdgC+Mt0KFRcXT548OcMrzV2KomzZsuXAgQNpWn44HN6zZ09nZ2ealm88ZWVlI0aM+NaoHr9vATh6+umne/XqtXv37jQt//Dhw/369fvlL3+ZpuWbASKUvT755JM+ffr86le/SutannrqqT59+hw4cCCtazGwTH+DD+jU1dU1ffr0r7/+euvWrVarNX0rOn/+/HXXXXfttddu2rQpfWsxMNyRy1K//e1vt23btn79+rTmhxBSUFDwX//1Xy+//PLbb7+d1hUZFVqhbLR3797rr7/+8ccff/zxxzOzxrvvvnvv3r07d+5Md2KNBxHKOl1dXTNmzDh58uS2bdsydkDv379/3LhxDofjgQceyMwaDQMduazz3HPPeb3edevWZbJB+N73vvev//qvy5cv//LLLzO2UmNAhLLLgQMH7Ha7JEk33nhjhlf9+OOPWyyWX/3qVxleb65DRy6LdHV1zZw586uvvvrLX/5SUFCQ+QKef/75n/70p7t377766qszv/YchQhlkeeff/6hhx5qbW2dOHEilwI6Ojquv/76sWPH4ncDEsD1v1Jw0YEDB/r372+32/mWQX+QmP5cNuiBVigrKIoya9asQ4cOffjhh7179+ZbzIwZMxRF+eMf/8i3jFyB2wlZYc2aNU1NTevXr+eeH0LIk08+2dzc/P777/MuJDegFeJPluXvf//7DzzwwFNPPcW7lm/Mnj372LFj27Ztw+cseoQIcaYoyp133inL8o4dO7KhCaI++uijG264YdOmTffccw/vWrIdIsSZy+Wy2WzNzc233HIL71q+ZcGCBR999NFHH32Ul5fHu5ashgjxdOTIkfHjxy9duvSZZ57hXUukvXv3jhs3bsOGDfSH5qE7iBBPs2fP3r9//44dO/r06cO7lhjuvffeHTt27N6922LBbaduYddw8+KLL77zzjtr167NzvyQCz9h/4c//IF3IVkNrRAfR44cufbaa5csWVJTU8O7lnjKy8v37dv34Ycf4tZcdxAhPu655x56sd63b1/etcSzc+fOG264oaGh4a677uJdS5ZChDjYsGHDj3/8482bN0+bNo13LT370Y9+dPTo0a1bt/IuJEshQpl29OjR8ePHL1y48D//8z9516LLtm3bJk2atHnz5hkzZvCuJRshQpk2d+7cHTt2fPTRR/369eNdi15Tp0699NJLX3vtNd6FZCPckcuol1566dVXX3U6nTmUH0LIQw895PF4PvnkE96FZCO0Qplz/Pjx8ePHl5eXP//887xrSUxXV9fo0aNnzZqVc5VnAFqhzKmurqZfrci7kIRZLJYHH3zwxRdf/OKLL3jXknUQoQypr69/+eWXnU5n//79edeSjCVLlhQUFLhcLt6FZB105DLh+PHj11577d1337169WretSTvZz/7WV1d3YEDB/DGUy1EKBMqKir+/Oc/7969u7CwkHctydu/f/+oUaNef/312bNn864liyBCadfQ0HD33Xe/+eabs2bN4l0Lq5kzZw4cOPDVV1/lXUgWQYTS64svvhg/frwoisa4inC73YsWLZJlediwYbxryRa4nZBeDz74YF5e3q9//WvehaTG3LlzBw0atH79et6FZBFEKGUOHjwY8W26r7/++ksvvfTCCy8MGjSIV1WpVVBQcO+997pcrq6uLt61ZAtEKGXWr18/ZswY9V0woVDIZrP9+Mc//tGPfsS3sNS6//77Dxw4sHnzZt6FZAtEKGXee++948eP33333fPnz//iiy8efPDBrq6uZ599lnddKTZu3LibbrrppZde4l1ItsDthNQ4e/bsgAEDwuEwIcRqtfbt27erq2vDhg2lpaW8S0s9h8PxH//xH36/n8sXf2cbtEKp0dLSQvNDCAmHwydOnDhx4sSaNWuOHDnCt7B0qKioCIVC7777Lu9CsgIilBpbtmzRnpLp1fZ77703ZswYp9PJr660GDFiRHFxcV1dHe9CsgIilBrvvvvu+fPnI0aGw+FTp079y7/8S2VlpcFuYVVUVLz22mtnzpzhXQh/iFAKnD59evv27TGfysvLGz58+MMPP2yw75GaN2/e6dOn33rrLd6F8Geo15WXP//5zx0dHdHjLRbLHXfc8dFHH/3gBz/IfFVpNXTo0FtuuQWfYyWIUEps3rw54t5UXl6exWKx2+0ej8cw/1eNMGvWrHfffRd3dBGhFIi4ELJarZdddllzc/MTTzxhsP6b1g9/+MOjR4/6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sOkhG+d+mhadmES1KvHvyNFZGhsb6VzBYJDGhl4b5OjeSChCTz/99He/+12dExtPCu7I0R6Cei2kKIrf76f3UonmZgOJolw4jCRJUo8J9an4gxHz0vtRag8q4nysHRNnW6LLo3qMkKIobW1t6iZLkqS9cM/FvZFQhJYtWzZ58mSdExuPoHTz7f2CINTV1Zn2O7VNrr6+vqKiortjI8KCBQvOnTv3yiuvpLuq7IQPOwCro0ePDh06lHcV3CBCwOrzzz8fMmQI7yq4MdFXrsR/Y5jOTgtEO3r06OWXX867Cm5MFCGEJB3OnDkTCoXQkQNI0tGjRwkhiBBAkg4ePEgufGrQnBAhYLJ///5LLrnEzLcTECFgsn///u9973s5+pUPKYEIAZP9+/f/wz/8A+8qeEKEgMnf//73733ve7yr4AkRAia0I8e7Cp4QIUjeiRMnvvjiC0QIIEn0gxWjRo3iXQhPiBAkb/v27f369UOEAJK0Y8eOG2+80WIx9VFk6o0HRh9++OGNN97IuwrOECFIUjgc3r179w033MC7EM7ifWo1w6VAton/3nafz3fDDTfs2rXr2muvzVhJWajbDzvQT8+DHq+88sobb7zx7LPPDhw4kHctmdPa2tqvX78xY8bwLoSzblsh0O/06dPf//73J06cWF9fz7uWzJk7d+65c+def/113oVwhmuhFLjkkktcLtemTZteffVV3rVkSGdn55YtW26//XbehfCHCKXGzJkzFy9e/JOf/OSrr77iXUsm/OUvf/nyyy8RIYIIpdDKlSstFsujjz7Ku5BMeP/996+44opx48bxLoQ/RChlBg4cuHLlynXr1r333nu8a0m7119/fdasWbyryAq4nZBic+fO/fDDD3ft2mXgH5E/cuTI8OHDGxoa7rrrLt618IdWKMX++7//OxQKLV++nHchafSHP/yhb9++JSUlvAvJCohQig0dOvQ3v/nNypUrW1paeNeSLq+99tqsWbN69+7Nu5CsgI5c6imKMmvWrPb2dp/P16tXL97lpFgwGBwyZMjatWurqqp415IV0AqlniAIa9asOXz48NNPP827ltR7+eWXLRaL+uuGgFYoXX77298+9thj27dvN9hbyG677bZBgwZt2rSJdyHZAhFKl66urmnTpoXD4ZaWlry8PN7lpMbnn38+YsSI+vr6OXPm8K4lW6Ajly4Wi2Xt2rU7d+587rnneNeSMm63u2/fvnfeeSfvQrIIIpRGY8aMeeyxxyRJ+vvf/867ltT4/e9/X1ZW1qdPH96FZBF05NKro6PjpptuGjRoUGNjY65/BOvDDz+cOHHiBx98cMstt/CuJYugFUqv/Pz8NWvWNDc3/8///A/vWlitW7fummuumTJlCu9CsgsilHY333zzv/3bv/30pz/97LPPeNeSvDNnzrjd7vvuuy/X29KUQ0cuE06fPj1hwoSxY8c2NDTwriVJv//97//5n//50KFDZv4Rh5gQoQzZsmXLzJkz6+vry8rKeNeSjOLi4uHDh2/cuJF3IVkHEcqc++67r6Gh4W9/+9tll13Gu5bEeL3eKVOm4EZCTIhQ5oRCofHjx99+++0vvvgi71oSM3/+/H379v31r3/lXUg2wu2EzBk4cODq1av/93//95133uFdSwI+++yzV1555aGHHuJdSJZCK5Rp8+bN27Zt265du/r378+7Fl1+/vOf//73vz9w4EBBQQHvWrIRWqFMe+GFF06fPi1JEu9CdDl9+vS6det+8pOfID/dQYQy7bLLLvvNb37z/PPPf/DBB7xr6dmLL754+vTppUuX8i4ke6Ejx8edd9554MABn8+XzZ/9VBRl3Lhx06ZNW7NmDe9ashdaIT7WrFlz5MiRp556inch8bz55puffPLJT37yE96FZDW0Qtw899xzP/3pT7dt25a1P44wbdq0Sy655O233+ZdSFZDhLjp6uqaPn36qVOntm3bZrVaeZcTafPmzTNnzmxubp46dSrvWrIaIsRTW1vb9ddf/8tf/vJnP/sZ71oi3XrrrXl5ee+//z7vQrKeAlytWLGiT58+n376Ke9CvoXeLdyyZQvvQnIAWiHOOjo6Jk2a1L9//82bN2fP5whuu+22rq6uzZs38y4kB+COHGf5+fnr1q1raWlxuVy8a/mG1+ttamoy9heyphAixN/111//0EMP/exnPzt8+LA68rPPPsvMOxi+/vrr4uLiP/3pT+qY5cuXT5kyZcaMGRlYuxHw7kmCoijK2bNnx4wZ80//9E+KonR1da1Zs6Zv3755eXmhUCjdq966dSs9EubMmbNv3z6v10sIef/999O9XsNAhLLFli1bBEH47W9/+4//+I8Wi4VeF7311lvpXu+6devo19xZrdb8/PwJEyZMmjQp3Ss1EnTkssXUqVPvvPPORx99dOvWrV1dXYqiFBQUaPtXabJnzx4aoXA43NHR8be//W3Pnj3PPPPM2bNn071qY0CEssKuXbt+8IMfvP322+FwOBwO05Hnz59vbGxM96p9Pt/58+fVwXA4fOrUqccff/yqq6763e9+p+CGbY94N4Nmd/bsWUmS8vLyYr5BwWq1nj59Oq0FdPcpdNqT/H//7/+lde0GgFaIszfffPPXv/51V1eX2vhohcNh9XI/Hb788svjx4939+ySJUvsdnv61m4MiBBn99xzT0tLyxVXXBGzFSooKGhubk7f2nfv3t3dU48++ui6devy8/PTt3ZjQIT4mzhxos/nmz59usUS+XKEw+Gmpqb0rXr37t0RIREEwWKxrFq16umnn86ed0tkM0QoK3znO9959913n3rqKXoEq+MVRWltbdVe7qfWnj17tDnJy8srKCh47bXXbDZbmtZoPIhQthAE4ec///nrr7/er18/bafu3Llz27dvT9NKd+zYoV6D5efn9+3bt7GxEb/jnRBEKLvMnj17165d3//+99X+VVovh/bs2UMfWK3WoUOHbtu2DV+2mChEKOuMHDmypaWlurqaECIIQkdHx5YtW9Kxos8///zEiROEEKvVOmrUqNbW1muuuSYdKzI2RCgb9erV67nnnlu7dq3ValUU5U9/+lNnZ2fK10JvxwmCMH369G3btl1xxRUpX4UZGOTzQl6v99lnn+VdReoFg8E///nPZ86cKSkpKSwsTO3CP/300507d1555ZUTJ06MvhloAJn5En2D7LhDhw4Z8jeoCwsLb7/99ssvv/zYsWMpX/iJEyfGjh170003GS8/hw8fztjxYKh/nBn1pzsURdm6devkyZNTu9iWlhaj/mRdfX19RUVFZtZltNOPIQmCkPL8EEKMmp8MQ4QAmCBCAEwQIQAmiBAAE0QIgAkiBMAEEQJggggBMEGEAJggQgBMECEAJogQABNECIAJIpSwQCBQW1tbWlra3QR2u13PNxj2uJwcYuZ9YqjPC2XG8uXLV69erR0TCoUKCwsT/fxv9HKSEwqFPv744127dnk8noaGBp1zab/7yuv1Rn+YorW1tbi4WB2Mv3XZtk8yiuOXEadQXV1dJrclYtfRA5d9OcmRJEn9Ma+EZpRlmc5ls9min1W/Ss7v9+tZWlbtk0weD+jIsQqFQnx/43HF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\n", + "text/plain": "" + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "plot_model(model, to_file='model.png')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 18, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 19, + "outputs": [ + { + "data": { + "text/plain": "251" + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "feature_cols = [x for x in data.columns if x != '燃料消耗量']\n", + "len(feature_cols)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 20, + "outputs": [], + "source": [ + "train_data, valid = train_test_split(data, test_size=0.2, shuffle=True, random_state=666)\n", + "valid_data, test_data = train_test_split(valid, test_size=0.5, shuffle=True, random_state=666)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 21, + "outputs": [], + "source": [ + "X_train, Y_train = train_data[feature_cols], train_data['燃料消耗量']\n", + "X_valid, Y_valid = valid_data[feature_cols], valid_data['燃料消耗量']\n", + "X_test, Y_test = test_data[feature_cols], test_data['燃料消耗量']" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 22, + "outputs": [ + { + "data": { + "text/plain": "((922, 1, 251), (922, 1))" + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x_train = np.expand_dims(X_train.values, axis=1)\n", + "y_train = Y_train.values.reshape(-1, 1)\n", + "x_train.shape, y_train.shape" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 23, + "outputs": [], + "source": [ + "x_valid = np.expand_dims(X_valid.values, axis=1)\n", + "y_valid = Y_valid.values.reshape(-1, 1)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 24, + "outputs": [], + "source": [ + "x_test = np.expand_dims(X_test.values, axis=1)\n", + "y_test = Y_test.values.reshape(-1, 1)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 25, + "outputs": [], + "source": [ + "callbacks = [keras.callbacks.EarlyStopping(monitor='val_loss', patience=int(10)),\n", + " keras.callbacks.ModelCheckpoint('./best_model.h5', monitor='val_loss', verbose=0, save_best_only=False, save_weights_only=False, mode='auto', period=1)]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 26, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train on 922 samples, validate on 116 samples\n", + "Epoch 1/100\n", + "922/922 [==============================] - 1s 1ms/step - loss: 0.0396 - val_loss: 0.0128\n", + "Epoch 2/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0074 - val_loss: 0.0057\n", + "Epoch 3/100\n", + "922/922 [==============================] - 0s 78us/step - loss: 0.0048 - val_loss: 0.0040\n", + "Epoch 4/100\n", + "922/922 [==============================] - 0s 61us/step - loss: 0.0035 - val_loss: 0.0028\n", + "Epoch 5/100\n", + "922/922 [==============================] - 0s 77us/step - loss: 0.0030 - val_loss: 0.0023\n", + "Epoch 6/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0025 - val_loss: 0.0020\n", + "Epoch 7/100\n", + "922/922 [==============================] - 0s 86us/step - loss: 0.0023 - val_loss: 0.0020\n", + "Epoch 8/100\n", + "922/922 [==============================] - 0s 78us/step - loss: 0.0023 - val_loss: 0.0018\n", + "Epoch 9/100\n", + "922/922 [==============================] - 0s 67us/step - loss: 0.0022 - val_loss: 0.0017\n", + "Epoch 10/100\n", + "922/922 [==============================] - 0s 61us/step - loss: 0.0019 - val_loss: 0.0016\n", + "Epoch 11/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0019 - val_loss: 0.0016\n", + "Epoch 12/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0019 - val_loss: 0.0017\n", + "Epoch 13/100\n", + "922/922 [==============================] - 0s 52us/step - loss: 0.0019 - val_loss: 0.0017\n", + "Epoch 14/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0018 - val_loss: 0.0015\n", + "Epoch 15/100\n", + "922/922 [==============================] - 0s 87us/step - loss: 0.0018 - val_loss: 0.0015\n", + "Epoch 16/100\n", + "922/922 [==============================] - 0s 52us/step - loss: 0.0016 - val_loss: 0.0013\n", + "Epoch 17/100\n", + "922/922 [==============================] - 0s 68us/step - loss: 0.0015 - val_loss: 0.0014\n", + "Epoch 18/100\n", + "922/922 [==============================] - 0s 73us/step - loss: 0.0014 - val_loss: 0.0013\n", + "Epoch 19/100\n", + "922/922 [==============================] - 0s 52us/step - loss: 0.0017 - val_loss: 0.0014\n", + "Epoch 20/100\n", + "922/922 [==============================] - 0s 70us/step - loss: 0.0017 - val_loss: 0.0013\n", + "Epoch 21/100\n", + "922/922 [==============================] - 0s 73us/step - loss: 0.0015 - val_loss: 0.0013\n", + "Epoch 22/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0014 - val_loss: 0.0013\n", + "Epoch 23/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0014 - val_loss: 0.0012\n", + "Epoch 24/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0013 - val_loss: 0.0014\n", + "Epoch 25/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0013 - val_loss: 0.0012\n", + "Epoch 26/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0013 - val_loss: 0.0011\n", + "Epoch 27/100\n", + "922/922 [==============================] - 0s 65us/step - loss: 0.0013 - val_loss: 0.0012\n", + "Epoch 28/100\n", + "922/922 [==============================] - 0s 89us/step - loss: 0.0013 - val_loss: 0.0013\n", + "Epoch 29/100\n", + "922/922 [==============================] - 0s 52us/step - loss: 0.0013 - val_loss: 0.0011\n", + "Epoch 30/100\n", + "922/922 [==============================] - 0s 70us/step - loss: 0.0013 - val_loss: 0.0012\n", + "Epoch 31/100\n", + "922/922 [==============================] - 0s 60us/step - loss: 0.0014 - val_loss: 0.0013\n", + "Epoch 32/100\n", + "922/922 [==============================] - 0s 70us/step - loss: 0.0012 - val_loss: 0.0012\n", + "Epoch 33/100\n", + "922/922 [==============================] - 0s 51us/step - loss: 0.0013 - val_loss: 0.0012\n", + "Epoch 34/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0012 - val_loss: 0.0012\n", + "Epoch 35/100\n", + "922/922 [==============================] - 0s 60us/step - loss: 0.0013 - val_loss: 0.0014\n", + "Epoch 36/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0012 - val_loss: 0.0011\n", + "Epoch 37/100\n", + "922/922 [==============================] - 0s 62us/step - loss: 0.0011 - val_loss: 0.0011\n", + "Epoch 38/100\n", + "922/922 [==============================] - 0s 77us/step - loss: 0.0012 - val_loss: 0.0012\n", + "Epoch 39/100\n", + "922/922 [==============================] - 0s 60us/step - loss: 0.0013 - val_loss: 0.0011\n", + "Epoch 40/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0012 - val_loss: 0.0011\n", + "Epoch 41/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0012 - val_loss: 0.0014\n", + "Epoch 42/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0013 - val_loss: 0.0014\n", + "Epoch 43/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0013 - val_loss: 0.0011\n", + "Epoch 44/100\n", + "922/922 [==============================] - 0s 51us/step - loss: 0.0012 - val_loss: 0.0011\n", + "Epoch 45/100\n", + "922/922 [==============================] - 0s 95us/step - loss: 0.0011 - val_loss: 0.0011\n", + "Epoch 46/100\n", + "922/922 [==============================] - 0s 68us/step - loss: 0.0011 - val_loss: 0.0011\n", + "Epoch 47/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0011 - val_loss: 0.0012\n", + "Epoch 48/100\n", + "922/922 [==============================] - 0s 66us/step - loss: 0.0011 - val_loss: 0.0010\n", + "Epoch 49/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 9.9569e-04 - val_loss: 9.4151e-04\n", + "Epoch 50/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0010 - val_loss: 0.0011\n", + "Epoch 51/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0010 - val_loss: 0.0011\n", + "Epoch 52/100\n", + "922/922 [==============================] - 0s 77us/step - loss: 0.0010 - val_loss: 9.9602e-04\n", + "Epoch 53/100\n", + "922/922 [==============================] - 0s 52us/step - loss: 9.3358e-04 - val_loss: 0.0012\n", + "Epoch 54/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0010 - val_loss: 9.6337e-04\n", + "Epoch 55/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 9.9897e-04 - val_loss: 9.9428e-04\n", + "Epoch 56/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0010 - val_loss: 9.1976e-04\n", + "Epoch 57/100\n", + "922/922 [==============================] - 0s 60us/step - loss: 9.8333e-04 - val_loss: 0.0011\n", + "Epoch 58/100\n", + "922/922 [==============================] - 0s 86us/step - loss: 0.0011 - val_loss: 0.0010\n", + "Epoch 59/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 0.0010 - val_loss: 0.0010\n", + "Epoch 60/100\n", + "922/922 [==============================] - 0s 51us/step - loss: 9.6106e-04 - val_loss: 9.5494e-04\n", + "Epoch 61/100\n", + "922/922 [==============================] - 0s 87us/step - loss: 9.1071e-04 - val_loss: 8.9771e-04\n", + "Epoch 62/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 9.1379e-04 - val_loss: 9.4967e-04\n", + "Epoch 63/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 9.3075e-04 - val_loss: 9.1627e-04\n", + "Epoch 64/100\n", + "922/922 [==============================] - 0s 78us/step - loss: 8.8605e-04 - val_loss: 9.3663e-04\n", + "Epoch 65/100\n", + "922/922 [==============================] - 0s 69us/step - loss: 9.5708e-04 - val_loss: 0.0011\n", + "Epoch 66/100\n", + "922/922 [==============================] - 0s 68us/step - loss: 9.5701e-04 - val_loss: 8.9826e-04\n", + "Epoch 67/100\n", + "922/922 [==============================] - 0s 60us/step - loss: 9.4454e-04 - val_loss: 0.0011\n", + "Epoch 68/100\n", + "922/922 [==============================] - 0s 74us/step - loss: 9.5393e-04 - val_loss: 9.7981e-04\n", + "Epoch 69/100\n", + "922/922 [==============================] - 0s 104us/step - loss: 9.5125e-04 - val_loss: 0.0010\n", + "Epoch 70/100\n", + "922/922 [==============================] - 0s 78us/step - loss: 9.5720e-04 - val_loss: 9.7615e-04\n", + "Epoch 71/100\n", + "922/922 [==============================] - 0s 64us/step - loss: 9.2241e-04 - val_loss: 0.0010\n" + ] + }, + { + "data": { + "text/plain": "" + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.fit(x_train, y_train, epochs=100, batch_size=32, validation_data=(x_test, y_test), shuffle=True,\n", + " callbacks=callbacks)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 27, + "outputs": [], + "source": [ + "y_pred = model.predict(x_test)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 28, + "outputs": [ + { + "data": { + "text/plain": "array([0.30161506, 0.12067786, 0.43900865, 0.4143401 , 0.11434203,\n 0.87028706, 0.15387392, 0.86223227, 0.8570186 , 0.4433931 ,\n 0.7649788 , 0.36369222, 0.33063045, 0.7437426 , 0.3493362 ,\n 0.7671248 , 0.7743846 , 0.12363896, 0.4528606 , 0.75037146,\n 0.45131576, 0.34990048, 0.7552419 , 0.7508755 , 0.7558205 ,\n 0.3391131 , 0.76618046, 0.38217723, 0.30887872, 0.36930698,\n 0.3591324 , 0.83817935, 0.9321221 , 0.35430533, 0.11836711,\n 0.764429 , 0.7478696 , 0.74976325, 0.3656214 , 0.3482211 ,\n 0.3658831 , 0.35415024, 0.29030812, 0.7965492 , 0.9372817 ,\n 0.11179626, 0.33758143, 0.305908 , 0.12149343, 0.41378874,\n 0.09611899, 0.36266702, 0.76215094, 0.41939664, 0.7642038 ,\n 0.36630815, 0.36369124, 0.775969 , 0.7431689 , 0.49149197,\n 0.35072863, 0.7608663 , 0.88904417, 0.11546668, 0.32508087,\n 0.78478754, 0.2949888 , 0.9328996 , 0.26087016, 0.15387377,\n 0.7867287 , 0.35840425, 0.8485855 , 0.36474293, 0.86086893,\n 0.85082245, 0.37929475, 0.88898706, 0.44798538, 0.74498856,\n 0.7642088 , 0.9374167 , 0.24628928, 0.1150094 , 0.35409844,\n 0.34573317, 0.1182591 , 0.35334843, 0.8806509 , 0.3744196 ,\n 0.12240422, 0.7410463 , 0.3571657 , 0.44970232, 0.8927134 ,\n 0.76465344, 0.7640152 , 0.33744502, 0.7715051 , 0.44094718,\n 0.33831298, 0.93699497, 0.30656263, 0.10126469, 0.8242742 ,\n 0.85100025, 0.42451733, 0.362445 , 0.77677643, 0.40487826,\n 0.78558755, 0.339495 , 0.8240729 , 0.7534524 , 0.93057597,\n 0.3128613 ], dtype=float32)" + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y_pred = np.squeeze(y_pred)\n", + "y_pred" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 29, + "outputs": [], + "source": [ + "from sklearn.metrics import mean_absolute_error, mean_squared_error, mean_absolute_percentage_error, r2_score" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 30, + "outputs": [], + "source": [ + "y_true = np.squeeze(y_test)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 31, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 1.02E-03\n", + "RMSE: 0.032\n", + "MAE: 0.0236\n", + "MAPE: 7.07%\n", + "R_2: 0.9858\n" + ] + } + ], + "source": [ + "MSE = mean_squared_error(y_true, y_pred)\n", + "RMSE = np.sqrt(mean_squared_error(y_true, y_pred))\n", + "MAE = mean_absolute_error(y_true, y_pred)\n", + "MAPE = mean_absolute_percentage_error(y_true, y_pred)\n", + "R_2 = r2_score(y_true, y_pred)\n", + "print(f\"MSE: {format(MSE, '.2E')}\")\n", + "print(f'RMSE: {round(RMSE, 4)}')\n", + "print(f'MAE: {round(MAE, 4)}')\n", + "print(f'MAPE: {round(MAPE * 100, 2)}%')\n", + "print(f'R_2: {round(R_2, 4)}')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 32, + "outputs": [], + "source": [ + "def recover(x, col='燃料消耗量'):\n", + " return np.expm1(x * (maxs[col] - mins[col]) + mins[col])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 33, + "outputs": [], + "source": [ + "y_true_recover = recover(y_true)\n", + "y_pred_recover = recover(y_pred)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 34, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 7.76E+04\n", + "RMSE: 278.5442\n", + "MAE: 166.5543\n", + "MAPE: 9.54%\n", + "R_2: 0.9717\n" + ] + } + ], + "source": [ + "MSE = mean_squared_error(y_true_recover, y_pred_recover)\n", + "RMSE = np.sqrt(mean_squared_error(y_true_recover, y_pred_recover))\n", + "MAE = mean_absolute_error(y_true_recover, y_pred_recover)\n", + "MAPE = mean_absolute_percentage_error(y_true_recover, y_pred_recover)\n", + "R_2 = r2_score(y_true_recover, y_pred_recover)\n", + "print(f\"MSE: {format(MSE, '.2E')}\")\n", + "print(f'RMSE: {round(RMSE, 4)}')\n", + "print(f'MAE: {round(MAE, 4)}')\n", + "print(f'MAPE: {round(MAPE * 100, 2)}%')\n", + "print(f'R_2: {round(R_2, 4)}')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/基于煤种标准化的数据建模及预测.ipynb b/基于煤种标准化的数据建模及预测.ipynb new file mode 100644 index 0000000..68e1e5d --- /dev/null +++ b/基于煤种标准化的数据建模及预测.ipynb @@ -0,0 +1,1536 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import xgboost as xgb\n", + "import seaborn as sns\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.metrics import mean_absolute_error, mean_squared_error, mean_absolute_percentage_error, r2_score" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": " 所处地区 机组类型 参数分类 冷凝器型式 铭牌容量 (MW) longitude latitude altitude \\\n0 上海市 供热式 亚临界 水冷 5.707110 4.807875 3.467769 1.386294 \n1 上海市 凝气式 亚临界 水冷 5.707110 4.807875 3.467769 1.386294 \n2 上海市 凝气式 亚临界 水冷 5.771441 4.808939 3.476886 1.098612 \n3 上海市 凝气式 超超临界 水冷 6.908755 4.807356 3.458373 1.609438 \n4 上海市 纯凝式 亚临界 水冷 5.860786 4.807839 3.478627 2.833213 \n\n power_co2_factor heat_co2_factor \n0 0.574332 0.072680 \n1 0.582164 0.072391 \n2 0.569281 0.071041 \n3 0.506250 0.070460 \n4 0.565226 0.073717 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
所处地区机组类型参数分类冷凝器型式铭牌容量 (MW)longitudelatitudealtitudepower_co2_factorheat_co2_factor
0上海市供热式亚临界水冷5.7071104.8078753.4677691.3862940.5743320.072680
1上海市凝气式亚临界水冷5.7071104.8078753.4677691.3862940.5821640.072391
2上海市凝气式亚临界水冷5.7714414.8089393.4768861.0986120.5692810.071041
3上海市凝气式超超临界水冷6.9087554.8073563.4583731.6094380.5062500.070460
4上海市纯凝式亚临界水冷5.8607864.8078393.4786272.8332130.5652260.073717
\n
" + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = pd.read_csv('./results/去煤种化数据.csv')\n", + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": "(['所处地区', '机组类型', '参数分类', '冷凝器型式'],\n Index(['铭牌容量 (MW)', 'longitude', 'latitude', 'altitude'], dtype='object'))" + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "object_cols = data.columns[:4].tolist()\n", + "num_cols = data.columns[4:8]\n", + "object_cols, num_cols" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "test_data = pd.read_excel('./data/煤电机组情况(含企业名称).xlsx')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "test_geo_info = pd.read_excel('./data/电厂地理信息.xlsx')\n", + "test_geo_info.rename(columns={'name':'企业名称'}, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "test_data = test_data.merge(test_geo_info, how='left', on='企业名称').drop(columns='address')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "test_data_cp = test_data.copy()\n", + "test_data = test_data[['地区', '汽轮机类型', '压力参数', '冷却方式', '单机容量(MW)', 'lat', 'lng', 'altitude']].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "test_data.columns = data.columns[:8].tolist()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "test_data['na_cols'] = test_data.isna().sum(axis=1).values" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "test_data = test_data[test_data['铭牌容量 (MW)']>=30].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": "0.965160147200342" + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test_data[test_data.na_cols <= 1]['铭牌容量 (MW)'].sum() /10 / 112228" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_test_data = test_data[test_data.na_cols <= 1].drop(columns='na_cols').reset_index(drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": "水冷 413\n空冷 110\n其他 1\nName: 冷凝器型式, dtype: int64" + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data['冷凝器型式'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": "水冷-闭式循环 1442\n水冷-开式循环 737\n空冷-直接空冷 497\n其他 255\n空冷-间接空冷 221\n水冷 52\n空冷 14\n间接空冷 4\n直接空冷 2\nName: 冷凝器型式, dtype: int64" + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_test_data['冷凝器型式'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "def change_type(x:str):\n", + " if '水冷' in x:\n", + " return '水冷'\n", + " elif '空冷' in x:\n", + " return \"空冷\"\n", + " else:\n", + " return '其他'" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_test_data.fillna('其他', inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_test_data['冷凝器型式'] = new_test_data['冷凝器型式'].apply(change_type)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": "亚临界 265\n超临界 156\n超超临界 69\n超高压 32\n高压 2\nName: 参数分类, dtype: int64" + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data['参数分类'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": "亚临界 1072\n高压 726\n超临界 608\n超高压 403\n超超临界 358\n中压 57\nName: 参数分类, dtype: int64" + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_test_data['参数分类'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_test_data['机组类型'] = new_test_data['机组类型'].apply(lambda x: x if x.endswith('式') else x + '式')" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "for col in num_cols:\n", + " new_test_data[col] = new_test_data[col].apply(lambda x: 0 if x<0 else x)\n", + " new_test_data[col] = np.log1p(new_test_data[col])" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": " 所处地区 机组类型 参数分类 冷凝器型式 铭牌容量 (MW) longitude latitude altitude\n0 安徽省 凝气式 亚临界 水冷 5.771441 3.451583 4.772094 2.397895\n1 安徽省 凝气式 亚临界 水冷 5.771441 3.451583 4.772094 2.397895\n2 安徽省 凝气式 超超临界 水冷 6.908755 3.451583 4.772094 2.397895\n3 安徽省 凝气式 超超临界 水冷 6.908755 3.451583 4.772094 2.397895\n4 安徽省 抽凝式 高压 水冷 3.713572 3.451583 4.772094 2.397895\n... ... ... ... ... ... ... ... ...\n3219 重庆市 抽背式 高压 其他 3.931826 3.427489 4.682353 5.645447\n3220 重庆市 抽背式 高压 其他 3.931826 3.427489 4.682353 5.645447\n3221 重庆市 抽凝式 高压 水冷 3.912023 3.427489 4.682353 5.645447\n3222 重庆市 背压式 高压 其他 3.433987 3.428715 4.682208 5.690359\n3223 重庆市 抽凝式 高压 水冷 4.836282 3.428715 4.682208 5.690359\n\n[3224 rows x 8 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
所处地区机组类型参数分类冷凝器型式铭牌容量 (MW)longitudelatitudealtitude
0安徽省凝气式亚临界水冷5.7714413.4515834.7720942.397895
1安徽省凝气式亚临界水冷5.7714413.4515834.7720942.397895
2安徽省凝气式超超临界水冷6.9087553.4515834.7720942.397895
3安徽省凝气式超超临界水冷6.9087553.4515834.7720942.397895
4安徽省抽凝式高压水冷3.7135723.4515834.7720942.397895
...........................
3219重庆市抽背式高压其他3.9318263.4274894.6823535.645447
3220重庆市抽背式高压其他3.9318263.4274894.6823535.645447
3221重庆市抽凝式高压水冷3.9120233.4274894.6823535.645447
3222重庆市背压式高压其他3.4339873.4287154.6822085.690359
3223重庆市抽凝式高压水冷4.8362823.4287154.6822085.690359
\n

3224 rows × 8 columns

\n
" + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_test_data" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": " 所处地区 机组类型 参数分类 冷凝器型式 铭牌容量 (MW) longitude latitude altitude \\\n0 上海市 供热式 亚临界 水冷 5.707110 4.807875 3.467769 1.386294 \n1 上海市 凝气式 亚临界 水冷 5.707110 4.807875 3.467769 1.386294 \n2 上海市 凝气式 亚临界 水冷 5.771441 4.808939 3.476886 1.098612 \n3 上海市 凝气式 超超临界 水冷 6.908755 4.807356 3.458373 1.609438 \n4 上海市 纯凝式 亚临界 水冷 5.860786 4.807839 3.478627 2.833213 \n... ... ... ... ... ... ... ... ... \n3219 重庆市 抽背式 高压 其他 3.931826 3.427489 4.682353 5.645447 \n3220 重庆市 抽背式 高压 其他 3.931826 3.427489 4.682353 5.645447 \n3221 重庆市 抽凝式 高压 水冷 3.912023 3.427489 4.682353 5.645447 \n3222 重庆市 背压式 高压 其他 3.433987 3.428715 4.682208 5.690359 \n3223 重庆市 抽凝式 高压 水冷 4.836282 3.428715 4.682208 5.690359 \n\n power_co2_factor heat_co2_factor \n0 0.574332 0.072680 \n1 0.582164 0.072391 \n2 0.569281 0.071041 \n3 0.506250 0.070460 \n4 0.565226 0.073717 \n... ... ... \n3219 NaN NaN \n3220 NaN NaN \n3221 NaN NaN \n3222 NaN NaN \n3223 NaN NaN \n\n[3748 rows x 10 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
所处地区机组类型参数分类冷凝器型式铭牌容量 (MW)longitudelatitudealtitudepower_co2_factorheat_co2_factor
0上海市供热式亚临界水冷5.7071104.8078753.4677691.3862940.5743320.072680
1上海市凝气式亚临界水冷5.7071104.8078753.4677691.3862940.5821640.072391
2上海市凝气式亚临界水冷5.7714414.8089393.4768861.0986120.5692810.071041
3上海市凝气式超超临界水冷6.9087554.8073563.4583731.6094380.5062500.070460
4上海市纯凝式亚临界水冷5.8607864.8078393.4786272.8332130.5652260.073717
.................................
3219重庆市抽背式高压其他3.9318263.4274894.6823535.645447NaNNaN
3220重庆市抽背式高压其他3.9318263.4274894.6823535.645447NaNNaN
3221重庆市抽凝式高压水冷3.9120233.4274894.6823535.645447NaNNaN
3222重庆市背压式高压其他3.4339873.4287154.6822085.690359NaNNaN
3223重庆市抽凝式高压水冷4.8362823.4287154.6822085.690359NaNNaN
\n

3748 rows × 10 columns

\n
" + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "merge_data = pd.concat([data, new_test_data], axis=0)\n", + "merge_data" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": " 铭牌容量 (MW) longitude latitude altitude power_co2_factor \\\n0 5.707110 4.807875 3.467769 1.386294 0.574332 \n1 5.707110 4.807875 3.467769 1.386294 0.582164 \n2 5.771441 4.808939 3.476886 1.098612 0.569281 \n3 6.908755 4.807356 3.458373 1.609438 0.506250 \n4 5.860786 4.807839 3.478627 2.833213 0.565226 \n... ... ... ... ... ... \n3219 3.931826 3.427489 4.682353 5.645447 NaN \n3220 3.931826 3.427489 4.682353 5.645447 NaN \n3221 3.912023 3.427489 4.682353 5.645447 NaN \n3222 3.433987 3.428715 4.682208 5.690359 NaN \n3223 4.836282 3.428715 4.682208 5.690359 NaN \n\n heat_co2_factor 所处地区_上海市 所处地区_云南省 所处地区_内蒙古 所处地区_内蒙古自治区 ... \\\n0 0.072680 1 0 0 0 ... \n1 0.072391 1 0 0 0 ... \n2 0.071041 1 0 0 0 ... \n3 0.070460 1 0 0 0 ... \n4 0.073717 1 0 0 0 ... \n... ... ... ... ... ... ... \n3219 NaN 0 0 0 0 ... \n3220 NaN 0 0 0 0 ... \n3221 NaN 0 0 0 0 ... \n3222 NaN 0 0 0 0 ... \n3223 NaN 0 0 0 0 ... \n\n 机组类型_背压式 参数分类_中压 参数分类_亚临界 参数分类_超临界 参数分类_超超临界 参数分类_超高压 参数分类_高压 \\\n0 0 0 1 0 0 0 0 \n1 0 0 1 0 0 0 0 \n2 0 0 1 0 0 0 0 \n3 0 0 0 0 1 0 0 \n4 0 0 1 0 0 0 0 \n... ... ... ... ... ... ... ... \n3219 0 0 0 0 0 0 1 \n3220 0 0 0 0 0 0 1 \n3221 0 0 0 0 0 0 1 \n3222 1 0 0 0 0 0 1 \n3223 0 0 0 0 0 0 1 \n\n 冷凝器型式_其他 冷凝器型式_水冷 冷凝器型式_空冷 \n0 0 1 0 \n1 0 1 0 \n2 0 1 0 \n3 0 1 0 \n4 0 1 0 \n... ... ... ... \n3219 1 0 0 \n3220 1 0 0 \n3221 0 1 0 \n3222 1 0 0 \n3223 0 1 0 \n\n[3748 rows x 63 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
铭牌容量 (MW)longitudelatitudealtitudepower_co2_factorheat_co2_factor所处地区_上海市所处地区_云南省所处地区_内蒙古所处地区_内蒙古自治区...机组类型_背压式参数分类_中压参数分类_亚临界参数分类_超临界参数分类_超超临界参数分类_超高压参数分类_高压冷凝器型式_其他冷凝器型式_水冷冷凝器型式_空冷
05.7071104.8078753.4677691.3862940.5743320.0726801000...0010000010
15.7071104.8078753.4677691.3862940.5821640.0723911000...0010000010
25.7714414.8089393.4768861.0986120.5692810.0710411000...0010000010
36.9087554.8073563.4583731.6094380.5062500.0704601000...0000100010
45.8607864.8078393.4786272.8332130.5652260.0737171000...0010000010
..................................................................
32193.9318263.4274894.6823535.645447NaNNaN0000...0000001100
32203.9318263.4274894.6823535.645447NaNNaN0000...0000001100
32213.9120233.4274894.6823535.645447NaNNaN0000...0000001010
32223.4339873.4287154.6822085.690359NaNNaN0000...1000001100
32234.8362823.4287154.6822085.690359NaNNaN0000...0000001010
\n

3748 rows × 63 columns

\n
" + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "use_data = pd.get_dummies(merge_data, columns=object_cols)\n", + "use_data" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "use_data.to_csv('./去煤种化后的训练数据.csv', encoding='utf-8-sig', index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "train_set = use_data[~use_data.power_co2_factor.isna()].copy()\n", + "test_set = use_data[use_data.power_co2_factor.isna()].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "feature_cols = [x for x in train_set.columns if 'factor' not in x]" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "train_data = train_set.copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "train, valid = train_test_split(train_data.dropna(), test_size=0.1, shuffle=True, random_state=666)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "dtest = xgb.DMatrix(test_set[feature_cols])" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "params_xgb = {'objective': 'reg:squarederror',\n", + " 'booster': 'gbtree',\n", + " 'eta': 0.01,\n", + " 'max_depth': 30,\n", + " 'subsample': 0.8,\n", + " 'colsample_bytree': 0.95,\n", + " 'min_child_weight': 60,\n", + " 'seed': 42}" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "outputs": [], + "source": [ + "from sklearn.model_selection import KFold" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 80, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 6.9E-04, RMSE: 0.0262, MAE: 0.018, MAPE: 3.81 %, R_2: 0.8015\n", + "MSE: 4.6E-04, RMSE: 0.0215, MAE: 0.0155, MAPE: 3.24 %, R_2: 0.8596\n", + "MSE: 1.1E-03, RMSE: 0.0337, MAE: 0.0214, MAPE: 4.6 %, R_2: 0.6518\n", + "MSE: 8.7E-04, RMSE: 0.0295, MAE: 0.019, MAPE: 4.14 %, R_2: 0.7524\n", + "MSE: 1.1E-03, RMSE: 0.0326, MAE: 0.0219, MAPE: 4.62 %, R_2: 0.695\n", + "MSE: 1.1E-03, RMSE: 0.0336, MAE: 0.0237, MAPE: 5.23 %, R_2: 0.6424\n", + "MSE: 6.0E-04, RMSE: 0.0245, MAE: 0.0164, MAPE: 3.46 %, R_2: 0.8288\n", + "MSE: 9.4E-04, RMSE: 0.0307, MAE: 0.0224, MAPE: 4.96 %, R_2: 0.7396\n", + "MSE: 6.6E-04, RMSE: 0.0256, MAE: 0.0174, MAPE: 3.73 %, R_2: 0.8133\n", + "MSE: 7.0E-04, RMSE: 0.0264, MAE: 0.017, MAPE: 3.59 %, R_2: 0.8201\n" + ] + } + ], + "source": [ + "kf = KFold(n_splits=10, shuffle=True, random_state=666)\n", + "eva_list = list()\n", + "for (train_index, test_index) in kf.split(train_data):\n", + " train = train_data.loc[train_index]\n", + " test = train_data.loc[test_index]\n", + " train, valid = train_test_split(train, test_size=0.1, random_state=666)\n", + " X_train, Y_train = train[feature_cols], train['power_co2_factor']\n", + " X_valid, Y_valid = valid[feature_cols], valid['power_co2_factor']\n", + " X_test, Y_test = valid[feature_cols], valid['power_co2_factor']\n", + " dtrain = xgb.DMatrix(X_train, Y_train)\n", + " dvalid = xgb.DMatrix(X_valid, Y_valid)\n", + " watchlist = [(dvalid, 'eval')]\n", + " gb_model = xgb.train(params_xgb, dtrain, 2000, evals=watchlist,\n", + " early_stopping_rounds=100, verbose_eval=False)\n", + " y_pred = gb_model.predict(xgb.DMatrix(X_test))\n", + " y_true = Y_test.values\n", + " MSE = mean_squared_error(y_true, y_pred)\n", + " RMSE = np.sqrt(mean_squared_error(y_true, y_pred))\n", + " MAE = mean_absolute_error(y_true, y_pred)\n", + " MAPE = mean_absolute_percentage_error(y_true, y_pred)\n", + " R_2 = r2_score(y_true, y_pred)\n", + " print('MSE:', format(MSE, '.1E'), end=', ')\n", + " print('RMSE:', round(RMSE, 4), end=', ')\n", + " print('MAE:', round(MAE, 4), end=', ')\n", + " print('MAPE:', round(MAPE*100, 2), '%', end=', ')\n", + " print('R_2:', round(R_2, 4)) #R方为负就说明拟合效果比平均值差\n", + " eva_list.append([MSE, RMSE, MAE, MAPE, R_2])\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 83, + "outputs": [ + { + "data": { + "text/plain": "MSE 0.000747\nRMSE 0.027126\nMAE 0.018437\nMAPE 0.039442\nR_2 0.788768\ndtype: float64" + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame.from_records(eva_list, columns=['MSE', 'RMSE', 'MAE', 'MAPE', 'R_2']).drop(index=[2, 5]).mean()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "\n", + "num_boost_round = 2000\n", + "\n", + "dtrain = xgb.DMatrix(train[feature_cols], train['power_co2_factor'].values)\n", + "dvalid = xgb.DMatrix(valid[feature_cols], valid['power_co2_factor'].values)\n", + "watchlist = [(dtrain, 'train'), (dvalid, 'eval')]\n", + "\n", + "gb_model_power = xgb.train(params_xgb, dtrain, num_boost_round, evals=watchlist,\n", + " early_stopping_rounds=200, verbose_eval=False)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 59, + "outputs": [], + "source": [ + "power_pred, power_real = gb_model_power.predict(dvalid), valid['power_co2_factor'].values" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 60, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 5.2E-04\n", + "RMSE: 0.023\n", + "MAE: 0.016\n", + "MAPE: 3.46 %\n", + "R_2: 0.819\n" + ] + } + ], + "source": [ + "MSE = mean_squared_error(power_real, power_pred)\n", + "RMSE = np.sqrt(mean_squared_error(power_real, power_pred))\n", + "MAE = mean_absolute_error(power_real, power_pred)\n", + "MAPE = mean_absolute_percentage_error(power_real, power_pred)\n", + "R_2 = r2_score(power_real, power_pred)\n", + "print('MSE:', format(MSE, '.1E'))\n", + "print('RMSE:', round(RMSE, 3))\n", + "print('MAE:', round(MAE, 3))\n", + "print('MAPE:', round(MAPE*100, 2), '%')\n", + "print('R_2:', round(R_2, 3)) #R方为负就说明拟合效果比平均值差a" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_test_data['power_co2_factor'] = gb_model_power.predict(dtest)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
所处地区机组类型参数分类冷凝器型式铭牌容量 (MW)longitudelatitudealtitudepower_co2_factor
0安徽省凝气式亚临界水冷5.7714413.4515834.7720942.3978950.513529
1安徽省凝气式亚临界水冷5.7714413.4515834.7720942.3978950.513529
2安徽省凝气式超超临界水冷6.9087553.4515834.7720942.3978950.478943
3安徽省凝气式超超临界水冷6.9087553.4515834.7720942.3978950.478943
4安徽省抽凝式高压水冷3.7135723.4515834.7720942.3978950.510681
..............................
3219重庆市抽背式高压其他3.9318263.4274894.6823535.6454470.510508
3220重庆市抽背式高压其他3.9318263.4274894.6823535.6454470.510508
3221重庆市抽凝式高压水冷3.9120233.4274894.6823535.6454470.512501
3222重庆市背压式高压其他3.4339873.4287154.6822085.6903590.509951
3223重庆市抽凝式高压水冷4.8362823.4287154.6822085.6903590.511886
\n", + "

3224 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " 所处地区 机组类型 参数分类 冷凝器型式 铭牌容量 (MW) longitude latitude altitude \\\n", + "0 安徽省 凝气式 亚临界 水冷 5.771441 3.451583 4.772094 2.397895 \n", + "1 安徽省 凝气式 亚临界 水冷 5.771441 3.451583 4.772094 2.397895 \n", + "2 安徽省 凝气式 超超临界 水冷 6.908755 3.451583 4.772094 2.397895 \n", + "3 安徽省 凝气式 超超临界 水冷 6.908755 3.451583 4.772094 2.397895 \n", + "4 安徽省 抽凝式 高压 水冷 3.713572 3.451583 4.772094 2.397895 \n", + "... ... ... ... ... ... ... ... ... \n", + "3219 重庆市 抽背式 高压 其他 3.931826 3.427489 4.682353 5.645447 \n", + "3220 重庆市 抽背式 高压 其他 3.931826 3.427489 4.682353 5.645447 \n", + "3221 重庆市 抽凝式 高压 水冷 3.912023 3.427489 4.682353 5.645447 \n", + "3222 重庆市 背压式 高压 其他 3.433987 3.428715 4.682208 5.690359 \n", + "3223 重庆市 抽凝式 高压 水冷 4.836282 3.428715 4.682208 5.690359 \n", + "\n", + " power_co2_factor \n", + "0 0.513529 \n", + "1 0.513529 \n", + "2 0.478943 \n", + "3 0.478943 \n", + "4 0.510681 \n", + "... ... \n", + "3219 0.510508 \n", + "3220 0.510508 \n", + "3221 0.512501 \n", + "3222 0.509951 \n", + "3223 0.511886 \n", + "\n", + "[3224 rows x 9 columns]" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_test_data" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "params_xgb = {'objective': 'reg:squarederror',\n", + " 'booster': 'gbtree',\n", + " 'eta': 0.01,\n", + " 'max_depth': 15,\n", + " 'subsample': 0.7,\n", + " 'colsample_bytree': 0.9,\n", + " 'min_child_weight': 10,\n", + " 'seed': 666}\n", + "\n", + "num_boost_round = 1200" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 1.2E-05, RMSE: 0.0034, MAE: 0.002, MAPE: 2.93 %, R_2: 0.7571\n", + "MSE: 3.9E-06, RMSE: 0.002, MAE: 0.0014, MAPE: 2.01 %, R_2: 0.9072\n", + "MSE: 2.1E-05, RMSE: 0.0045, MAE: 0.0024, MAPE: 3.67 %, R_2: 0.4898\n", + "MSE: 1.3E-05, RMSE: 0.0036, MAE: 0.002, MAPE: 3.01 %, R_2: 0.6941\n", + "MSE: 1.2E-05, RMSE: 0.0034, MAE: 0.002, MAPE: 2.92 %, R_2: 0.7163\n", + "MSE: 1.5E-05, RMSE: 0.0039, MAE: 0.0022, MAPE: 3.29 %, R_2: 0.6265\n", + "MSE: 5.8E-06, RMSE: 0.0024, MAE: 0.0014, MAPE: 2.06 %, R_2: 0.8744\n", + "MSE: 1.7E-05, RMSE: 0.0041, MAE: 0.0024, MAPE: 3.64 %, R_2: 0.6661\n", + "MSE: 8.4E-06, RMSE: 0.0029, MAE: 0.0018, MAPE: 2.61 %, R_2: 0.8057\n", + "MSE: 7.0E-06, RMSE: 0.0026, MAE: 0.0016, MAPE: 2.29 %, R_2: 0.8514\n" + ] + } + ], + "source": [ + "kf = KFold(n_splits=10, shuffle=True, random_state=666)\n", + "eva_list = list()\n", + "for (train_index, test_index) in kf.split(train_data):\n", + " train = train_data.loc[train_index]\n", + " test = train_data.loc[test_index]\n", + " train, valid = train_test_split(train, test_size=0.1, random_state=666)\n", + " X_train, Y_train = train[feature_cols], train['heat_co2_factor']\n", + " X_valid, Y_valid = valid[feature_cols], valid['heat_co2_factor']\n", + " X_test, Y_test = valid[feature_cols], valid['heat_co2_factor']\n", + " dtrain = xgb.DMatrix(X_train, Y_train)\n", + " dvalid = xgb.DMatrix(X_valid, Y_valid)\n", + " watchlist = [(dvalid, 'eval')]\n", + " gb_model = xgb.train(params_xgb, dtrain, 2000, evals=watchlist,\n", + " early_stopping_rounds=100, verbose_eval=False)\n", + " y_pred = gb_model.predict(xgb.DMatrix(X_test))\n", + " y_true = Y_test.values\n", + " MSE = mean_squared_error(y_true, y_pred)\n", + " RMSE = np.sqrt(mean_squared_error(y_true, y_pred))\n", + " MAE = mean_absolute_error(y_true, y_pred)\n", + " MAPE = mean_absolute_percentage_error(y_true, y_pred)\n", + " R_2 = r2_score(y_true, y_pred)\n", + " print('MSE:', format(MSE, '.1E'), end=', ')\n", + " print('RMSE:', round(RMSE, 4), end=', ')\n", + " print('MAE:', round(MAE, 4), end=', ')\n", + " print('MAPE:', round(MAPE*100, 2), '%', end=', ')\n", + " print('R_2:', round(R_2, 4)) #R方为负就说明拟合效果比平均值差\n", + " eva_list.append([MSE, RMSE, MAE, MAPE, R_2])\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 86, + "outputs": [ + { + "data": { + "text/plain": "MSE 0.000010\nRMSE 0.003161\nMAE 0.001866\nMAPE 0.027510\nR_2 0.766523\ndtype: float64" + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame.from_records(eva_list, columns=['MSE', 'RMSE', 'MAE', 'MAPE', 'R_2']).drop(index=[2]).mean()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "\n", + "dtrain = xgb.DMatrix(train[feature_cols], train['heat_co2_factor'].values)\n", + "dvalid = xgb.DMatrix(valid[feature_cols], valid['heat_co2_factor'].values)\n", + "watchlist = [(dtrain, 'train'), (dvalid, 'eval')]\n", + "\n", + "gb_model_heat = xgb.train(params_xgb, dtrain, num_boost_round, evals=watchlist,\n", + " early_stopping_rounds=100, verbose_eval=False)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_test_data['heat_co2_factor'] = gb_model_heat.predict(dtest)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "for col in num_cols:\n", + " new_test_data[col] = np.expm1(new_test_data[col])" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
所处地区机组类型参数分类冷凝器型式铭牌容量 (MW)longitudelatitudealtitudepower_co2_factorheat_co2_factor
0安徽省凝气式亚临界水冷320.030.550295117.16639110.00.5135290.073187
1安徽省凝气式亚临界水冷320.030.550295117.16639110.00.5135290.073187
2安徽省凝气式超超临界水冷1000.030.550295117.16639110.00.4789430.071981
3安徽省凝气式超超临界水冷1000.030.550295117.16639110.00.4789430.071981
4安徽省抽凝式高压水冷40.030.550295117.16639110.00.5106810.072166
.................................
3219重庆市抽背式高压其他50.029.799200107.023948282.00.5105080.071945
3220重庆市抽背式高压其他50.029.799200107.023948282.00.5105080.071945
3221重庆市抽凝式高压水冷49.029.799200107.023948282.00.5125010.072097
3222重庆市背压式高压其他30.029.836998107.008326295.00.5099510.071945
3223重庆市抽凝式高压水冷125.029.836998107.008326295.00.5118860.072097
\n", + "

3224 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " 所处地区 机组类型 参数分类 冷凝器型式 铭牌容量 (MW) longitude latitude altitude \\\n", + "0 安徽省 凝气式 亚临界 水冷 320.0 30.550295 117.166391 10.0 \n", + "1 安徽省 凝气式 亚临界 水冷 320.0 30.550295 117.166391 10.0 \n", + "2 安徽省 凝气式 超超临界 水冷 1000.0 30.550295 117.166391 10.0 \n", + "3 安徽省 凝气式 超超临界 水冷 1000.0 30.550295 117.166391 10.0 \n", + "4 安徽省 抽凝式 高压 水冷 40.0 30.550295 117.166391 10.0 \n", + "... ... ... ... ... ... ... ... ... \n", + "3219 重庆市 抽背式 高压 其他 50.0 29.799200 107.023948 282.0 \n", + "3220 重庆市 抽背式 高压 其他 50.0 29.799200 107.023948 282.0 \n", + "3221 重庆市 抽凝式 高压 水冷 49.0 29.799200 107.023948 282.0 \n", + "3222 重庆市 背压式 高压 其他 30.0 29.836998 107.008326 295.0 \n", + "3223 重庆市 抽凝式 高压 水冷 125.0 29.836998 107.008326 295.0 \n", + "\n", + " power_co2_factor heat_co2_factor \n", + "0 0.513529 0.073187 \n", + "1 0.513529 0.073187 \n", + "2 0.478943 0.071981 \n", + "3 0.478943 0.071981 \n", + "4 0.510681 0.072166 \n", + "... ... ... \n", + "3219 0.510508 0.071945 \n", + "3220 0.510508 0.071945 \n", + "3221 0.512501 0.072097 \n", + "3222 0.509951 0.071945 \n", + "3223 0.511886 0.072097 \n", + "\n", + "[3224 rows x 10 columns]" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_test_data" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "rst = new_test_data.copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "rst = pd.read_excel('./results/全国机组预测数据.xlsx')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "rst.drop(columns=rst.columns[0], inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "def change_cap(x):\n", + " if x <= 300:\n", + " return '300MW以下'\n", + " elif x<=600:\n", + " return '300-600MW'\n", + " elif x<=1000:\n", + " return '600-1000MW'\n", + " else:\n", + " return \"1000MW以上\"" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "rst['容量类型'] = rst['铭牌容量 (MW)'].apply(change_cap)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "rst.to_excel('./results/全国机组预测数据.xlsx', index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.13" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/特征分组建模_lightgbm.ipynb b/特征分组建模_lightgbm.ipynb new file mode 100644 index 0000000..c59fe3e --- /dev/null +++ b/特征分组建模_lightgbm.ipynb @@ -0,0 +1,3155 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import warnings\n", + "\n", + "warnings.filterwarnings(\"ignore\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import lightgbm as lgb\n", + "import numpy as np\n", + "import xgboost as xgb\n", + "import seaborn as sns\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.model_selection import KFold\n", + "from sklearn.metrics import mean_absolute_error, mean_squared_error, mean_absolute_percentage_error, r2_score" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": " 铭牌容量 (MW) 入炉煤低位热值(kJ/kg) 燃煤挥发份Var(%) 燃煤灰份Aar(%) longitude latitude \\\n0 5.70711 9.818311 3.297687 2.815409 4.807875 3.467769 \n1 5.70711 9.821572 3.297687 2.815409 4.807875 3.467769 \n2 5.70711 9.878580 3.310543 2.769459 4.807875 3.467769 \n3 5.70711 9.883285 3.324316 2.532108 4.807875 3.467769 \n4 5.70711 9.909768 3.255015 2.766319 4.807875 3.467769 \n\n altitude 发电碳排放因子(kg/kWh) 供热碳排放因子(kg/MJ) 所处地区_上海市 ... 机组类型_供热式 \\\n0 1.386294 0.537574 0.070992 1.0 ... 1.0 \n1 1.386294 0.545516 0.072476 1.0 ... 1.0 \n2 1.386294 0.595849 0.064745 1.0 ... 1.0 \n3 1.386294 0.584432 0.068390 1.0 ... 1.0 \n4 1.386294 0.605369 0.066996 1.0 ... 1.0 \n\n 机组类型_纯凝式 参数分类_亚临界 参数分类_超临界 参数分类_超超临界 参数分类_超高压 参数分类_高压 冷凝器型式_水冷 \\\n0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 \n1 0.0 1.0 0.0 0.0 0.0 0.0 1.0 \n2 0.0 1.0 0.0 0.0 0.0 0.0 1.0 \n3 0.0 1.0 0.0 0.0 0.0 0.0 1.0 \n4 0.0 1.0 0.0 0.0 0.0 0.0 1.0 \n\n 冷凝器型式_直接空冷 冷凝器型式_间接空冷 \n0 0.0 0.0 \n1 0.0 0.0 \n2 0.0 0.0 \n3 0.0 0.0 \n4 0.0 0.0 \n\n[5 rows x 60 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
铭牌容量 (MW)入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)longitudelatitudealtitude发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)所处地区_上海市...机组类型_供热式机组类型_纯凝式参数分类_亚临界参数分类_超临界参数分类_超超临界参数分类_超高压参数分类_高压冷凝器型式_水冷冷凝器型式_直接空冷冷凝器型式_间接空冷
05.707119.8183113.2976872.8154094.8078753.4677691.3862940.5375740.0709921.0...1.00.01.00.00.00.00.01.00.00.0
15.707119.8215723.2976872.8154094.8078753.4677691.3862940.5455160.0724761.0...1.00.01.00.00.00.00.01.00.00.0
25.707119.8785803.3105432.7694594.8078753.4677691.3862940.5958490.0647451.0...1.00.01.00.00.00.00.01.00.00.0
35.707119.8832853.3243162.5321084.8078753.4677691.3862940.5844320.0683901.0...1.00.01.00.00.00.00.01.00.00.0
45.707119.9097683.2550152.7663194.8078753.4677691.3862940.6053690.0669961.0...1.00.01.00.00.00.00.01.00.00.0
\n

5 rows × 60 columns

\n
" + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data = pd.read_csv('./train_data_processed.csv')\n", + "total_data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": "(3080, 60)" + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "outputs": [ + { + "data": { + "text/plain": "Index(['铭牌容量 (MW)', '入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)', 'longitude',\n 'latitude', 'altitude', '发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)', '所处地区_上海市',\n '所处地区_云南省', '所处地区_内蒙古', '所处地区_内蒙古自治区', '所处地区_北京市', '所处地区_吉林省',\n '所处地区_四川省', '所处地区_天津市', '所处地区_宁夏', '所处地区_宁夏回族自治区', '所处地区_安徽省',\n '所处地区_山东省', '所处地区_山西', '所处地区_山西省', '所处地区_广东省', '所处地区_广西', '所处地区_广西省',\n '所处地区_新疆', '所处地区_新疆维吾尔自治区', '所处地区_江苏省', '所处地区_江西省', '所处地区_河北',\n '所处地区_河北省', '所处地区_河南', '所处地区_河南省', '所处地区_浙江省', '所处地区_海南省', '所处地区_湖北',\n '所处地区_湖北省', '所处地区_湖南', '所处地区_湖南省', '所处地区_甘肃省', '所处地区_福建省', '所处地区_贵州省',\n '所处地区_辽宁省', '所处地区_重庆市', '所处地区_陕西省', '所处地区_青海省', '所处地区_黑龙江', '所处地区_黑龙江省',\n '机组类型_供热', '机组类型_供热式', '机组类型_纯凝式', '参数分类_亚临界', '参数分类_超临界', '参数分类_超超临界',\n '参数分类_超高压', '参数分类_高压', '冷凝器型式_水冷', '冷凝器型式_直接空冷', '冷凝器型式_间接空冷'],\n dtype='object')" + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data.columns" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 6, + "outputs": [], + "source": [ + "feature_cols = [x for x in total_data.columns if '因子' not in x]\n", + "target_cols = [x for x in total_data.columns if x not in feature_cols]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 7, + "outputs": [ + { + "data": { + "text/plain": " 铭牌容量 (MW) 入炉煤低位热值(kJ/kg) 燃煤挥发份Var(%) 燃煤灰份Aar(%) longitude latitude \\\n0 4.615121 9.527411 3.823629 3.007661 4.834910 3.862442 \n1 4.836282 9.920745 3.625673 3.201526 4.700990 3.563714 \n2 4.836282 9.923023 3.623807 3.231200 4.700990 3.563714 \n3 4.836282 9.932727 3.272227 3.236716 4.700990 3.563714 \n4 4.836282 9.936819 3.278653 3.173460 4.700990 3.563714 \n... ... ... ... ... ... ... \n3075 6.966967 9.754581 3.100543 3.378270 4.676091 3.667429 \n3076 6.966967 9.755162 3.082827 3.361070 4.676091 3.667429 \n3077 6.966967 9.762903 3.095125 3.288775 4.676091 3.667429 \n3078 6.966967 9.776506 3.096934 3.328268 4.676091 3.667429 \n3079 6.966967 9.792277 3.073156 3.384051 4.676091 3.667429 \n\n altitude 所处地区_上海市 所处地区_云南省 所处地区_内蒙古 ... 参数分类_亚临界 参数分类_超临界 \\\n0 4.983607 0.0 0.0 0.0 ... 0.0 0.0 \n1 5.981414 0.0 0.0 0.0 ... 0.0 0.0 \n2 5.981414 0.0 0.0 0.0 ... 0.0 0.0 \n3 5.981414 0.0 0.0 0.0 ... 0.0 0.0 \n4 5.981414 0.0 0.0 0.0 ... 0.0 0.0 \n... ... ... ... ... ... ... ... \n3075 7.020191 0.0 0.0 0.0 ... 0.0 0.0 \n3076 7.020191 0.0 0.0 0.0 ... 0.0 0.0 \n3077 7.020191 0.0 0.0 0.0 ... 0.0 0.0 \n3078 7.020191 0.0 0.0 0.0 ... 0.0 0.0 \n3079 7.020191 0.0 0.0 0.0 ... 0.0 0.0 \n\n 参数分类_超超临界 参数分类_超高压 参数分类_高压 冷凝器型式_水冷 冷凝器型式_直接空冷 冷凝器型式_间接空冷 \\\n0 0.0 0.0 1.0 1.0 0.0 0.0 \n1 0.0 1.0 0.0 1.0 0.0 0.0 \n2 0.0 1.0 0.0 1.0 0.0 0.0 \n3 0.0 1.0 0.0 1.0 0.0 0.0 \n4 0.0 1.0 0.0 1.0 0.0 0.0 \n... ... ... ... ... ... ... \n3075 1.0 0.0 0.0 0.0 1.0 0.0 \n3076 1.0 0.0 0.0 0.0 1.0 0.0 \n3077 1.0 0.0 0.0 0.0 1.0 0.0 \n3078 1.0 0.0 0.0 0.0 1.0 0.0 \n3079 1.0 0.0 0.0 0.0 1.0 0.0 \n\n 发电碳排放因子(kg/kWh) 供热碳排放因子(kg/MJ) \n0 0.483547 0.058613 \n1 0.575553 0.085880 \n2 0.607741 0.084890 \n3 0.595382 0.082342 \n4 0.578838 0.082685 \n... ... ... \n3075 0.426880 0.061722 \n3076 0.456768 0.060739 \n3077 0.455534 0.061277 \n3078 0.450064 0.062032 \n3079 0.468720 0.063016 \n\n[3080 rows x 60 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
铭牌容量 (MW)入炉煤低位热值(kJ/kg)燃煤挥发份Var(%)燃煤灰份Aar(%)longitudelatitudealtitude所处地区_上海市所处地区_云南省所处地区_内蒙古...参数分类_亚临界参数分类_超临界参数分类_超超临界参数分类_超高压参数分类_高压冷凝器型式_水冷冷凝器型式_直接空冷冷凝器型式_间接空冷发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)
04.6151219.5274113.8236293.0076614.8349103.8624424.9836070.00.00.0...0.00.00.00.01.01.00.00.00.4835470.058613
14.8362829.9207453.6256733.2015264.7009903.5637145.9814140.00.00.0...0.00.00.01.00.01.00.00.00.5755530.085880
24.8362829.9230233.6238073.2312004.7009903.5637145.9814140.00.00.0...0.00.00.01.00.01.00.00.00.6077410.084890
34.8362829.9327273.2722273.2367164.7009903.5637145.9814140.00.00.0...0.00.00.01.00.01.00.00.00.5953820.082342
44.8362829.9368193.2786533.1734604.7009903.5637145.9814140.00.00.0...0.00.00.01.00.01.00.00.00.5788380.082685
..................................................................
30756.9669679.7545813.1005433.3782704.6760913.6674297.0201910.00.00.0...0.00.01.00.00.00.01.00.00.4268800.061722
30766.9669679.7551623.0828273.3610704.6760913.6674297.0201910.00.00.0...0.00.01.00.00.00.01.00.00.4567680.060739
30776.9669679.7629033.0951253.2887754.6760913.6674297.0201910.00.00.0...0.00.01.00.00.00.01.00.00.4555340.061277
30786.9669679.7765063.0969343.3282684.6760913.6674297.0201910.00.00.0...0.00.01.00.00.00.01.00.00.4500640.062032
30796.9669679.7922773.0731563.3840514.6760913.6674297.0201910.00.00.0...0.00.01.00.00.00.01.00.00.4687200.063016
\n

3080 rows × 60 columns

\n
" + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "use_data = total_data.groupby(feature_cols)[target_cols].mean().reset_index()\n", + "use_data" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 8, + "outputs": [], + "source": [ + "for col in use_data.columns:\n", + " use_data[col] = use_data[col].astype(float)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "train_data, test_data = train_test_split(use_data.dropna(), test_size=0.1, shuffle=True, random_state=666)\n", + "train_data, valid_data = train_test_split(train_data.dropna(), test_size=0.2, shuffle=True, random_state=666)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "X_train, Y_train = train_data[feature_cols], train_data[target_cols[0]]\n", + "X_valid, Y_valid = valid_data[feature_cols], valid_data[target_cols[0]]\n", + "X_test, Y_test = test_data[feature_cols], test_data[target_cols[0]]" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "lgb_train = lgb.Dataset(X_train, Y_train)\n", + "lgb_eval = lgb.Dataset(X_valid, Y_valid)\n", + "lgb_test = lgb.Dataset(X_test, Y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "params_gbm = {\n", + " 'task': 'train',\n", + " 'boosting_type': 'gbdt', # 设置提升类型\n", + " 'objective': 'l1', # 目标函数\n", + " 'metric': {'rmse'}, # 评估函数\n", + " 'max_depth': 12,\n", + " 'num_leaves': 20, # 叶子节点数\n", + " 'learning_rate': 0.05, # 学习速率\n", + " 'feature_fraction': 0.9, # 建树的特征选择比例\n", + " 'bagging_fraction': 0.9, # 建树的样本采样比例\n", + " 'bagging_freq': 10, # k 意味着每 k 次迭代执行bagging\n", + " 'verbose': -1 # <0 显示致命的, =0 显示错误 (警告), >0 显示信息\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1]\tvalid_0's rmse: 0.0692875\n", + "Training until validation scores don't improve for 100 rounds\n", + "[2]\tvalid_0's rmse: 0.06714\n", + "[3]\tvalid_0's rmse: 0.0646839\n", + "[4]\tvalid_0's rmse: 0.0623338\n", + "[5]\tvalid_0's rmse: 0.0600964\n", + "[6]\tvalid_0's rmse: 0.0580108\n", + "[7]\tvalid_0's rmse: 0.056067\n", + "[8]\tvalid_0's rmse: 0.0544344\n", + "[9]\tvalid_0's rmse: 0.0529408\n", + "[10]\tvalid_0's rmse: 0.051276\n", + "[11]\tvalid_0's rmse: 0.0497692\n", + "[12]\tvalid_0's rmse: 0.0483588\n", + "[13]\tvalid_0's rmse: 0.0470211\n", + "[14]\tvalid_0's rmse: 0.0460061\n", + "[15]\tvalid_0's rmse: 0.0448745\n", + "[16]\tvalid_0's rmse: 0.043796\n", + "[17]\tvalid_0's rmse: 0.0428645\n", + "[18]\tvalid_0's rmse: 0.0419008\n", + "[19]\tvalid_0's rmse: 0.0409544\n", + "[20]\tvalid_0's rmse: 0.0400698\n", + "[21]\tvalid_0's rmse: 0.0392848\n", + "[22]\tvalid_0's rmse: 0.038578\n", + "[23]\tvalid_0's rmse: 0.0378727\n", + "[24]\tvalid_0's rmse: 0.0371929\n", + "[25]\tvalid_0's rmse: 0.0366533\n", + "[26]\tvalid_0's rmse: 0.0360842\n", + "[27]\tvalid_0's rmse: 0.0355757\n", + "[28]\tvalid_0's rmse: 0.0350562\n", + "[29]\tvalid_0's rmse: 0.0345382\n", + "[30]\tvalid_0's rmse: 0.0340975\n", + "[31]\tvalid_0's rmse: 0.0337632\n", + "[32]\tvalid_0's rmse: 0.0334232\n", + "[33]\tvalid_0's rmse: 0.0330998\n", + "[34]\tvalid_0's rmse: 0.0328678\n", + "[35]\tvalid_0's rmse: 0.0325827\n", + "[36]\tvalid_0's rmse: 0.0323483\n", + "[37]\tvalid_0's rmse: 0.0321363\n", + "[38]\tvalid_0's rmse: 0.0318823\n", + "[39]\tvalid_0's rmse: 0.0316983\n", + "[40]\tvalid_0's rmse: 0.0315094\n", + "[41]\tvalid_0's rmse: 0.0313339\n", + "[42]\tvalid_0's rmse: 0.0311663\n", + "[43]\tvalid_0's rmse: 0.031002\n", + "[44]\tvalid_0's rmse: 0.0308446\n", + "[45]\tvalid_0's rmse: 0.0307193\n", + "[46]\tvalid_0's rmse: 0.03058\n", + "[47]\tvalid_0's rmse: 0.0304975\n", + "[48]\tvalid_0's rmse: 0.0303807\n", + "[49]\tvalid_0's rmse: 0.0302476\n", + "[50]\tvalid_0's rmse: 0.0301379\n", + "[51]\tvalid_0's rmse: 0.03\n", + "[52]\tvalid_0's rmse: 0.0299129\n", + "[53]\tvalid_0's rmse: 0.0298092\n", + "[54]\tvalid_0's rmse: 0.0297318\n", + "[55]\tvalid_0's rmse: 0.0296587\n", + "[56]\tvalid_0's rmse: 0.0295906\n", + "[57]\tvalid_0's rmse: 0.0295262\n", + "[58]\tvalid_0's rmse: 0.0294317\n", + "[59]\tvalid_0's rmse: 0.0293666\n", + "[60]\tvalid_0's rmse: 0.029295\n", + "[61]\tvalid_0's rmse: 0.0292621\n", + "[62]\tvalid_0's rmse: 0.0291822\n", + "[63]\tvalid_0's rmse: 0.0291453\n", + "[64]\tvalid_0's rmse: 0.029071\n", + "[65]\tvalid_0's rmse: 0.0289955\n", + "[66]\tvalid_0's rmse: 0.0289425\n", + "[67]\tvalid_0's rmse: 0.0288803\n", + "[68]\tvalid_0's rmse: 0.0288438\n", + "[69]\tvalid_0's rmse: 0.0288004\n", + "[70]\tvalid_0's rmse: 0.0287685\n", + "[71]\tvalid_0's rmse: 0.0287379\n", + "[72]\tvalid_0's rmse: 0.0286942\n", + "[73]\tvalid_0's rmse: 0.028654\n", + "[74]\tvalid_0's rmse: 0.0286255\n", + "[75]\tvalid_0's rmse: 0.0285826\n", + "[76]\tvalid_0's rmse: 0.0285438\n", + "[77]\tvalid_0's rmse: 0.0284903\n", + "[78]\tvalid_0's rmse: 0.0284767\n", + "[79]\tvalid_0's rmse: 0.0284401\n", + "[80]\tvalid_0's rmse: 0.0284152\n", + "[81]\tvalid_0's rmse: 0.0283845\n", + "[82]\tvalid_0's rmse: 0.028375\n", + "[83]\tvalid_0's rmse: 0.0283271\n", + "[84]\tvalid_0's rmse: 0.0283098\n", + "[85]\tvalid_0's rmse: 0.0282848\n", + "[86]\tvalid_0's rmse: 0.0282564\n", + "[87]\tvalid_0's rmse: 0.0282311\n", + "[88]\tvalid_0's rmse: 0.0281999\n", + "[89]\tvalid_0's rmse: 0.0281744\n", + "[90]\tvalid_0's rmse: 0.0281694\n", + "[91]\tvalid_0's rmse: 0.0281849\n", + "[92]\tvalid_0's rmse: 0.0281936\n", + "[93]\tvalid_0's rmse: 0.0281859\n", + "[94]\tvalid_0's rmse: 0.028193\n", + "[95]\tvalid_0's rmse: 0.0281768\n", + "[96]\tvalid_0's rmse: 0.0281729\n", + "[97]\tvalid_0's rmse: 0.0281829\n", + "[98]\tvalid_0's rmse: 0.0281698\n", + "[99]\tvalid_0's rmse: 0.0281678\n", + "[100]\tvalid_0's rmse: 0.0281451\n", + "[101]\tvalid_0's rmse: 0.0281243\n", + "[102]\tvalid_0's rmse: 0.028098\n", + "[103]\tvalid_0's rmse: 0.028089\n", + "[104]\tvalid_0's rmse: 0.0280947\n", + "[105]\tvalid_0's rmse: 0.0280915\n", + "[106]\tvalid_0's rmse: 0.0280942\n", + "[107]\tvalid_0's rmse: 0.0280905\n", + "[108]\tvalid_0's rmse: 0.0280888\n", + "[109]\tvalid_0's rmse: 0.0280827\n", + "[110]\tvalid_0's rmse: 0.028075\n", + "[111]\tvalid_0's rmse: 0.0280506\n", + "[112]\tvalid_0's rmse: 0.0280414\n", + "[113]\tvalid_0's rmse: 0.0280254\n", + "[114]\tvalid_0's rmse: 0.0280016\n", + "[115]\tvalid_0's rmse: 0.0279858\n", + "[116]\tvalid_0's rmse: 0.027973\n", + "[117]\tvalid_0's rmse: 0.027962\n", + "[118]\tvalid_0's rmse: 0.0279404\n", + "[119]\tvalid_0's rmse: 0.0279082\n", + "[120]\tvalid_0's rmse: 0.0279064\n", + "[121]\tvalid_0's rmse: 0.0279041\n", + "[122]\tvalid_0's rmse: 0.0278874\n", + "[123]\tvalid_0's rmse: 0.0278608\n", + "[124]\tvalid_0's rmse: 0.0278517\n", + "[125]\tvalid_0's rmse: 0.0278507\n", + "[126]\tvalid_0's rmse: 0.0278408\n", + "[127]\tvalid_0's rmse: 0.0278322\n", + "[128]\tvalid_0's rmse: 0.0278089\n", + "[129]\tvalid_0's rmse: 0.0278084\n", + "[130]\tvalid_0's rmse: 0.0277843\n", + "[131]\tvalid_0's rmse: 0.0277892\n", + "[132]\tvalid_0's rmse: 0.0277827\n", + "[133]\tvalid_0's rmse: 0.0277758\n", + "[134]\tvalid_0's rmse: 0.0277766\n", + "[135]\tvalid_0's rmse: 0.0277853\n", + "[136]\tvalid_0's rmse: 0.0277744\n", + "[137]\tvalid_0's rmse: 0.0277624\n", + "[138]\tvalid_0's rmse: 0.0277481\n", + "[139]\tvalid_0's rmse: 0.027733\n", + "[140]\tvalid_0's rmse: 0.0277201\n", + "[141]\tvalid_0's rmse: 0.0277112\n", + "[142]\tvalid_0's rmse: 0.0277081\n", + "[143]\tvalid_0's rmse: 0.0276965\n", + "[144]\tvalid_0's rmse: 0.0276911\n", + "[145]\tvalid_0's rmse: 0.0276786\n", + "[146]\tvalid_0's rmse: 0.0276798\n", + "[147]\tvalid_0's rmse: 0.0276724\n", + "[148]\tvalid_0's rmse: 0.0276479\n", + "[149]\tvalid_0's rmse: 0.0276436\n", + "[150]\tvalid_0's rmse: 0.0276115\n", + "[151]\tvalid_0's rmse: 0.0275966\n", + "[152]\tvalid_0's rmse: 0.0275874\n", + "[153]\tvalid_0's rmse: 0.0275693\n", + "[154]\tvalid_0's rmse: 0.0275769\n", + "[155]\tvalid_0's rmse: 0.0275677\n", + "[156]\tvalid_0's rmse: 0.0275517\n", + "[157]\tvalid_0's rmse: 0.0275422\n", + "[158]\tvalid_0's rmse: 0.0275326\n", + "[159]\tvalid_0's rmse: 0.0275205\n", + "[160]\tvalid_0's rmse: 0.0275234\n", + "[161]\tvalid_0's rmse: 0.0275164\n", + "[162]\tvalid_0's rmse: 0.0275097\n", + "[163]\tvalid_0's rmse: 0.0275092\n", + "[164]\tvalid_0's rmse: 0.0274879\n", + "[165]\tvalid_0's rmse: 0.0274696\n", + "[166]\tvalid_0's rmse: 0.0274685\n", + "[167]\tvalid_0's rmse: 0.0274698\n", + "[168]\tvalid_0's rmse: 0.0274655\n", + "[169]\tvalid_0's rmse: 0.0274796\n", + "[170]\tvalid_0's rmse: 0.0274609\n", + "[171]\tvalid_0's rmse: 0.0274455\n", + "[172]\tvalid_0's rmse: 0.0274493\n", + "[173]\tvalid_0's rmse: 0.0274369\n", + "[174]\tvalid_0's rmse: 0.0274299\n", + "[175]\tvalid_0's rmse: 0.0274234\n", + "[176]\tvalid_0's rmse: 0.0274104\n", + "[177]\tvalid_0's rmse: 0.0273984\n", + "[178]\tvalid_0's rmse: 0.0273957\n", + "[179]\tvalid_0's rmse: 0.0273894\n", + "[180]\tvalid_0's rmse: 0.0273696\n", + "[181]\tvalid_0's rmse: 0.0273432\n", + "[182]\tvalid_0's rmse: 0.027342\n", + "[183]\tvalid_0's rmse: 0.0273113\n", + "[184]\tvalid_0's rmse: 0.0273034\n", + "[185]\tvalid_0's rmse: 0.0272787\n", + "[186]\tvalid_0's rmse: 0.027264\n", + "[187]\tvalid_0's rmse: 0.0272687\n", + "[188]\tvalid_0's rmse: 0.0272646\n", + "[189]\tvalid_0's rmse: 0.027269\n", + "[190]\tvalid_0's rmse: 0.0272657\n", + "[191]\tvalid_0's rmse: 0.0272644\n", + "[192]\tvalid_0's rmse: 0.027266\n", + "[193]\tvalid_0's rmse: 0.0272565\n", + "[194]\tvalid_0's rmse: 0.0272468\n", + "[195]\tvalid_0's rmse: 0.0272463\n", + "[196]\tvalid_0's rmse: 0.027222\n", + "[197]\tvalid_0's rmse: 0.0271824\n", + "[198]\tvalid_0's rmse: 0.02718\n", + "[199]\tvalid_0's rmse: 0.0271605\n", + "[200]\tvalid_0's rmse: 0.0271487\n", + "[201]\tvalid_0's rmse: 0.0271442\n", + "[202]\tvalid_0's rmse: 0.0271446\n", + "[203]\tvalid_0's rmse: 0.0271367\n", + "[204]\tvalid_0's rmse: 0.0271474\n", + "[205]\tvalid_0's rmse: 0.0271404\n", + "[206]\tvalid_0's rmse: 0.0271376\n", + "[207]\tvalid_0's rmse: 0.0271251\n", + "[208]\tvalid_0's rmse: 0.0271296\n", + "[209]\tvalid_0's rmse: 0.0271322\n", + "[210]\tvalid_0's rmse: 0.0271364\n", + "[211]\tvalid_0's rmse: 0.027128\n", + "[212]\tvalid_0's rmse: 0.0271156\n", + "[213]\tvalid_0's rmse: 0.0271112\n", + "[214]\tvalid_0's rmse: 0.0271093\n", + "[215]\tvalid_0's rmse: 0.0271047\n", + "[216]\tvalid_0's rmse: 0.0270906\n", + "[217]\tvalid_0's rmse: 0.0270941\n", + "[218]\tvalid_0's rmse: 0.0270903\n", + "[219]\tvalid_0's rmse: 0.0270865\n", + "[220]\tvalid_0's rmse: 0.0270923\n", + "[221]\tvalid_0's rmse: 0.0270943\n", + "[222]\tvalid_0's rmse: 0.0270857\n", + "[223]\tvalid_0's rmse: 0.0270803\n", + "[224]\tvalid_0's rmse: 0.0270701\n", + "[225]\tvalid_0's rmse: 0.0270644\n", + "[226]\tvalid_0's rmse: 0.0270723\n", + "[227]\tvalid_0's rmse: 0.0270654\n", + "[228]\tvalid_0's rmse: 0.027069\n", + "[229]\tvalid_0's rmse: 0.0270634\n", + "[230]\tvalid_0's rmse: 0.027059\n", + "[231]\tvalid_0's rmse: 0.0270559\n", + "[232]\tvalid_0's rmse: 0.0270541\n", + "[233]\tvalid_0's rmse: 0.0270546\n", + "[234]\tvalid_0's rmse: 0.0270555\n", + "[235]\tvalid_0's rmse: 0.0270554\n", + "[236]\tvalid_0's rmse: 0.0270527\n", + "[237]\tvalid_0's rmse: 0.027045\n", + "[238]\tvalid_0's rmse: 0.0270457\n", + "[239]\tvalid_0's rmse: 0.0270406\n", + "[240]\tvalid_0's rmse: 0.0270462\n", + "[241]\tvalid_0's rmse: 0.0270405\n", + "[242]\tvalid_0's rmse: 0.0270448\n", + "[243]\tvalid_0's rmse: 0.0270406\n", + "[244]\tvalid_0's rmse: 0.0270415\n", + "[245]\tvalid_0's rmse: 0.0270421\n", + "[246]\tvalid_0's rmse: 0.0270327\n", + "[247]\tvalid_0's rmse: 0.0270246\n", + "[248]\tvalid_0's rmse: 0.0270194\n", + "[249]\tvalid_0's rmse: 0.0270177\n", + "[250]\tvalid_0's rmse: 0.0270092\n", + "[251]\tvalid_0's rmse: 0.0270089\n", + "[252]\tvalid_0's rmse: 0.0270085\n", + "[253]\tvalid_0's rmse: 0.0269901\n", + "[254]\tvalid_0's rmse: 0.0269891\n", + "[255]\tvalid_0's rmse: 0.0269845\n", + "[256]\tvalid_0's rmse: 0.0269845\n", + "[257]\tvalid_0's rmse: 0.0269555\n", + "[258]\tvalid_0's rmse: 0.026949\n", + "[259]\tvalid_0's rmse: 0.0269442\n", + "[260]\tvalid_0's rmse: 0.0269473\n", + "[261]\tvalid_0's rmse: 0.026946\n", + "[262]\tvalid_0's rmse: 0.0269368\n", + "[263]\tvalid_0's rmse: 0.0269311\n", + "[264]\tvalid_0's rmse: 0.0269294\n", + "[265]\tvalid_0's rmse: 0.0269236\n", + "[266]\tvalid_0's rmse: 0.0269203\n", + "[267]\tvalid_0's rmse: 0.0269202\n", + "[268]\tvalid_0's rmse: 0.0269171\n", + "[269]\tvalid_0's rmse: 0.0269116\n", + "[270]\tvalid_0's rmse: 0.026909\n", + "[271]\tvalid_0's rmse: 0.0269102\n", + "[272]\tvalid_0's rmse: 0.0269057\n", + "[273]\tvalid_0's rmse: 0.0269039\n", + "[274]\tvalid_0's rmse: 0.0269003\n", + "[275]\tvalid_0's rmse: 0.0268963\n", + "[276]\tvalid_0's rmse: 0.0268905\n", + "[277]\tvalid_0's rmse: 0.0268955\n", + "[278]\tvalid_0's rmse: 0.0268977\n", + "[279]\tvalid_0's rmse: 0.0269015\n", + "[280]\tvalid_0's rmse: 0.0269013\n", + "[281]\tvalid_0's rmse: 0.0268988\n", + "[282]\tvalid_0's rmse: 0.0268985\n", + "[283]\tvalid_0's rmse: 0.0268988\n", + "[284]\tvalid_0's rmse: 0.0268935\n", + "[285]\tvalid_0's rmse: 0.0268928\n", + "[286]\tvalid_0's rmse: 0.0268898\n", + "[287]\tvalid_0's rmse: 0.0268862\n", + "[288]\tvalid_0's rmse: 0.0268827\n", + "[289]\tvalid_0's rmse: 0.0268775\n", + "[290]\tvalid_0's rmse: 0.0268797\n", + "[291]\tvalid_0's rmse: 0.0268748\n", + "[292]\tvalid_0's rmse: 0.0268375\n", + "[293]\tvalid_0's rmse: 0.026812\n", + "[294]\tvalid_0's rmse: 0.0268085\n", + "[295]\tvalid_0's rmse: 0.0268076\n", + "[296]\tvalid_0's rmse: 0.026803\n", + "[297]\tvalid_0's rmse: 0.0267955\n", + "[298]\tvalid_0's rmse: 0.0267948\n", + "[299]\tvalid_0's rmse: 0.0267962\n", + "[300]\tvalid_0's rmse: 0.0267929\n", + "[301]\tvalid_0's rmse: 0.026792\n", + "[302]\tvalid_0's rmse: 0.026785\n", + "[303]\tvalid_0's rmse: 0.0267811\n", + "[304]\tvalid_0's rmse: 0.0267687\n", + "[305]\tvalid_0's rmse: 0.0267677\n", + "[306]\tvalid_0's rmse: 0.0267618\n", + "[307]\tvalid_0's rmse: 0.0267611\n", + "[308]\tvalid_0's rmse: 0.0267278\n", + "[309]\tvalid_0's rmse: 0.026727\n", + "[310]\tvalid_0's rmse: 0.0267222\n", + "[311]\tvalid_0's rmse: 0.0267172\n", + "[312]\tvalid_0's rmse: 0.0267138\n", + "[313]\tvalid_0's rmse: 0.0267119\n", + "[314]\tvalid_0's rmse: 0.0267091\n", + "[315]\tvalid_0's rmse: 0.0267093\n", + "[316]\tvalid_0's rmse: 0.0267089\n", + "[317]\tvalid_0's rmse: 0.0267078\n", + "[318]\tvalid_0's rmse: 0.0267068\n", + "[319]\tvalid_0's rmse: 0.0267062\n", + "[320]\tvalid_0's rmse: 0.0267035\n", + "[321]\tvalid_0's rmse: 0.0267021\n", + "[322]\tvalid_0's rmse: 0.0266997\n", + "[323]\tvalid_0's rmse: 0.026701\n", + "[324]\tvalid_0's rmse: 0.0266997\n", + "[325]\tvalid_0's rmse: 0.0266999\n", + "[326]\tvalid_0's rmse: 0.0267043\n", + "[327]\tvalid_0's rmse: 0.0267048\n", + "[328]\tvalid_0's rmse: 0.0266922\n", + "[329]\tvalid_0's rmse: 0.0266828\n", + "[330]\tvalid_0's rmse: 0.0266837\n", + "[331]\tvalid_0's rmse: 0.0266863\n", + "[332]\tvalid_0's rmse: 0.0266764\n", + "[333]\tvalid_0's rmse: 0.0266769\n", + "[334]\tvalid_0's rmse: 0.0266686\n", + "[335]\tvalid_0's rmse: 0.0266701\n", + "[336]\tvalid_0's rmse: 0.0266739\n", + "[337]\tvalid_0's rmse: 0.0266749\n", + "[338]\tvalid_0's rmse: 0.0266749\n", + "[339]\tvalid_0's rmse: 0.0266745\n", + "[340]\tvalid_0's rmse: 0.0266731\n", + "[341]\tvalid_0's rmse: 0.0266707\n", + "[342]\tvalid_0's rmse: 0.0266627\n", + "[343]\tvalid_0's rmse: 0.0266618\n", + "[344]\tvalid_0's rmse: 0.0266607\n", + "[345]\tvalid_0's rmse: 0.0266595\n", + "[346]\tvalid_0's rmse: 0.0266483\n", + "[347]\tvalid_0's rmse: 0.0266501\n", + "[348]\tvalid_0's rmse: 0.0266484\n", + "[349]\tvalid_0's rmse: 0.0266469\n", + "[350]\tvalid_0's rmse: 0.0266446\n", + "[351]\tvalid_0's rmse: 0.0266422\n", + "[352]\tvalid_0's rmse: 0.0266445\n", + "[353]\tvalid_0's rmse: 0.026642\n", + "[354]\tvalid_0's rmse: 0.0266332\n", + "[355]\tvalid_0's rmse: 0.0266333\n", + "[356]\tvalid_0's rmse: 0.0266291\n", + "[357]\tvalid_0's rmse: 0.0266298\n", + "[358]\tvalid_0's rmse: 0.0266302\n", + "[359]\tvalid_0's rmse: 0.026626\n", + "[360]\tvalid_0's rmse: 0.0266191\n", + "[361]\tvalid_0's rmse: 0.0266188\n", + "[362]\tvalid_0's rmse: 0.0266132\n", + "[363]\tvalid_0's rmse: 0.0266094\n", + "[364]\tvalid_0's rmse: 0.0266022\n", + "[365]\tvalid_0's rmse: 0.0266027\n", + "[366]\tvalid_0's rmse: 0.0266001\n", + "[367]\tvalid_0's rmse: 0.0266011\n", + "[368]\tvalid_0's rmse: 0.0265957\n", + "[369]\tvalid_0's rmse: 0.026593\n", + "[370]\tvalid_0's rmse: 0.0265889\n", + "[371]\tvalid_0's rmse: 0.0265887\n", + "[372]\tvalid_0's rmse: 0.0265821\n", + "[373]\tvalid_0's rmse: 0.026579\n", + "[374]\tvalid_0's rmse: 0.0265765\n", + "[375]\tvalid_0's rmse: 0.0265742\n", + "[376]\tvalid_0's rmse: 0.0265724\n", + "[377]\tvalid_0's rmse: 0.0265683\n", + "[378]\tvalid_0's rmse: 0.0265671\n", + "[379]\tvalid_0's rmse: 0.0265605\n", + "[380]\tvalid_0's rmse: 0.026561\n", + "[381]\tvalid_0's rmse: 0.0265544\n", + "[382]\tvalid_0's rmse: 0.026555\n", + "[383]\tvalid_0's rmse: 0.0265526\n", + "[384]\tvalid_0's rmse: 0.0265483\n", + "[385]\tvalid_0's rmse: 0.0265519\n", + "[386]\tvalid_0's rmse: 0.0265494\n", + "[387]\tvalid_0's rmse: 0.0265502\n", + "[388]\tvalid_0's rmse: 0.0265525\n", + "[389]\tvalid_0's rmse: 0.0265567\n", + "[390]\tvalid_0's rmse: 0.0265403\n", + "[391]\tvalid_0's rmse: 0.0265361\n", + "[392]\tvalid_0's rmse: 0.0265342\n", + "[393]\tvalid_0's rmse: 0.026529\n", + "[394]\tvalid_0's rmse: 0.0265267\n", + "[395]\tvalid_0's rmse: 0.0265303\n", + "[396]\tvalid_0's rmse: 0.0265306\n", + "[397]\tvalid_0's rmse: 0.0265338\n", + "[398]\tvalid_0's rmse: 0.0265294\n", + "[399]\tvalid_0's rmse: 0.0265253\n", + "[400]\tvalid_0's rmse: 0.0265248\n", + "[401]\tvalid_0's rmse: 0.0265266\n", + "[402]\tvalid_0's rmse: 0.0265279\n", + "[403]\tvalid_0's rmse: 0.0265289\n", + "[404]\tvalid_0's rmse: 0.0265279\n", + "[405]\tvalid_0's rmse: 0.0265228\n", + "[406]\tvalid_0's rmse: 0.0265323\n", + "[407]\tvalid_0's rmse: 0.0265335\n", + "[408]\tvalid_0's rmse: 0.0265318\n", + "[409]\tvalid_0's rmse: 0.0265298\n", + "[410]\tvalid_0's rmse: 0.0265275\n", + "[411]\tvalid_0's rmse: 0.0265259\n", + "[412]\tvalid_0's rmse: 0.0265261\n", + "[413]\tvalid_0's rmse: 0.0265267\n", + "[414]\tvalid_0's rmse: 0.0265261\n", + "[415]\tvalid_0's rmse: 0.0265255\n", + "[416]\tvalid_0's rmse: 0.0265275\n", + "[417]\tvalid_0's rmse: 0.0265225\n", + "[418]\tvalid_0's rmse: 0.0265226\n", + "[419]\tvalid_0's rmse: 0.0265222\n", + "[420]\tvalid_0's rmse: 0.026521\n", + "[421]\tvalid_0's rmse: 0.0265169\n", + "[422]\tvalid_0's rmse: 0.0265139\n", + "[423]\tvalid_0's rmse: 0.0265126\n", + "[424]\tvalid_0's rmse: 0.0265136\n", + "[425]\tvalid_0's rmse: 0.0265079\n", + "[426]\tvalid_0's rmse: 0.0265017\n", + "[427]\tvalid_0's rmse: 0.0264914\n", + "[428]\tvalid_0's rmse: 0.026489\n", + "[429]\tvalid_0's rmse: 0.0264918\n", + "[430]\tvalid_0's rmse: 0.0264906\n", + "[431]\tvalid_0's rmse: 0.0264809\n", + "[432]\tvalid_0's rmse: 0.0264809\n", + "[433]\tvalid_0's rmse: 0.0264819\n", + "[434]\tvalid_0's rmse: 0.0264775\n", + "[435]\tvalid_0's rmse: 0.0264744\n", + "[436]\tvalid_0's rmse: 0.026474\n", + "[437]\tvalid_0's rmse: 0.0264713\n", + "[438]\tvalid_0's rmse: 0.0264702\n", + "[439]\tvalid_0's rmse: 0.0264686\n", + "[440]\tvalid_0's rmse: 0.0264654\n", + "[441]\tvalid_0's rmse: 0.0264663\n", + "[442]\tvalid_0's rmse: 0.0264543\n", + "[443]\tvalid_0's rmse: 0.0264538\n", + "[444]\tvalid_0's rmse: 0.0264507\n", + "[445]\tvalid_0's rmse: 0.0264509\n", + "[446]\tvalid_0's rmse: 0.0264456\n", + "[447]\tvalid_0's rmse: 0.0264483\n", + "[448]\tvalid_0's rmse: 0.0264169\n", + "[449]\tvalid_0's rmse: 0.0264151\n", + "[450]\tvalid_0's rmse: 0.0264172\n", + "[451]\tvalid_0's rmse: 0.0264171\n", + "[452]\tvalid_0's rmse: 0.0264175\n", + "[453]\tvalid_0's rmse: 0.0264149\n", + "[454]\tvalid_0's rmse: 0.0264144\n", + "[455]\tvalid_0's rmse: 0.0264154\n", + "[456]\tvalid_0's rmse: 0.0264147\n", + "[457]\tvalid_0's rmse: 0.0264118\n", + "[458]\tvalid_0's rmse: 0.0264138\n", + "[459]\tvalid_0's rmse: 0.0264151\n", + "[460]\tvalid_0's rmse: 0.026415\n", + "[461]\tvalid_0's rmse: 0.0264159\n", + "[462]\tvalid_0's rmse: 0.0264121\n", + "[463]\tvalid_0's rmse: 0.026414\n", + "[464]\tvalid_0's rmse: 0.0264093\n", + "[465]\tvalid_0's rmse: 0.0264118\n", + "[466]\tvalid_0's rmse: 0.0264118\n", + "[467]\tvalid_0's rmse: 0.0264099\n", + "[468]\tvalid_0's rmse: 0.0264113\n", + "[469]\tvalid_0's rmse: 0.0264101\n", + "[470]\tvalid_0's rmse: 0.0264118\n", + "[471]\tvalid_0's rmse: 0.0264092\n", + "[472]\tvalid_0's rmse: 0.0264044\n", + "[473]\tvalid_0's rmse: 0.0263975\n", + "[474]\tvalid_0's rmse: 0.0263909\n", + "[475]\tvalid_0's rmse: 0.0263866\n", + "[476]\tvalid_0's rmse: 0.0263848\n", + "[477]\tvalid_0's rmse: 0.0263839\n", + "[478]\tvalid_0's rmse: 0.0263787\n", + "[479]\tvalid_0's rmse: 0.0263797\n", + "[480]\tvalid_0's rmse: 0.0263769\n", + "[481]\tvalid_0's rmse: 0.0263744\n", + "[482]\tvalid_0's rmse: 0.0263693\n", + "[483]\tvalid_0's rmse: 0.0263673\n", + "[484]\tvalid_0's rmse: 0.0263626\n", + "[485]\tvalid_0's rmse: 0.0263591\n", + "[486]\tvalid_0's rmse: 0.0263569\n", + "[487]\tvalid_0's rmse: 0.0263557\n", + "[488]\tvalid_0's rmse: 0.0263559\n", + "[489]\tvalid_0's rmse: 0.026358\n", + "[490]\tvalid_0's rmse: 0.0263566\n", + "[491]\tvalid_0's rmse: 0.0263564\n", + "[492]\tvalid_0's rmse: 0.0263568\n", + "[493]\tvalid_0's rmse: 0.0263562\n", + "[494]\tvalid_0's rmse: 0.0263561\n", + "[495]\tvalid_0's rmse: 0.0263508\n", + "[496]\tvalid_0's rmse: 0.0263498\n", + "[497]\tvalid_0's rmse: 0.026346\n", + "[498]\tvalid_0's rmse: 0.0263474\n", + "[499]\tvalid_0's rmse: 0.026346\n", + "[500]\tvalid_0's rmse: 0.026342\n", + "[501]\tvalid_0's rmse: 0.0263415\n", + "[502]\tvalid_0's rmse: 0.0263404\n", + "[503]\tvalid_0's rmse: 0.0263355\n", + "[504]\tvalid_0's rmse: 0.0263363\n", + "[505]\tvalid_0's rmse: 0.0263362\n", + "[506]\tvalid_0's rmse: 0.0263356\n", + "[507]\tvalid_0's rmse: 0.0263345\n", + "[508]\tvalid_0's rmse: 0.0263343\n", + "[509]\tvalid_0's rmse: 0.0263294\n", + "[510]\tvalid_0's rmse: 0.0263279\n", + "[511]\tvalid_0's rmse: 0.0263274\n", + "[512]\tvalid_0's rmse: 0.0263227\n", + "[513]\tvalid_0's rmse: 0.0263228\n", + "[514]\tvalid_0's rmse: 0.0263178\n", + "[515]\tvalid_0's rmse: 0.0263175\n", + "[516]\tvalid_0's rmse: 0.0263152\n", + "[517]\tvalid_0's rmse: 0.0263062\n", + "[518]\tvalid_0's rmse: 0.0263098\n", + "[519]\tvalid_0's rmse: 0.0263065\n", + "[520]\tvalid_0's rmse: 0.0263043\n", + "[521]\tvalid_0's rmse: 0.0263029\n", + "[522]\tvalid_0's rmse: 0.0263005\n", + "[523]\tvalid_0's rmse: 0.0263013\n", + "[524]\tvalid_0's rmse: 0.0263\n", + "[525]\tvalid_0's rmse: 0.0262944\n", + "[526]\tvalid_0's rmse: 0.0262956\n", + "[527]\tvalid_0's rmse: 0.0262945\n", + "[528]\tvalid_0's rmse: 0.0262948\n", + "[529]\tvalid_0's rmse: 0.0262927\n", + "[530]\tvalid_0's rmse: 0.0262942\n", + "[531]\tvalid_0's rmse: 0.0262821\n", + "[532]\tvalid_0's rmse: 0.0262828\n", + "[533]\tvalid_0's rmse: 0.0262794\n", + "[534]\tvalid_0's rmse: 0.0262778\n", + "[535]\tvalid_0's rmse: 0.0262769\n", + "[536]\tvalid_0's rmse: 0.0262763\n", + "[537]\tvalid_0's rmse: 0.0262754\n", + "[538]\tvalid_0's rmse: 0.026275\n", + "[539]\tvalid_0's rmse: 0.0262742\n", + "[540]\tvalid_0's rmse: 0.02625\n", + "[541]\tvalid_0's rmse: 0.0262449\n", + "[542]\tvalid_0's rmse: 0.0262456\n", + "[543]\tvalid_0's rmse: 0.0262468\n", + "[544]\tvalid_0's rmse: 0.0262448\n", + "[545]\tvalid_0's rmse: 0.0262438\n", + "[546]\tvalid_0's rmse: 0.0262417\n", + "[547]\tvalid_0's rmse: 0.026231\n", + "[548]\tvalid_0's rmse: 0.0262339\n", + "[549]\tvalid_0's rmse: 0.0262327\n", + "[550]\tvalid_0's rmse: 0.0262289\n", + "[551]\tvalid_0's rmse: 0.0262244\n", + "[552]\tvalid_0's rmse: 0.0262075\n", + "[553]\tvalid_0's rmse: 0.0262031\n", + "[554]\tvalid_0's rmse: 0.0262028\n", + "[555]\tvalid_0's rmse: 0.0261984\n", + "[556]\tvalid_0's rmse: 0.0261981\n", + "[557]\tvalid_0's rmse: 0.0261977\n", + "[558]\tvalid_0's rmse: 0.0262004\n", + "[559]\tvalid_0's rmse: 0.0261955\n", + "[560]\tvalid_0's rmse: 0.0261955\n", + "[561]\tvalid_0's rmse: 0.0261947\n", + "[562]\tvalid_0's rmse: 0.0261983\n", + "[563]\tvalid_0's rmse: 0.0261981\n", + "[564]\tvalid_0's rmse: 0.0261992\n", + "[565]\tvalid_0's rmse: 0.0261974\n", + "[566]\tvalid_0's rmse: 0.0261936\n", + "[567]\tvalid_0's rmse: 0.0261954\n", + "[568]\tvalid_0's rmse: 0.0261987\n", + "[569]\tvalid_0's rmse: 0.0261837\n", + "[570]\tvalid_0's rmse: 0.0261839\n", + "[571]\tvalid_0's rmse: 0.026185\n", + "[572]\tvalid_0's rmse: 0.0261849\n", + "[573]\tvalid_0's rmse: 0.0261842\n", + "[574]\tvalid_0's rmse: 0.0261826\n", + "[575]\tvalid_0's rmse: 0.0261834\n", + "[576]\tvalid_0's rmse: 0.0261825\n", + "[577]\tvalid_0's rmse: 0.0261717\n", + "[578]\tvalid_0's rmse: 0.026171\n", + "[579]\tvalid_0's rmse: 0.0261609\n", + "[580]\tvalid_0's rmse: 0.02616\n", + "[581]\tvalid_0's rmse: 0.0261573\n", + "[582]\tvalid_0's rmse: 0.026159\n", + "[583]\tvalid_0's rmse: 0.0261576\n", + "[584]\tvalid_0's rmse: 0.0261557\n", + "[585]\tvalid_0's rmse: 0.0261582\n", + "[586]\tvalid_0's rmse: 0.026158\n", + "[587]\tvalid_0's rmse: 0.0261573\n", + "[588]\tvalid_0's rmse: 0.0261571\n", + "[589]\tvalid_0's rmse: 0.0261535\n", + "[590]\tvalid_0's rmse: 0.0261534\n", + "[591]\tvalid_0's rmse: 0.0261534\n", + "[592]\tvalid_0's rmse: 0.0261436\n", + "[593]\tvalid_0's rmse: 0.0261423\n", + "[594]\tvalid_0's rmse: 0.0261409\n", + "[595]\tvalid_0's rmse: 0.0261377\n", + "[596]\tvalid_0's rmse: 0.0261358\n", + "[597]\tvalid_0's rmse: 0.0261367\n", + "[598]\tvalid_0's rmse: 0.026137\n", + "[599]\tvalid_0's rmse: 0.0261357\n", + "[600]\tvalid_0's rmse: 0.0261344\n", + "[601]\tvalid_0's rmse: 0.0261345\n", + "[602]\tvalid_0's rmse: 0.026133\n", + "[603]\tvalid_0's rmse: 0.0261313\n", + "[604]\tvalid_0's rmse: 0.0261344\n", + "[605]\tvalid_0's rmse: 0.0261339\n", + "[606]\tvalid_0's rmse: 0.0261321\n", + "[607]\tvalid_0's rmse: 0.0261288\n", + "[608]\tvalid_0's rmse: 0.0261285\n", + "[609]\tvalid_0's rmse: 0.0261298\n", + "[610]\tvalid_0's rmse: 0.026131\n", + "[611]\tvalid_0's rmse: 0.0261265\n", + "[612]\tvalid_0's rmse: 0.0261043\n", + "[613]\tvalid_0's rmse: 0.0261023\n", + "[614]\tvalid_0's rmse: 0.0261013\n", + "[615]\tvalid_0's rmse: 0.0260971\n", + "[616]\tvalid_0's rmse: 0.0260979\n", + "[617]\tvalid_0's rmse: 0.0260987\n", + "[618]\tvalid_0's rmse: 0.0260728\n", + "[619]\tvalid_0's rmse: 0.026069\n", + "[620]\tvalid_0's rmse: 0.0260678\n", + "[621]\tvalid_0's rmse: 0.0260587\n", + "[622]\tvalid_0's rmse: 0.0260571\n", + "[623]\tvalid_0's rmse: 0.0260564\n", + "[624]\tvalid_0's rmse: 0.026054\n", + "[625]\tvalid_0's rmse: 0.0260544\n", + "[626]\tvalid_0's rmse: 0.0260502\n", + "[627]\tvalid_0's rmse: 0.0260444\n", + "[628]\tvalid_0's rmse: 0.026044\n", + "[629]\tvalid_0's rmse: 0.02604\n", + "[630]\tvalid_0's rmse: 0.0260386\n", + "[631]\tvalid_0's rmse: 0.0260394\n", + "[632]\tvalid_0's rmse: 0.0260378\n", + "[633]\tvalid_0's rmse: 0.0260397\n", + "[634]\tvalid_0's rmse: 0.0260395\n", + "[635]\tvalid_0's rmse: 0.0260398\n", + "[636]\tvalid_0's rmse: 0.0260376\n", + "[637]\tvalid_0's rmse: 0.026039\n", + "[638]\tvalid_0's rmse: 0.0260362\n", + "[639]\tvalid_0's rmse: 0.0260345\n", + "[640]\tvalid_0's rmse: 0.0260342\n", + "[641]\tvalid_0's rmse: 0.0260336\n", + "[642]\tvalid_0's rmse: 0.0260337\n", + "[643]\tvalid_0's rmse: 0.0260325\n", + "[644]\tvalid_0's rmse: 0.0260305\n", + "[645]\tvalid_0's rmse: 0.0260308\n", + "[646]\tvalid_0's rmse: 0.0260319\n", + "[647]\tvalid_0's rmse: 0.0260334\n", + "[648]\tvalid_0's rmse: 0.0260338\n", + "[649]\tvalid_0's rmse: 0.0260325\n", + "[650]\tvalid_0's rmse: 0.0260265\n", + "[651]\tvalid_0's rmse: 0.0260269\n", + "[652]\tvalid_0's rmse: 0.0260251\n", + "[653]\tvalid_0's rmse: 0.0260252\n", + "[654]\tvalid_0's rmse: 0.0260251\n", + "[655]\tvalid_0's rmse: 0.0260257\n", + "[656]\tvalid_0's rmse: 0.0260234\n", + "[657]\tvalid_0's rmse: 0.0260219\n", + "[658]\tvalid_0's rmse: 0.0260211\n", + "[659]\tvalid_0's rmse: 0.0260209\n", + "[660]\tvalid_0's rmse: 0.0260217\n", + "[661]\tvalid_0's rmse: 0.0260234\n", + "[662]\tvalid_0's rmse: 0.0260244\n", + "[663]\tvalid_0's rmse: 0.0260219\n", + "[664]\tvalid_0's rmse: 0.0260216\n", + "[665]\tvalid_0's rmse: 0.026023\n", + "[666]\tvalid_0's rmse: 0.026025\n", + "[667]\tvalid_0's rmse: 0.0260245\n", + "[668]\tvalid_0's rmse: 0.026022\n", + "[669]\tvalid_0's rmse: 0.0260216\n", + "[670]\tvalid_0's rmse: 0.0260231\n", + "[671]\tvalid_0's rmse: 0.0260226\n", + "[672]\tvalid_0's rmse: 0.0260197\n", + "[673]\tvalid_0's rmse: 0.0260191\n", + "[674]\tvalid_0's rmse: 0.0260193\n", + "[675]\tvalid_0's rmse: 0.0260178\n", + "[676]\tvalid_0's rmse: 0.0260171\n", + "[677]\tvalid_0's rmse: 0.0260153\n", + "[678]\tvalid_0's rmse: 0.0260153\n", + "[679]\tvalid_0's rmse: 0.026013\n", + "[680]\tvalid_0's rmse: 0.0260116\n", + "[681]\tvalid_0's rmse: 0.0260089\n", + "[682]\tvalid_0's rmse: 0.0260046\n", + "[683]\tvalid_0's rmse: 0.0260029\n", + "[684]\tvalid_0's rmse: 0.0260038\n", + "[685]\tvalid_0's rmse: 0.0260018\n", + "[686]\tvalid_0's rmse: 0.0260058\n", + "[687]\tvalid_0's rmse: 0.0260083\n", + "[688]\tvalid_0's rmse: 0.0260081\n", + "[689]\tvalid_0's rmse: 0.0260076\n", + "[690]\tvalid_0's rmse: 0.0260032\n", + "[691]\tvalid_0's rmse: 0.0260018\n", + "[692]\tvalid_0's rmse: 0.0260013\n", + "[693]\tvalid_0's rmse: 0.0260024\n", + "[694]\tvalid_0's rmse: 0.026003\n", + "[695]\tvalid_0's rmse: 0.0260023\n", + "[696]\tvalid_0's rmse: 0.0260022\n", + "[697]\tvalid_0's rmse: 0.0260018\n", + "[698]\tvalid_0's rmse: 0.0260004\n", + "[699]\tvalid_0's rmse: 0.0259998\n", + "[700]\tvalid_0's rmse: 0.0259961\n", + "[701]\tvalid_0's rmse: 0.0259964\n", + "[702]\tvalid_0's rmse: 0.0259942\n", + "[703]\tvalid_0's rmse: 0.0259951\n", + "[704]\tvalid_0's rmse: 0.0259918\n", + "[705]\tvalid_0's rmse: 0.0259913\n", + "[706]\tvalid_0's rmse: 0.0259895\n", + "[707]\tvalid_0's rmse: 0.0259881\n", + "[708]\tvalid_0's rmse: 0.0259869\n", + "[709]\tvalid_0's rmse: 0.0259796\n", + "[710]\tvalid_0's rmse: 0.0259789\n", + "[711]\tvalid_0's rmse: 0.0259766\n", + "[712]\tvalid_0's rmse: 0.0259758\n", + "[713]\tvalid_0's rmse: 0.0259746\n", + "[714]\tvalid_0's rmse: 0.0259744\n", + "[715]\tvalid_0's rmse: 0.0259761\n", + "[716]\tvalid_0's rmse: 0.0259832\n", + "[717]\tvalid_0's rmse: 0.0259813\n", + "[718]\tvalid_0's rmse: 0.0259823\n", + "[719]\tvalid_0's rmse: 0.0259815\n", + "[720]\tvalid_0's rmse: 0.0259701\n", + "[721]\tvalid_0's rmse: 0.0259693\n", + "[722]\tvalid_0's rmse: 0.0259679\n", + "[723]\tvalid_0's rmse: 0.0259668\n", + "[724]\tvalid_0's rmse: 0.0259646\n", + "[725]\tvalid_0's rmse: 0.0259639\n", + "[726]\tvalid_0's rmse: 0.0259672\n", + "[727]\tvalid_0's rmse: 0.025969\n", + "[728]\tvalid_0's rmse: 0.0259709\n", + "[729]\tvalid_0's rmse: 0.0259705\n", + "[730]\tvalid_0's rmse: 0.0259611\n", + "[731]\tvalid_0's rmse: 0.0259601\n", + "[732]\tvalid_0's rmse: 0.0259605\n", + "[733]\tvalid_0's rmse: 0.02596\n", + "[734]\tvalid_0's rmse: 0.0259589\n", + "[735]\tvalid_0's rmse: 0.0259593\n", + "[736]\tvalid_0's rmse: 0.0259612\n", + "[737]\tvalid_0's rmse: 0.0259617\n", + "[738]\tvalid_0's rmse: 0.0259604\n", + "[739]\tvalid_0's rmse: 0.0259609\n", + "[740]\tvalid_0's rmse: 0.0259575\n", + "[741]\tvalid_0's rmse: 0.0259552\n", + "[742]\tvalid_0's rmse: 0.025958\n", + "[743]\tvalid_0's rmse: 0.0259575\n", + "[744]\tvalid_0's rmse: 0.0259551\n", + "[745]\tvalid_0's rmse: 0.0259555\n", + "[746]\tvalid_0's rmse: 0.0259564\n", + "[747]\tvalid_0's rmse: 0.0259554\n", + "[748]\tvalid_0's rmse: 0.0259536\n", + "[749]\tvalid_0's rmse: 0.0259524\n", + "[750]\tvalid_0's rmse: 0.0259526\n", + "[751]\tvalid_0's rmse: 0.0259521\n", + "[752]\tvalid_0's rmse: 0.0259515\n", + "[753]\tvalid_0's rmse: 0.0259512\n", + "[754]\tvalid_0's rmse: 0.0259504\n", + "[755]\tvalid_0's rmse: 0.0259508\n", + "[756]\tvalid_0's rmse: 0.0259495\n", + "[757]\tvalid_0's rmse: 0.0259432\n", + "[758]\tvalid_0's rmse: 0.0259428\n", + "[759]\tvalid_0's rmse: 0.0259422\n", + "[760]\tvalid_0's rmse: 0.0259443\n", + "[761]\tvalid_0's rmse: 0.0259459\n", + "[762]\tvalid_0's rmse: 0.0259443\n", + "[763]\tvalid_0's rmse: 0.0259442\n", + "[764]\tvalid_0's rmse: 0.0259432\n", + "[765]\tvalid_0's rmse: 0.025944\n", + "[766]\tvalid_0's rmse: 0.0259433\n", + "[767]\tvalid_0's rmse: 0.0259438\n", + "[768]\tvalid_0's rmse: 0.0259408\n", + "[769]\tvalid_0's rmse: 0.0259404\n", + "[770]\tvalid_0's rmse: 0.0259398\n", + "[771]\tvalid_0's rmse: 0.0259375\n", + "[772]\tvalid_0's rmse: 0.025935\n", + "[773]\tvalid_0's rmse: 0.0259347\n", + "[774]\tvalid_0's rmse: 0.0259332\n", + "[775]\tvalid_0's rmse: 0.0259335\n", + "[776]\tvalid_0's rmse: 0.0259349\n", + "[777]\tvalid_0's rmse: 0.0259345\n", + "[778]\tvalid_0's rmse: 0.0259353\n", + "[779]\tvalid_0's rmse: 0.0259353\n", + "[780]\tvalid_0's rmse: 0.0259354\n", + "[781]\tvalid_0's rmse: 0.025935\n", + "[782]\tvalid_0's rmse: 0.0259362\n", + "[783]\tvalid_0's rmse: 0.0259348\n", + "[784]\tvalid_0's rmse: 0.0259347\n", + "[785]\tvalid_0's rmse: 0.0259361\n", + "[786]\tvalid_0's rmse: 0.0259417\n", + "[787]\tvalid_0's rmse: 0.0259418\n", + "[788]\tvalid_0's rmse: 0.0259422\n", + "[789]\tvalid_0's rmse: 0.0259422\n", + "[790]\tvalid_0's rmse: 0.0259419\n", + "[791]\tvalid_0's rmse: 0.0259409\n", + "[792]\tvalid_0's rmse: 0.0259409\n", + "[793]\tvalid_0's rmse: 0.0259433\n", + "[794]\tvalid_0's rmse: 0.0259438\n", + "[795]\tvalid_0's rmse: 0.0259415\n", + "[796]\tvalid_0's rmse: 0.0259423\n", + "[797]\tvalid_0's rmse: 0.0259435\n", + "[798]\tvalid_0's rmse: 0.0259416\n", + "[799]\tvalid_0's rmse: 0.0259469\n", + "[800]\tvalid_0's rmse: 0.0259488\n", + "[801]\tvalid_0's rmse: 0.0259505\n", + "[802]\tvalid_0's rmse: 0.025947\n", + "[803]\tvalid_0's rmse: 0.0259453\n", + "[804]\tvalid_0's rmse: 0.0259434\n", + "[805]\tvalid_0's rmse: 0.0259429\n", + "[806]\tvalid_0's rmse: 0.0259445\n", + "[807]\tvalid_0's rmse: 0.0259469\n", + "[808]\tvalid_0's rmse: 0.0259436\n", + "[809]\tvalid_0's rmse: 0.0259414\n", + "[810]\tvalid_0's rmse: 0.0259419\n", + "[811]\tvalid_0's rmse: 0.0259498\n", + "[812]\tvalid_0's rmse: 0.0259524\n", + "[813]\tvalid_0's rmse: 0.025951\n", + "[814]\tvalid_0's rmse: 0.0259468\n", + "[815]\tvalid_0's rmse: 0.0259462\n", + "[816]\tvalid_0's rmse: 0.0259387\n", + "[817]\tvalid_0's rmse: 0.0259382\n", + "[818]\tvalid_0's rmse: 0.0259381\n", + "[819]\tvalid_0's rmse: 0.0259391\n", + "[820]\tvalid_0's rmse: 0.0259437\n", + "[821]\tvalid_0's rmse: 0.0259455\n", + "[822]\tvalid_0's rmse: 0.0259458\n", + "[823]\tvalid_0's rmse: 0.0259459\n", + "[824]\tvalid_0's rmse: 0.0259441\n", + "[825]\tvalid_0's rmse: 0.0259408\n", + "[826]\tvalid_0's rmse: 0.0259412\n", + "[827]\tvalid_0's rmse: 0.0259419\n", + "[828]\tvalid_0's rmse: 0.0259434\n", + "[829]\tvalid_0's rmse: 0.0259429\n", + "[830]\tvalid_0's rmse: 0.0259448\n", + "[831]\tvalid_0's rmse: 0.0259442\n", + "[832]\tvalid_0's rmse: 0.0259424\n", + "[833]\tvalid_0's rmse: 0.0259416\n", + "[834]\tvalid_0's rmse: 0.0259425\n", + "[835]\tvalid_0's rmse: 0.025941\n", + "[836]\tvalid_0's rmse: 0.02594\n", + "[837]\tvalid_0's rmse: 0.0259396\n", + "[838]\tvalid_0's rmse: 0.0259382\n", + "[839]\tvalid_0's rmse: 0.0259367\n", + "[840]\tvalid_0's rmse: 0.0259381\n", + "[841]\tvalid_0's rmse: 0.0259379\n", + "[842]\tvalid_0's rmse: 0.0259268\n", + "[843]\tvalid_0's rmse: 0.0259259\n", + "[844]\tvalid_0's rmse: 0.0259228\n", + "[845]\tvalid_0's rmse: 0.0259228\n", + "[846]\tvalid_0's rmse: 0.0259187\n", + "[847]\tvalid_0's rmse: 0.0259171\n", + "[848]\tvalid_0's rmse: 0.0259177\n", + "[849]\tvalid_0's rmse: 0.0259164\n", + "[850]\tvalid_0's rmse: 0.0259161\n", + "[851]\tvalid_0's rmse: 0.0259161\n", + "[852]\tvalid_0's rmse: 0.0259147\n", + "[853]\tvalid_0's rmse: 0.0259145\n", + "[854]\tvalid_0's rmse: 0.0259144\n", + "[855]\tvalid_0's rmse: 0.0259125\n", + "[856]\tvalid_0's rmse: 0.0259127\n", + "[857]\tvalid_0's rmse: 0.0259115\n", + "[858]\tvalid_0's rmse: 0.0259104\n", + "[859]\tvalid_0's rmse: 0.0259119\n", + "[860]\tvalid_0's rmse: 0.0259109\n", + "[861]\tvalid_0's rmse: 0.02591\n", + "[862]\tvalid_0's rmse: 0.0259099\n", + "[863]\tvalid_0's rmse: 0.0259097\n", + "[864]\tvalid_0's rmse: 0.0259133\n", + "[865]\tvalid_0's rmse: 0.0259116\n", + "[866]\tvalid_0's rmse: 0.0259111\n", + "[867]\tvalid_0's rmse: 0.0259095\n", + "[868]\tvalid_0's rmse: 0.0258982\n", + "[869]\tvalid_0's rmse: 0.0258979\n", + "[870]\tvalid_0's rmse: 0.0258956\n", + "[871]\tvalid_0's rmse: 0.0258967\n", + "[872]\tvalid_0's rmse: 0.0258972\n", + "[873]\tvalid_0's rmse: 0.0258971\n", + "[874]\tvalid_0's rmse: 0.0259015\n", + "[875]\tvalid_0's rmse: 0.0258999\n", + "[876]\tvalid_0's rmse: 0.0258987\n", + "[877]\tvalid_0's rmse: 0.0258987\n", + "[878]\tvalid_0's rmse: 0.0258985\n", + "[879]\tvalid_0's rmse: 0.0259\n", + "[880]\tvalid_0's rmse: 0.0259008\n", + "[881]\tvalid_0's rmse: 0.0259018\n", + "[882]\tvalid_0's rmse: 0.0259037\n", + "[883]\tvalid_0's rmse: 0.0259048\n", + "[884]\tvalid_0's rmse: 0.0259063\n", + "[885]\tvalid_0's rmse: 0.0259055\n", + "[886]\tvalid_0's rmse: 0.0259052\n", + "[887]\tvalid_0's rmse: 0.0259047\n", + "[888]\tvalid_0's rmse: 0.0259042\n", + "[889]\tvalid_0's rmse: 0.0259046\n", + "[890]\tvalid_0's rmse: 0.0259049\n", + "[891]\tvalid_0's rmse: 0.0259044\n", + "[892]\tvalid_0's rmse: 0.0259046\n", + "[893]\tvalid_0's rmse: 0.0259035\n", + "[894]\tvalid_0's rmse: 0.0259016\n", + "[895]\tvalid_0's rmse: 0.0259031\n", + "[896]\tvalid_0's rmse: 0.0259025\n", + "[897]\tvalid_0's rmse: 0.0259047\n", + "[898]\tvalid_0's rmse: 0.0259051\n", + "[899]\tvalid_0's rmse: 0.0259101\n", + "[900]\tvalid_0's rmse: 0.0259099\n", + "[901]\tvalid_0's rmse: 0.0259106\n", + "[902]\tvalid_0's rmse: 0.0259101\n", + "[903]\tvalid_0's rmse: 0.0259044\n", + "[904]\tvalid_0's rmse: 0.0259034\n", + "[905]\tvalid_0's rmse: 0.0259038\n", + "[906]\tvalid_0's rmse: 0.0259047\n", + "[907]\tvalid_0's rmse: 0.0259061\n", + "[908]\tvalid_0's rmse: 0.025906\n", + "[909]\tvalid_0's rmse: 0.025901\n", + "[910]\tvalid_0's rmse: 0.0258971\n", + "[911]\tvalid_0's rmse: 0.0258968\n", + "[912]\tvalid_0's rmse: 0.0258973\n", + "[913]\tvalid_0's rmse: 0.0258965\n", + "[914]\tvalid_0's rmse: 0.025898\n", + "[915]\tvalid_0's rmse: 0.0258982\n", + "[916]\tvalid_0's rmse: 0.0258981\n", + "[917]\tvalid_0's rmse: 0.0258952\n", + "[918]\tvalid_0's rmse: 0.0258949\n", + "[919]\tvalid_0's rmse: 0.0258947\n", + "[920]\tvalid_0's rmse: 0.0258959\n", + "[921]\tvalid_0's rmse: 0.0258954\n", + "[922]\tvalid_0's rmse: 0.0258947\n", + "[923]\tvalid_0's rmse: 0.0258946\n", + "[924]\tvalid_0's rmse: 0.0258931\n", + "[925]\tvalid_0's rmse: 0.0258945\n", + "[926]\tvalid_0's rmse: 0.0258925\n", + "[927]\tvalid_0's rmse: 0.0258899\n", + "[928]\tvalid_0's rmse: 0.0258898\n", + "[929]\tvalid_0's rmse: 0.0258914\n", + "[930]\tvalid_0's rmse: 0.0258912\n", + "[931]\tvalid_0's rmse: 0.025892\n", + "[932]\tvalid_0's rmse: 0.025893\n", + "[933]\tvalid_0's rmse: 0.0258918\n", + "[934]\tvalid_0's rmse: 0.0258882\n", + "[935]\tvalid_0's rmse: 0.0258882\n", + "[936]\tvalid_0's rmse: 0.0258871\n", + "[937]\tvalid_0's rmse: 0.0258879\n", + "[938]\tvalid_0's rmse: 0.0258857\n", + "[939]\tvalid_0's rmse: 0.0258855\n", + "[940]\tvalid_0's rmse: 0.0258856\n", + "[941]\tvalid_0's rmse: 0.0258855\n", + "[942]\tvalid_0's rmse: 0.0258857\n", + "[943]\tvalid_0's rmse: 0.0258857\n", + "[944]\tvalid_0's rmse: 0.0258861\n", + "[945]\tvalid_0's rmse: 0.0258858\n", + "[946]\tvalid_0's rmse: 0.0258865\n", + "[947]\tvalid_0's rmse: 0.0258875\n", + "[948]\tvalid_0's rmse: 0.0258872\n", + "[949]\tvalid_0's rmse: 0.0258872\n", + "[950]\tvalid_0's rmse: 0.0258866\n", + "[951]\tvalid_0's rmse: 0.0258888\n", + "[952]\tvalid_0's rmse: 0.0258892\n", + "[953]\tvalid_0's rmse: 0.0258835\n", + "[954]\tvalid_0's rmse: 0.0258817\n", + "[955]\tvalid_0's rmse: 0.0258817\n", + "[956]\tvalid_0's rmse: 0.0258786\n", + "[957]\tvalid_0's rmse: 0.0258788\n", + "[958]\tvalid_0's rmse: 0.0258788\n", + "[959]\tvalid_0's rmse: 0.0258798\n", + "[960]\tvalid_0's rmse: 0.0258797\n", + "[961]\tvalid_0's rmse: 0.0258797\n", + "[962]\tvalid_0's rmse: 0.0258776\n", + "[963]\tvalid_0's rmse: 0.0258773\n", + "[964]\tvalid_0's rmse: 0.025877\n", + "[965]\tvalid_0's rmse: 0.0258773\n", + "[966]\tvalid_0's rmse: 0.025879\n", + "[967]\tvalid_0's rmse: 0.0258802\n", + "[968]\tvalid_0's rmse: 0.0258794\n", + "[969]\tvalid_0's rmse: 0.02588\n", + "[970]\tvalid_0's rmse: 0.0258797\n", + "[971]\tvalid_0's rmse: 0.0258782\n", + "[972]\tvalid_0's rmse: 0.0258827\n", + "[973]\tvalid_0's rmse: 0.0258842\n", + "[974]\tvalid_0's rmse: 0.0258837\n", + "[975]\tvalid_0's rmse: 0.0258827\n", + "[976]\tvalid_0's rmse: 0.0258818\n", + "[977]\tvalid_0's rmse: 0.0258811\n", + "[978]\tvalid_0's rmse: 0.0258813\n", + "[979]\tvalid_0's rmse: 0.0258813\n", + "[980]\tvalid_0's rmse: 0.0258805\n", + "[981]\tvalid_0's rmse: 0.0258805\n", + "[982]\tvalid_0's rmse: 0.0258791\n", + "[983]\tvalid_0's rmse: 0.0258764\n", + "[984]\tvalid_0's rmse: 0.0258765\n", + "[985]\tvalid_0's rmse: 0.0258748\n", + "[986]\tvalid_0's rmse: 0.025877\n", + "[987]\tvalid_0's rmse: 0.025878\n", + "[988]\tvalid_0's rmse: 0.0258776\n", + "[989]\tvalid_0's rmse: 0.0258761\n", + "[990]\tvalid_0's rmse: 0.0258762\n", + "[991]\tvalid_0's rmse: 0.0258591\n", + "[992]\tvalid_0's rmse: 0.0258595\n", + "[993]\tvalid_0's rmse: 0.0258594\n", + "[994]\tvalid_0's rmse: 0.0258605\n", + "[995]\tvalid_0's rmse: 0.02586\n", + "[996]\tvalid_0's rmse: 0.0258582\n", + "[997]\tvalid_0's rmse: 0.0258576\n", + "[998]\tvalid_0's rmse: 0.0258556\n", + "[999]\tvalid_0's rmse: 0.0258562\n", + "[1000]\tvalid_0's rmse: 0.0258543\n", + "[1001]\tvalid_0's rmse: 0.0258523\n", + "[1002]\tvalid_0's rmse: 0.0258534\n", + "[1003]\tvalid_0's rmse: 0.0258537\n", + "[1004]\tvalid_0's rmse: 0.0258546\n", + "[1005]\tvalid_0's rmse: 0.0258533\n", + "[1006]\tvalid_0's rmse: 0.0258519\n", + "[1007]\tvalid_0's rmse: 0.0258508\n", + "[1008]\tvalid_0's rmse: 0.0258508\n", + "[1009]\tvalid_0's rmse: 0.0258509\n", + "[1010]\tvalid_0's rmse: 0.0258469\n", + "[1011]\tvalid_0's rmse: 0.025851\n", + "[1012]\tvalid_0's rmse: 0.0258512\n", + "[1013]\tvalid_0's rmse: 0.0258474\n", + "[1014]\tvalid_0's rmse: 0.0258468\n", + "[1015]\tvalid_0's rmse: 0.0258432\n", + "[1016]\tvalid_0's rmse: 0.0258409\n", + "[1017]\tvalid_0's rmse: 0.0258283\n", + "[1018]\tvalid_0's rmse: 0.0258284\n", + "[1019]\tvalid_0's rmse: 0.0258254\n", + "[1020]\tvalid_0's rmse: 0.0258244\n", + "[1021]\tvalid_0's rmse: 0.0258246\n", + "[1022]\tvalid_0's rmse: 0.0258249\n", + "[1023]\tvalid_0's rmse: 0.0258246\n", + "[1024]\tvalid_0's rmse: 0.0258215\n", + "[1025]\tvalid_0's rmse: 0.0258211\n", + "[1026]\tvalid_0's rmse: 0.0258215\n", + "[1027]\tvalid_0's rmse: 0.0258213\n", + "[1028]\tvalid_0's rmse: 0.0258215\n", + "[1029]\tvalid_0's rmse: 0.0258233\n", + "[1030]\tvalid_0's rmse: 0.0258232\n", + "[1031]\tvalid_0's rmse: 0.0258233\n", + "[1032]\tvalid_0's rmse: 0.0258191\n", + "[1033]\tvalid_0's rmse: 0.0258196\n", + "[1034]\tvalid_0's rmse: 0.0258169\n", + "[1035]\tvalid_0's rmse: 0.025816\n", + "[1036]\tvalid_0's rmse: 0.0258137\n", + "[1037]\tvalid_0's rmse: 0.0258143\n", + "[1038]\tvalid_0's rmse: 0.0258121\n", + "[1039]\tvalid_0's rmse: 0.0258055\n", + "[1040]\tvalid_0's rmse: 0.0258055\n", + "[1041]\tvalid_0's rmse: 0.0258079\n", + "[1042]\tvalid_0's rmse: 0.0258097\n", + "[1043]\tvalid_0's rmse: 0.0258097\n", + "[1044]\tvalid_0's rmse: 0.0258109\n", + "[1045]\tvalid_0's rmse: 0.0258118\n", + "[1046]\tvalid_0's rmse: 0.0258121\n", + "[1047]\tvalid_0's rmse: 0.0258112\n", + "[1048]\tvalid_0's rmse: 0.0258103\n", + "[1049]\tvalid_0's rmse: 0.0258102\n", + "[1050]\tvalid_0's rmse: 0.0258113\n", + "[1051]\tvalid_0's rmse: 0.0258119\n", + "[1052]\tvalid_0's rmse: 0.0258115\n", + "[1053]\tvalid_0's rmse: 0.0258116\n", + "[1054]\tvalid_0's rmse: 0.0258114\n", + "[1055]\tvalid_0's rmse: 0.0258098\n", + "[1056]\tvalid_0's rmse: 0.0258097\n", + "[1057]\tvalid_0's rmse: 0.0258085\n", + "[1058]\tvalid_0's rmse: 0.0258088\n", + "[1059]\tvalid_0's rmse: 0.0258058\n", + "[1060]\tvalid_0's rmse: 0.0258033\n", + "[1061]\tvalid_0's rmse: 0.0257999\n", + "[1062]\tvalid_0's rmse: 0.025795\n", + "[1063]\tvalid_0's rmse: 0.0257936\n", + "[1064]\tvalid_0's rmse: 0.0257928\n", + "[1065]\tvalid_0's rmse: 0.025793\n", + "[1066]\tvalid_0's rmse: 0.0257934\n", + "[1067]\tvalid_0's rmse: 0.0257928\n", + "[1068]\tvalid_0's rmse: 0.0257786\n", + "[1069]\tvalid_0's rmse: 0.0257783\n", + "[1070]\tvalid_0's rmse: 0.0257778\n", + "[1071]\tvalid_0's rmse: 0.025777\n", + "[1072]\tvalid_0's rmse: 0.0257782\n", + "[1073]\tvalid_0's rmse: 0.0257767\n", + "[1074]\tvalid_0's rmse: 0.0257763\n", + "[1075]\tvalid_0's rmse: 0.0257764\n", + "[1076]\tvalid_0's rmse: 0.025776\n", + "[1077]\tvalid_0's rmse: 0.0257776\n", + "[1078]\tvalid_0's rmse: 0.0257782\n", + "[1079]\tvalid_0's rmse: 0.0257782\n", + "[1080]\tvalid_0's rmse: 0.0257781\n", + "[1081]\tvalid_0's rmse: 0.025776\n", + "[1082]\tvalid_0's rmse: 0.0257761\n", + "[1083]\tvalid_0's rmse: 0.0257762\n", + "[1084]\tvalid_0's rmse: 0.0257773\n", + "[1085]\tvalid_0's rmse: 0.0257783\n", + "[1086]\tvalid_0's rmse: 0.0257785\n", + "[1087]\tvalid_0's rmse: 0.0257788\n", + "[1088]\tvalid_0's rmse: 0.0257792\n", + "[1089]\tvalid_0's rmse: 0.02578\n", + "[1090]\tvalid_0's rmse: 0.0257788\n", + "[1091]\tvalid_0's rmse: 0.0257776\n", + "[1092]\tvalid_0's rmse: 0.0257795\n", + "[1093]\tvalid_0's rmse: 0.0257788\n", + "[1094]\tvalid_0's rmse: 0.0257782\n", + "[1095]\tvalid_0's rmse: 0.025778\n", + "[1096]\tvalid_0's rmse: 0.0257811\n", + "[1097]\tvalid_0's rmse: 0.0257814\n", + "[1098]\tvalid_0's rmse: 0.0257792\n", + "[1099]\tvalid_0's rmse: 0.0257788\n", + "[1100]\tvalid_0's rmse: 0.0257798\n", + "[1101]\tvalid_0's rmse: 0.0257804\n", + "[1102]\tvalid_0's rmse: 0.0257804\n", + "[1103]\tvalid_0's rmse: 0.0257781\n", + "[1104]\tvalid_0's rmse: 0.0257786\n", + "[1105]\tvalid_0's rmse: 0.0257794\n", + "[1106]\tvalid_0's rmse: 0.0257793\n", + "[1107]\tvalid_0's rmse: 0.0257795\n", + "[1108]\tvalid_0's rmse: 0.0257792\n", + "[1109]\tvalid_0's rmse: 0.0257754\n", + "[1110]\tvalid_0's rmse: 0.0257772\n", + "[1111]\tvalid_0's rmse: 0.0257766\n", + "[1112]\tvalid_0's rmse: 0.0257761\n", + "[1113]\tvalid_0's rmse: 0.0257759\n", + "[1114]\tvalid_0's rmse: 0.0257754\n", + "[1115]\tvalid_0's rmse: 0.0257751\n", + "[1116]\tvalid_0's rmse: 0.0257731\n", + "[1117]\tvalid_0's rmse: 0.0257728\n", + "[1118]\tvalid_0's rmse: 0.0257725\n", + "[1119]\tvalid_0's rmse: 0.025771\n", + "[1120]\tvalid_0's rmse: 0.0257698\n", + "[1121]\tvalid_0's rmse: 0.0257699\n", + "[1122]\tvalid_0's rmse: 0.0257698\n", + "[1123]\tvalid_0's rmse: 0.0257685\n", + "[1124]\tvalid_0's rmse: 0.0257678\n", + "[1125]\tvalid_0's rmse: 0.0257679\n", + "[1126]\tvalid_0's rmse: 0.0257667\n", + "[1127]\tvalid_0's rmse: 0.0257669\n", + "[1128]\tvalid_0's rmse: 0.0257648\n", + "[1129]\tvalid_0's rmse: 0.0257647\n", + "[1130]\tvalid_0's rmse: 0.0257651\n", + "[1131]\tvalid_0's rmse: 0.0257653\n", + "[1132]\tvalid_0's rmse: 0.0257657\n", + "[1133]\tvalid_0's rmse: 0.0257652\n", + "[1134]\tvalid_0's rmse: 0.0257653\n", + "[1135]\tvalid_0's rmse: 0.0257593\n", + "[1136]\tvalid_0's rmse: 0.0257585\n", + "[1137]\tvalid_0's rmse: 0.0257583\n", + "[1138]\tvalid_0's rmse: 0.0257575\n", + "[1139]\tvalid_0's rmse: 0.0257571\n", + "[1140]\tvalid_0's rmse: 0.0257562\n", + "[1141]\tvalid_0's rmse: 0.0257562\n", + "[1142]\tvalid_0's rmse: 0.0257561\n", + "[1143]\tvalid_0's rmse: 0.025755\n", + "[1144]\tvalid_0's rmse: 0.025754\n", + "[1145]\tvalid_0's rmse: 0.0257534\n", + "[1146]\tvalid_0's rmse: 0.0257535\n", + "[1147]\tvalid_0's rmse: 0.0257503\n", + "[1148]\tvalid_0's rmse: 0.0257519\n", + "[1149]\tvalid_0's rmse: 0.0257486\n", + "[1150]\tvalid_0's rmse: 0.0257485\n", + "[1151]\tvalid_0's rmse: 0.0257492\n", + "[1152]\tvalid_0's rmse: 0.0257531\n", + "[1153]\tvalid_0's rmse: 0.0257529\n", + "[1154]\tvalid_0's rmse: 0.0257521\n", + "[1155]\tvalid_0's rmse: 0.0257517\n", + "[1156]\tvalid_0's rmse: 0.0257545\n", + "[1157]\tvalid_0's rmse: 0.0257556\n", + "[1158]\tvalid_0's rmse: 0.0257559\n", + "[1159]\tvalid_0's rmse: 0.0257578\n", + "[1160]\tvalid_0's rmse: 0.0257567\n", + "[1161]\tvalid_0's rmse: 0.0257569\n", + "[1162]\tvalid_0's rmse: 0.0257559\n", + "[1163]\tvalid_0's rmse: 0.0257577\n", + "[1164]\tvalid_0's rmse: 0.0257551\n", + "[1165]\tvalid_0's rmse: 0.025756\n", + "[1166]\tvalid_0's rmse: 0.0257558\n", + "[1167]\tvalid_0's rmse: 0.0257561\n", + "[1168]\tvalid_0's rmse: 0.0257562\n", + "[1169]\tvalid_0's rmse: 0.0257558\n", + "[1170]\tvalid_0's rmse: 0.0257527\n", + "[1171]\tvalid_0's rmse: 0.0257479\n", + "[1172]\tvalid_0's rmse: 0.0257481\n", + "[1173]\tvalid_0's rmse: 0.0257445\n", + "[1174]\tvalid_0's rmse: 0.0257442\n", + "[1175]\tvalid_0's rmse: 0.0257454\n", + "[1176]\tvalid_0's rmse: 0.0257446\n", + "[1177]\tvalid_0's rmse: 0.0257455\n", + "[1178]\tvalid_0's rmse: 0.0257465\n", + "[1179]\tvalid_0's rmse: 0.0257483\n", + "[1180]\tvalid_0's rmse: 0.0257494\n", + "[1181]\tvalid_0's rmse: 0.025749\n", + "[1182]\tvalid_0's rmse: 0.0257492\n", + "[1183]\tvalid_0's rmse: 0.0257497\n", + "[1184]\tvalid_0's rmse: 0.02575\n", + "[1185]\tvalid_0's rmse: 0.0257441\n", + "[1186]\tvalid_0's rmse: 0.0257412\n", + "[1187]\tvalid_0's rmse: 0.0257376\n", + "[1188]\tvalid_0's rmse: 0.025734\n", + "[1189]\tvalid_0's rmse: 0.0257333\n", + "[1190]\tvalid_0's rmse: 0.0257326\n", + "[1191]\tvalid_0's rmse: 0.0257325\n", + "[1192]\tvalid_0's rmse: 0.0257347\n", + "[1193]\tvalid_0's rmse: 0.0257189\n", + "[1194]\tvalid_0's rmse: 0.0257085\n", + "[1195]\tvalid_0's rmse: 0.0257073\n", + "[1196]\tvalid_0's rmse: 0.025707\n", + "[1197]\tvalid_0's rmse: 0.0257055\n", + "[1198]\tvalid_0's rmse: 0.0257056\n", + "[1199]\tvalid_0's rmse: 0.0257043\n", + "[1200]\tvalid_0's rmse: 0.0257063\n", + "[1201]\tvalid_0's rmse: 0.0257056\n", + "[1202]\tvalid_0's rmse: 0.0257059\n", + "[1203]\tvalid_0's rmse: 0.0257041\n", + "[1204]\tvalid_0's rmse: 0.0257018\n", + "[1205]\tvalid_0's rmse: 0.025702\n", + "[1206]\tvalid_0's rmse: 0.0257017\n", + "[1207]\tvalid_0's rmse: 0.0256966\n", + "[1208]\tvalid_0's rmse: 0.0256931\n", + "[1209]\tvalid_0's rmse: 0.0256931\n", + "[1210]\tvalid_0's rmse: 0.025693\n", + "[1211]\tvalid_0's rmse: 0.0256934\n", + "[1212]\tvalid_0's rmse: 0.0256969\n", + "[1213]\tvalid_0's rmse: 0.0256973\n", + "[1214]\tvalid_0's rmse: 0.0256982\n", + "[1215]\tvalid_0's rmse: 0.0256965\n", + "[1216]\tvalid_0's rmse: 0.0256955\n", + "[1217]\tvalid_0's rmse: 0.0256956\n", + "[1218]\tvalid_0's rmse: 0.0256956\n", + "[1219]\tvalid_0's rmse: 0.0256943\n", + "[1220]\tvalid_0's rmse: 0.0256932\n", + "[1221]\tvalid_0's rmse: 0.0256944\n", + "[1222]\tvalid_0's rmse: 0.0256935\n", + "[1223]\tvalid_0's rmse: 0.0256947\n", + "[1224]\tvalid_0's rmse: 0.0256951\n", + "[1225]\tvalid_0's rmse: 0.0256953\n", + "[1226]\tvalid_0's rmse: 0.0256967\n", + "[1227]\tvalid_0's rmse: 0.0256974\n", + "[1228]\tvalid_0's rmse: 0.0256971\n", + "[1229]\tvalid_0's rmse: 0.025697\n", + "[1230]\tvalid_0's rmse: 0.0256973\n", + "[1231]\tvalid_0's rmse: 0.0256971\n", + "[1232]\tvalid_0's rmse: 0.0256976\n", + "[1233]\tvalid_0's rmse: 0.0256976\n", + "[1234]\tvalid_0's rmse: 0.025696\n", + "[1235]\tvalid_0's rmse: 0.0256965\n", + "[1236]\tvalid_0's rmse: 0.0256961\n", + "[1237]\tvalid_0's rmse: 0.0256962\n", + "[1238]\tvalid_0's rmse: 0.0256996\n", + "[1239]\tvalid_0's rmse: 0.0257003\n", + "[1240]\tvalid_0's rmse: 0.0257023\n", + "[1241]\tvalid_0's rmse: 0.0257018\n", + "[1242]\tvalid_0's rmse: 0.0257016\n", + "[1243]\tvalid_0's rmse: 0.0257023\n", + "[1244]\tvalid_0's rmse: 0.0257013\n", + "[1245]\tvalid_0's rmse: 0.0256968\n", + "[1246]\tvalid_0's rmse: 0.0256967\n", + "[1247]\tvalid_0's rmse: 0.0256935\n", + "[1248]\tvalid_0's rmse: 0.0256932\n", + "[1249]\tvalid_0's rmse: 0.0256959\n", + "[1250]\tvalid_0's rmse: 0.025695\n", + "[1251]\tvalid_0's rmse: 0.025695\n", + "[1252]\tvalid_0's rmse: 0.0256954\n", + "[1253]\tvalid_0's rmse: 0.0256932\n", + "[1254]\tvalid_0's rmse: 0.0256933\n", + "[1255]\tvalid_0's rmse: 0.0256942\n", + "[1256]\tvalid_0's rmse: 0.0256929\n", + "[1257]\tvalid_0's rmse: 0.0256918\n", + "[1258]\tvalid_0's rmse: 0.0256916\n", + "[1259]\tvalid_0's rmse: 0.0256913\n", + "[1260]\tvalid_0's rmse: 0.0256924\n", + "[1261]\tvalid_0's rmse: 0.0256909\n", + "[1262]\tvalid_0's rmse: 0.0256907\n", + "[1263]\tvalid_0's rmse: 0.0256914\n", + "[1264]\tvalid_0's rmse: 0.0256819\n", + "[1265]\tvalid_0's rmse: 0.0256823\n", + "[1266]\tvalid_0's rmse: 0.0256822\n", + "[1267]\tvalid_0's rmse: 0.0256828\n", + "[1268]\tvalid_0's rmse: 0.025683\n", + "[1269]\tvalid_0's rmse: 0.0256841\n", + "[1270]\tvalid_0's rmse: 0.0256839\n", + "[1271]\tvalid_0's rmse: 0.0256837\n", + "[1272]\tvalid_0's rmse: 0.0256835\n", + "[1273]\tvalid_0's rmse: 0.0256819\n", + "[1274]\tvalid_0's rmse: 0.0256814\n", + "[1275]\tvalid_0's rmse: 0.0256859\n", + "[1276]\tvalid_0's rmse: 0.0256845\n", + "[1277]\tvalid_0's rmse: 0.0256854\n", + "[1278]\tvalid_0's rmse: 0.0256899\n", + "[1279]\tvalid_0's rmse: 0.0256912\n", + "[1280]\tvalid_0's rmse: 0.0256951\n", + "[1281]\tvalid_0's rmse: 0.0256952\n", + "[1282]\tvalid_0's rmse: 0.0256956\n", + "[1283]\tvalid_0's rmse: 0.0256958\n", + "[1284]\tvalid_0's rmse: 0.0256956\n", + "[1285]\tvalid_0's rmse: 0.025695\n", + "[1286]\tvalid_0's rmse: 0.0256955\n", + "[1287]\tvalid_0's rmse: 0.0256955\n", + "[1288]\tvalid_0's rmse: 0.0256966\n", + "[1289]\tvalid_0's rmse: 0.0256969\n", + "[1290]\tvalid_0's rmse: 0.0256961\n", + "[1291]\tvalid_0's rmse: 0.0256955\n", + "[1292]\tvalid_0's rmse: 0.025695\n", + "[1293]\tvalid_0's rmse: 0.0256959\n", + "[1294]\tvalid_0's rmse: 0.0256953\n", + "[1295]\tvalid_0's rmse: 0.0256943\n", + "[1296]\tvalid_0's rmse: 0.0256935\n", + "[1297]\tvalid_0's rmse: 0.0256928\n", + "[1298]\tvalid_0's rmse: 0.0256922\n", + "[1299]\tvalid_0's rmse: 0.0256921\n", + "[1300]\tvalid_0's rmse: 0.0256929\n", + "[1301]\tvalid_0's rmse: 0.0256929\n", + "[1302]\tvalid_0's rmse: 0.0256922\n", + "[1303]\tvalid_0's rmse: 0.0256922\n", + "[1304]\tvalid_0's rmse: 0.0256903\n", + "[1305]\tvalid_0's rmse: 0.0256902\n", + "[1306]\tvalid_0's rmse: 0.025689\n", + "[1307]\tvalid_0's rmse: 0.0256867\n", + "[1308]\tvalid_0's rmse: 0.025687\n", + "[1309]\tvalid_0's rmse: 0.0256871\n", + "[1310]\tvalid_0's rmse: 0.0256871\n", + "[1311]\tvalid_0's rmse: 0.0256937\n", + "[1312]\tvalid_0's rmse: 0.0256927\n", + "[1313]\tvalid_0's rmse: 0.0256883\n", + "[1314]\tvalid_0's rmse: 0.0256881\n", + "[1315]\tvalid_0's rmse: 0.0256876\n", + "[1316]\tvalid_0's rmse: 0.0256871\n", + "[1317]\tvalid_0's rmse: 0.025685\n", + "[1318]\tvalid_0's rmse: 0.0256843\n", + "[1319]\tvalid_0's rmse: 0.0256852\n", + "[1320]\tvalid_0's rmse: 0.0256852\n", + "[1321]\tvalid_0's rmse: 0.0256852\n", + "[1322]\tvalid_0's rmse: 0.0256842\n", + "[1323]\tvalid_0's rmse: 0.0256825\n", + "[1324]\tvalid_0's rmse: 0.0256824\n", + "[1325]\tvalid_0's rmse: 0.0256792\n", + "[1326]\tvalid_0's rmse: 0.0256781\n", + "[1327]\tvalid_0's rmse: 0.0256776\n", + "[1328]\tvalid_0's rmse: 0.0256776\n", + "[1329]\tvalid_0's rmse: 0.0256782\n", + "[1330]\tvalid_0's rmse: 0.0256781\n", + "[1331]\tvalid_0's rmse: 0.0256777\n", + "[1332]\tvalid_0's rmse: 0.0256777\n", + "[1333]\tvalid_0's rmse: 0.0256772\n", + "[1334]\tvalid_0's rmse: 0.025677\n", + "[1335]\tvalid_0's rmse: 0.0256771\n", + "[1336]\tvalid_0's rmse: 0.0256768\n", + "[1337]\tvalid_0's rmse: 0.0256775\n", + "[1338]\tvalid_0's rmse: 0.0256776\n", + "[1339]\tvalid_0's rmse: 0.0256774\n", + "[1340]\tvalid_0's rmse: 0.0256753\n", + "[1341]\tvalid_0's rmse: 0.0256751\n", + "[1342]\tvalid_0's rmse: 0.0256747\n", + "[1343]\tvalid_0's rmse: 0.0256749\n", + "[1344]\tvalid_0's rmse: 0.0256746\n", + "[1345]\tvalid_0's rmse: 0.0256722\n", + "[1346]\tvalid_0's rmse: 0.0256697\n", + "[1347]\tvalid_0's rmse: 0.0256704\n", + "[1348]\tvalid_0's rmse: 0.0256681\n", + "[1349]\tvalid_0's rmse: 0.025668\n", + "[1350]\tvalid_0's rmse: 0.0256667\n", + "[1351]\tvalid_0's rmse: 0.0256684\n", + "[1352]\tvalid_0's rmse: 0.0256685\n", + "[1353]\tvalid_0's rmse: 0.0256673\n", + "[1354]\tvalid_0's rmse: 0.0256673\n", + "[1355]\tvalid_0's rmse: 0.025667\n", + "[1356]\tvalid_0's rmse: 0.0256675\n", + "[1357]\tvalid_0's rmse: 0.0256686\n", + "[1358]\tvalid_0's rmse: 0.0256681\n", + "[1359]\tvalid_0's rmse: 0.0256681\n", + "[1360]\tvalid_0's rmse: 0.0256682\n", + "[1361]\tvalid_0's rmse: 0.025668\n", + "[1362]\tvalid_0's rmse: 0.0256671\n", + "[1363]\tvalid_0's rmse: 0.0256675\n", + "[1364]\tvalid_0's rmse: 0.0256638\n", + "[1365]\tvalid_0's rmse: 0.0256638\n", + "[1366]\tvalid_0's rmse: 0.0256526\n", + "[1367]\tvalid_0's rmse: 0.0256534\n", + "[1368]\tvalid_0's rmse: 0.0256534\n", + "[1369]\tvalid_0's rmse: 0.025653\n", + "[1370]\tvalid_0's rmse: 0.0256528\n", + "[1371]\tvalid_0's rmse: 0.0256532\n", + "[1372]\tvalid_0's rmse: 0.025647\n", + "[1373]\tvalid_0's rmse: 0.0256454\n", + "[1374]\tvalid_0's rmse: 0.0256457\n", + "[1375]\tvalid_0's rmse: 0.0256426\n", + "[1376]\tvalid_0's rmse: 0.0256425\n", + "[1377]\tvalid_0's rmse: 0.0256441\n", + "[1378]\tvalid_0's rmse: 0.0256431\n", + "[1379]\tvalid_0's rmse: 0.0256452\n", + "[1380]\tvalid_0's rmse: 0.0256455\n", + "[1381]\tvalid_0's rmse: 0.0256454\n", + "[1382]\tvalid_0's rmse: 0.0256441\n", + "[1383]\tvalid_0's rmse: 0.0256446\n", + "[1384]\tvalid_0's rmse: 0.0256443\n", + "[1385]\tvalid_0's rmse: 0.0256444\n", + "[1386]\tvalid_0's rmse: 0.0256445\n", + "[1387]\tvalid_0's rmse: 0.0256436\n", + "[1388]\tvalid_0's rmse: 0.0256418\n", + "[1389]\tvalid_0's rmse: 0.0256422\n", + "[1390]\tvalid_0's rmse: 0.0256363\n", + "[1391]\tvalid_0's rmse: 0.0256359\n", + "[1392]\tvalid_0's rmse: 0.0256348\n", + "[1393]\tvalid_0's rmse: 0.0256345\n", + "[1394]\tvalid_0's rmse: 0.0256347\n", + "[1395]\tvalid_0's rmse: 0.025635\n", + "[1396]\tvalid_0's rmse: 0.0256333\n", + "[1397]\tvalid_0's rmse: 0.025633\n", + "[1398]\tvalid_0's rmse: 0.025633\n", + "[1399]\tvalid_0's rmse: 0.0256312\n", + "[1400]\tvalid_0's rmse: 0.025631\n", + "[1401]\tvalid_0's rmse: 0.025631\n", + "[1402]\tvalid_0's rmse: 0.0256313\n", + "[1403]\tvalid_0's rmse: 0.025627\n", + "[1404]\tvalid_0's rmse: 0.0256275\n", + "[1405]\tvalid_0's rmse: 0.0256277\n", + "[1406]\tvalid_0's rmse: 0.0256274\n", + "[1407]\tvalid_0's rmse: 0.0256277\n", + "[1408]\tvalid_0's rmse: 0.0256266\n", + "[1409]\tvalid_0's rmse: 0.025626\n", + "[1410]\tvalid_0's rmse: 0.0256258\n", + "[1411]\tvalid_0's rmse: 0.0256246\n", + "[1412]\tvalid_0's rmse: 0.0256245\n", + "[1413]\tvalid_0's rmse: 0.0256243\n", + "[1414]\tvalid_0's rmse: 0.0256237\n", + "[1415]\tvalid_0's rmse: 0.0256244\n", + "[1416]\tvalid_0's rmse: 0.0256238\n", + "[1417]\tvalid_0's rmse: 0.0256171\n", + "[1418]\tvalid_0's rmse: 0.0256115\n", + "[1419]\tvalid_0's rmse: 0.0256106\n", + "[1420]\tvalid_0's rmse: 0.0256105\n", + "[1421]\tvalid_0's rmse: 0.02561\n", + "[1422]\tvalid_0's rmse: 0.0256113\n", + "[1423]\tvalid_0's rmse: 0.0256111\n", + "[1424]\tvalid_0's rmse: 0.025611\n", + "[1425]\tvalid_0's rmse: 0.0256113\n", + "[1426]\tvalid_0's rmse: 0.0256108\n", + "[1427]\tvalid_0's rmse: 0.0256105\n", + "[1428]\tvalid_0's rmse: 0.0256095\n", + "[1429]\tvalid_0's rmse: 0.0256065\n", + "[1430]\tvalid_0's rmse: 0.0256062\n", + "[1431]\tvalid_0's rmse: 0.025607\n", + "[1432]\tvalid_0's rmse: 0.0256074\n", + "[1433]\tvalid_0's rmse: 0.025607\n", + "[1434]\tvalid_0's rmse: 0.0256081\n", + "[1435]\tvalid_0's rmse: 0.0256045\n", + "[1436]\tvalid_0's rmse: 0.0256057\n", + "[1437]\tvalid_0's rmse: 0.0256067\n", + "[1438]\tvalid_0's rmse: 0.0256063\n", + "[1439]\tvalid_0's rmse: 0.0256066\n", + "[1440]\tvalid_0's rmse: 0.0256061\n", + "[1441]\tvalid_0's rmse: 0.025605\n", + "[1442]\tvalid_0's rmse: 0.0256045\n", + "[1443]\tvalid_0's rmse: 0.0256032\n", + "[1444]\tvalid_0's rmse: 0.0256063\n", + "[1445]\tvalid_0's rmse: 0.0256076\n", + "[1446]\tvalid_0's rmse: 0.025608\n", + "[1447]\tvalid_0's rmse: 0.0256077\n", + "[1448]\tvalid_0's rmse: 0.0256093\n", + "[1449]\tvalid_0's rmse: 0.0256077\n", + "[1450]\tvalid_0's rmse: 0.0256074\n", + "[1451]\tvalid_0's rmse: 0.0256078\n", + "[1452]\tvalid_0's rmse: 0.025608\n", + "[1453]\tvalid_0's rmse: 0.0256081\n", + "[1454]\tvalid_0's rmse: 0.0256081\n", + "[1455]\tvalid_0's rmse: 0.0256079\n", + "[1456]\tvalid_0's rmse: 0.0256087\n", + "[1457]\tvalid_0's rmse: 0.0256062\n", + "[1458]\tvalid_0's rmse: 0.025602\n", + "[1459]\tvalid_0's rmse: 0.0256021\n", + "[1460]\tvalid_0's rmse: 0.0256041\n", + "[1461]\tvalid_0's rmse: 0.0256042\n", + "[1462]\tvalid_0's rmse: 0.025605\n", + "[1463]\tvalid_0's rmse: 0.0256056\n", + "[1464]\tvalid_0's rmse: 0.0256053\n", + "[1465]\tvalid_0's rmse: 0.0256077\n", + "[1466]\tvalid_0's rmse: 0.0256076\n", + "[1467]\tvalid_0's rmse: 0.0256083\n", + "[1468]\tvalid_0's rmse: 0.0256082\n", + "[1469]\tvalid_0's rmse: 0.0256074\n", + "[1470]\tvalid_0's rmse: 0.0256074\n", + "[1471]\tvalid_0's rmse: 0.025608\n", + "[1472]\tvalid_0's rmse: 0.0256081\n", + "[1473]\tvalid_0's rmse: 0.0256084\n", + "[1474]\tvalid_0's rmse: 0.0256081\n", + "[1475]\tvalid_0's rmse: 0.0256084\n", + "[1476]\tvalid_0's rmse: 0.0256083\n", + "[1477]\tvalid_0's rmse: 0.0256086\n", + "[1478]\tvalid_0's rmse: 0.0256084\n", + "[1479]\tvalid_0's rmse: 0.025608\n", + "[1480]\tvalid_0's rmse: 0.02561\n", + "[1481]\tvalid_0's rmse: 0.0256062\n", + "[1482]\tvalid_0's rmse: 0.0256062\n", + "[1483]\tvalid_0's rmse: 0.0256062\n", + "[1484]\tvalid_0's rmse: 0.0256056\n", + "[1485]\tvalid_0's rmse: 0.0256048\n", + "[1486]\tvalid_0's rmse: 0.0256054\n", + "[1487]\tvalid_0's rmse: 0.025605\n", + "[1488]\tvalid_0's rmse: 0.0256026\n", + "[1489]\tvalid_0's rmse: 0.0255999\n", + "[1490]\tvalid_0's rmse: 0.0255993\n", + "[1491]\tvalid_0's rmse: 0.0255995\n", + "[1492]\tvalid_0's rmse: 0.0256009\n", + "[1493]\tvalid_0's rmse: 0.0256006\n", + "[1494]\tvalid_0's rmse: 0.0256027\n", + "[1495]\tvalid_0's rmse: 0.0256021\n", + "[1496]\tvalid_0's rmse: 0.0256017\n", + "[1497]\tvalid_0's rmse: 0.0256016\n", + "[1498]\tvalid_0's rmse: 0.0256018\n", + "[1499]\tvalid_0's rmse: 0.0256011\n", + "[1500]\tvalid_0's rmse: 0.025602\n", + "[1501]\tvalid_0's rmse: 0.0256019\n", + "[1502]\tvalid_0's rmse: 0.025602\n", + "[1503]\tvalid_0's rmse: 0.0256027\n", + "[1504]\tvalid_0's rmse: 0.0255921\n", + "[1505]\tvalid_0's rmse: 0.0255919\n", + "[1506]\tvalid_0's rmse: 0.025592\n", + "[1507]\tvalid_0's rmse: 0.0255918\n", + "[1508]\tvalid_0's rmse: 0.0255914\n", + "[1509]\tvalid_0's rmse: 0.0255913\n", + "[1510]\tvalid_0's rmse: 0.0255907\n", + "[1511]\tvalid_0's rmse: 0.0255905\n", + "[1512]\tvalid_0's rmse: 0.0255883\n", + "[1513]\tvalid_0's rmse: 0.0255877\n", + "[1514]\tvalid_0's rmse: 0.025587\n", + "[1515]\tvalid_0's rmse: 0.0255873\n", + "[1516]\tvalid_0's rmse: 0.025587\n", + "[1517]\tvalid_0's rmse: 0.0255872\n", + "[1518]\tvalid_0's rmse: 0.0255876\n", + "[1519]\tvalid_0's rmse: 0.0255883\n", + "[1520]\tvalid_0's rmse: 0.0255884\n", + "[1521]\tvalid_0's rmse: 0.0255852\n", + "[1522]\tvalid_0's rmse: 0.0255853\n", + "[1523]\tvalid_0's rmse: 0.0255852\n", + "[1524]\tvalid_0's rmse: 0.0255875\n", + "[1525]\tvalid_0's rmse: 0.025588\n", + "[1526]\tvalid_0's rmse: 0.0255894\n", + "[1527]\tvalid_0's rmse: 0.0255891\n", + "[1528]\tvalid_0's rmse: 0.0255891\n", + "[1529]\tvalid_0's rmse: 0.0255892\n", + "[1530]\tvalid_0's rmse: 0.0255908\n", + "[1531]\tvalid_0's rmse: 0.0255902\n", + "[1532]\tvalid_0's rmse: 0.0255903\n", + "[1533]\tvalid_0's rmse: 0.0255905\n", + "[1534]\tvalid_0's rmse: 0.0255906\n", + "[1535]\tvalid_0's rmse: 0.0255913\n", + "[1536]\tvalid_0's rmse: 0.0255906\n", + "[1537]\tvalid_0's rmse: 0.0255919\n", + "[1538]\tvalid_0's rmse: 0.0255919\n", + "[1539]\tvalid_0's rmse: 0.0255936\n", + "[1540]\tvalid_0's rmse: 0.025594\n", + "[1541]\tvalid_0's rmse: 0.0255927\n", + "[1542]\tvalid_0's rmse: 0.0255924\n", + "[1543]\tvalid_0's rmse: 0.0255929\n", + "[1544]\tvalid_0's rmse: 0.0255937\n", + "[1545]\tvalid_0's rmse: 0.0255927\n", + "[1546]\tvalid_0's rmse: 0.025592\n", + "[1547]\tvalid_0's rmse: 0.0255914\n", + "[1548]\tvalid_0's rmse: 0.0255914\n", + "[1549]\tvalid_0's rmse: 0.0255913\n", + "[1550]\tvalid_0's rmse: 0.0255909\n", + "[1551]\tvalid_0's rmse: 0.0255915\n", + "[1552]\tvalid_0's rmse: 0.0255916\n", + "[1553]\tvalid_0's rmse: 0.0255916\n", + "[1554]\tvalid_0's rmse: 0.0255915\n", + "[1555]\tvalid_0's rmse: 0.0255921\n", + "[1556]\tvalid_0's rmse: 0.0255909\n", + "[1557]\tvalid_0's rmse: 0.0255908\n", + "[1558]\tvalid_0's rmse: 0.0255916\n", + "[1559]\tvalid_0's rmse: 0.0255904\n", + "[1560]\tvalid_0's rmse: 0.0255898\n", + "[1561]\tvalid_0's rmse: 0.0255908\n", + "[1562]\tvalid_0's rmse: 0.0255909\n", + "[1563]\tvalid_0's rmse: 0.0255911\n", + "[1564]\tvalid_0's rmse: 0.0255908\n", + "[1565]\tvalid_0's rmse: 0.0255928\n", + "[1566]\tvalid_0's rmse: 0.0255909\n", + "[1567]\tvalid_0's rmse: 0.0255908\n", + "[1568]\tvalid_0's rmse: 0.0255925\n", + "[1569]\tvalid_0's rmse: 0.0255903\n", + "[1570]\tvalid_0's rmse: 0.0255904\n", + "[1571]\tvalid_0's rmse: 0.0255902\n", + "[1572]\tvalid_0's rmse: 0.0255895\n", + "[1573]\tvalid_0's rmse: 0.0255941\n", + "[1574]\tvalid_0's rmse: 0.025596\n", + "[1575]\tvalid_0's rmse: 0.0255966\n", + "[1576]\tvalid_0's rmse: 0.0255966\n", + "[1577]\tvalid_0's rmse: 0.0255965\n", + "[1578]\tvalid_0's rmse: 0.0255957\n", + "[1579]\tvalid_0's rmse: 0.0255949\n", + "[1580]\tvalid_0's rmse: 0.0255931\n", + "[1581]\tvalid_0's rmse: 0.0255936\n", + "[1582]\tvalid_0's rmse: 0.0255936\n", + "[1583]\tvalid_0's rmse: 0.0255941\n", + "[1584]\tvalid_0's rmse: 0.0255942\n", + "[1585]\tvalid_0's rmse: 0.0255976\n", + "[1586]\tvalid_0's rmse: 0.0255974\n", + "[1587]\tvalid_0's rmse: 0.0255956\n", + "[1588]\tvalid_0's rmse: 0.025595\n", + "[1589]\tvalid_0's rmse: 0.0255943\n", + "[1590]\tvalid_0's rmse: 0.0255946\n", + "[1591]\tvalid_0's rmse: 0.0255945\n", + "[1592]\tvalid_0's rmse: 0.0255938\n", + "[1593]\tvalid_0's rmse: 0.0255907\n", + "[1594]\tvalid_0's rmse: 0.0255832\n", + "[1595]\tvalid_0's rmse: 0.0255833\n", + "[1596]\tvalid_0's rmse: 0.0255824\n", + "[1597]\tvalid_0's rmse: 0.025583\n", + "[1598]\tvalid_0's rmse: 0.0255812\n", + "[1599]\tvalid_0's rmse: 0.0255811\n", + "[1600]\tvalid_0's rmse: 0.0255808\n", + "[1601]\tvalid_0's rmse: 0.0255761\n", + "[1602]\tvalid_0's rmse: 0.0255687\n", + "[1603]\tvalid_0's rmse: 0.0255698\n", + "[1604]\tvalid_0's rmse: 0.0255697\n", + "[1605]\tvalid_0's rmse: 0.0255691\n", + "[1606]\tvalid_0's rmse: 0.0255697\n", + "[1607]\tvalid_0's rmse: 0.0255554\n", + "[1608]\tvalid_0's rmse: 0.0255555\n", + "[1609]\tvalid_0's rmse: 0.0255572\n", + "[1610]\tvalid_0's rmse: 0.0255572\n", + "[1611]\tvalid_0's rmse: 0.0255571\n", + "[1612]\tvalid_0's rmse: 0.0255571\n", + "[1613]\tvalid_0's rmse: 0.0255573\n", + "[1614]\tvalid_0's rmse: 0.0255553\n", + "[1615]\tvalid_0's rmse: 0.0255563\n", + "[1616]\tvalid_0's rmse: 0.0255559\n", + "[1617]\tvalid_0's rmse: 0.0255553\n", + "[1618]\tvalid_0's rmse: 0.0255544\n", + "[1619]\tvalid_0's rmse: 0.0255544\n", + "[1620]\tvalid_0's rmse: 0.0255537\n", + "[1621]\tvalid_0's rmse: 0.0255486\n", + "[1622]\tvalid_0's rmse: 0.0255496\n", + "[1623]\tvalid_0's rmse: 0.0255495\n", + "[1624]\tvalid_0's rmse: 0.0255509\n", + "[1625]\tvalid_0's rmse: 0.0255513\n", + "[1626]\tvalid_0's rmse: 0.0255499\n", + "[1627]\tvalid_0's rmse: 0.0255497\n", + "[1628]\tvalid_0's rmse: 0.0255489\n", + "[1629]\tvalid_0's rmse: 0.0255457\n", + "[1630]\tvalid_0's rmse: 0.0255384\n", + "[1631]\tvalid_0's rmse: 0.0255383\n", + "[1632]\tvalid_0's rmse: 0.0255377\n", + "[1633]\tvalid_0's rmse: 0.025538\n", + "[1634]\tvalid_0's rmse: 0.0255383\n", + "[1635]\tvalid_0's rmse: 0.0255381\n", + "[1636]\tvalid_0's rmse: 0.0255379\n", + "[1637]\tvalid_0's rmse: 0.0255386\n", + "[1638]\tvalid_0's rmse: 0.0255391\n", + "[1639]\tvalid_0's rmse: 0.0255386\n", + "[1640]\tvalid_0's rmse: 0.0255322\n", + "[1641]\tvalid_0's rmse: 0.0255328\n", + "[1642]\tvalid_0's rmse: 0.0255273\n", + "[1643]\tvalid_0's rmse: 0.0255264\n", + "[1644]\tvalid_0's rmse: 0.0255262\n", + "[1645]\tvalid_0's rmse: 0.0255239\n", + "[1646]\tvalid_0's rmse: 0.0255234\n", + "[1647]\tvalid_0's rmse: 0.0255245\n", + "[1648]\tvalid_0's rmse: 0.0255188\n", + "[1649]\tvalid_0's rmse: 0.0255174\n", + "[1650]\tvalid_0's rmse: 0.0255231\n", + "[1651]\tvalid_0's rmse: 0.0255231\n", + "[1652]\tvalid_0's rmse: 0.0255237\n", + "[1653]\tvalid_0's rmse: 0.0255217\n", + "[1654]\tvalid_0's rmse: 0.025521\n", + "[1655]\tvalid_0's rmse: 0.0255201\n", + "[1656]\tvalid_0's rmse: 0.02552\n", + "[1657]\tvalid_0's rmse: 0.0255204\n", + "[1658]\tvalid_0's rmse: 0.0255194\n", + "[1659]\tvalid_0's rmse: 0.0255194\n", + "[1660]\tvalid_0's rmse: 0.0255194\n", + "[1661]\tvalid_0's rmse: 0.0255189\n", + "[1662]\tvalid_0's rmse: 0.0255192\n", + "[1663]\tvalid_0's rmse: 0.0255183\n", + "[1664]\tvalid_0's rmse: 0.0255186\n", + "[1665]\tvalid_0's rmse: 0.0255179\n", + "[1666]\tvalid_0's rmse: 0.0255182\n", + "[1667]\tvalid_0's rmse: 0.0255178\n", + "[1668]\tvalid_0's rmse: 0.0255175\n", + "[1669]\tvalid_0's rmse: 0.0255181\n", + "[1670]\tvalid_0's rmse: 0.0255179\n", + "[1671]\tvalid_0's rmse: 0.025517\n", + "[1672]\tvalid_0's rmse: 0.0255169\n", + "[1673]\tvalid_0's rmse: 0.0255012\n", + "[1674]\tvalid_0's rmse: 0.0255018\n", + "[1675]\tvalid_0's rmse: 0.0255017\n", + "[1676]\tvalid_0's rmse: 0.0255032\n", + "[1677]\tvalid_0's rmse: 0.0255028\n", + "[1678]\tvalid_0's rmse: 0.0255035\n", + "[1679]\tvalid_0's rmse: 0.0255038\n", + "[1680]\tvalid_0's rmse: 0.0255043\n", + "[1681]\tvalid_0's rmse: 0.0255043\n", + "[1682]\tvalid_0's rmse: 0.0255052\n", + "[1683]\tvalid_0's rmse: 0.0255043\n", + "[1684]\tvalid_0's rmse: 0.0255045\n", + "[1685]\tvalid_0's rmse: 0.0255044\n", + "[1686]\tvalid_0's rmse: 0.0255039\n", + "[1687]\tvalid_0's rmse: 0.0255027\n", + "[1688]\tvalid_0's rmse: 0.0255026\n", + "[1689]\tvalid_0's rmse: 0.0255028\n", + "[1690]\tvalid_0's rmse: 0.0255036\n", + "[1691]\tvalid_0's rmse: 0.0255024\n", + "[1692]\tvalid_0's rmse: 0.0255021\n", + "[1693]\tvalid_0's rmse: 0.0255018\n", + "[1694]\tvalid_0's rmse: 0.0255018\n", + "[1695]\tvalid_0's rmse: 0.0255012\n", + "[1696]\tvalid_0's rmse: 0.0255006\n", + "[1697]\tvalid_0's rmse: 0.0255006\n", + "[1698]\tvalid_0's rmse: 0.0255005\n", + "[1699]\tvalid_0's rmse: 0.0254974\n", + "[1700]\tvalid_0's rmse: 0.0254964\n", + "[1701]\tvalid_0's rmse: 0.0254971\n", + "[1702]\tvalid_0's rmse: 0.0254974\n", + "[1703]\tvalid_0's rmse: 0.0254974\n", + "[1704]\tvalid_0's rmse: 0.0254945\n", + "[1705]\tvalid_0's rmse: 0.0254948\n", + "[1706]\tvalid_0's rmse: 0.0254947\n", + "[1707]\tvalid_0's rmse: 0.025495\n", + "[1708]\tvalid_0's rmse: 0.0254952\n", + "[1709]\tvalid_0's rmse: 0.025495\n", + "[1710]\tvalid_0's rmse: 0.0254946\n", + "[1711]\tvalid_0's rmse: 0.0254946\n", + "[1712]\tvalid_0's rmse: 0.0254923\n", + "[1713]\tvalid_0's rmse: 0.0254919\n", + "[1714]\tvalid_0's rmse: 0.0254932\n", + "[1715]\tvalid_0's rmse: 0.025493\n", + "[1716]\tvalid_0's rmse: 0.0254935\n", + "[1717]\tvalid_0's rmse: 0.025492\n", + "[1718]\tvalid_0's rmse: 0.0254914\n", + "[1719]\tvalid_0's rmse: 0.0254918\n", + "[1720]\tvalid_0's rmse: 0.0254917\n", + "[1721]\tvalid_0's rmse: 0.0254922\n", + "[1722]\tvalid_0's rmse: 0.0254925\n", + "[1723]\tvalid_0's rmse: 0.0254928\n", + "[1724]\tvalid_0's rmse: 0.0254932\n", + "[1725]\tvalid_0's rmse: 0.0254931\n", + "[1726]\tvalid_0's rmse: 0.0254933\n", + "[1727]\tvalid_0's rmse: 0.0254931\n", + "[1728]\tvalid_0's rmse: 0.0254962\n", + "[1729]\tvalid_0's rmse: 0.0254961\n", + "[1730]\tvalid_0's rmse: 0.0254956\n", + "[1731]\tvalid_0's rmse: 0.025495\n", + "[1732]\tvalid_0's rmse: 0.0254947\n", + "[1733]\tvalid_0's rmse: 0.0254938\n", + "[1734]\tvalid_0's rmse: 0.0254942\n", + "[1735]\tvalid_0's rmse: 0.0254946\n", + "[1736]\tvalid_0's rmse: 0.0254936\n", + "[1737]\tvalid_0's rmse: 0.0254922\n", + "[1738]\tvalid_0's rmse: 0.0254917\n", + "[1739]\tvalid_0's rmse: 0.025492\n", + "[1740]\tvalid_0's rmse: 0.025492\n", + "[1741]\tvalid_0's rmse: 0.0254923\n", + "[1742]\tvalid_0's rmse: 0.0254932\n", + "[1743]\tvalid_0's rmse: 0.0254933\n", + "[1744]\tvalid_0's rmse: 0.0254935\n", + "[1745]\tvalid_0's rmse: 0.0254933\n", + "[1746]\tvalid_0's rmse: 0.0254937\n", + "[1747]\tvalid_0's rmse: 0.0254928\n", + "[1748]\tvalid_0's rmse: 0.0254926\n", + "[1749]\tvalid_0's rmse: 0.0254945\n", + "[1750]\tvalid_0's rmse: 0.0254948\n", + "[1751]\tvalid_0's rmse: 0.025495\n", + "[1752]\tvalid_0's rmse: 0.025487\n", + "[1753]\tvalid_0's rmse: 0.0254868\n", + "[1754]\tvalid_0's rmse: 0.025486\n", + "[1755]\tvalid_0's rmse: 0.0254842\n", + "[1756]\tvalid_0's rmse: 0.0254837\n", + "[1757]\tvalid_0's rmse: 0.025483\n", + "[1758]\tvalid_0's rmse: 0.0254827\n", + "[1759]\tvalid_0's rmse: 0.0254805\n", + "[1760]\tvalid_0's rmse: 0.02548\n", + "[1761]\tvalid_0's rmse: 0.0254799\n", + "[1762]\tvalid_0's rmse: 0.0254799\n", + "[1763]\tvalid_0's rmse: 0.0254794\n", + "[1764]\tvalid_0's rmse: 0.0254783\n", + "[1765]\tvalid_0's rmse: 0.0254772\n", + "[1766]\tvalid_0's rmse: 0.0254773\n", + "[1767]\tvalid_0's rmse: 0.0254773\n", + "[1768]\tvalid_0's rmse: 0.0254767\n", + "[1769]\tvalid_0's rmse: 0.0254775\n", + "[1770]\tvalid_0's rmse: 0.0254774\n", + "[1771]\tvalid_0's rmse: 0.0254775\n", + "[1772]\tvalid_0's rmse: 0.0254769\n", + "[1773]\tvalid_0's rmse: 0.025477\n", + "[1774]\tvalid_0's rmse: 0.0254779\n", + "[1775]\tvalid_0's rmse: 0.025477\n", + "[1776]\tvalid_0's rmse: 0.0254767\n", + "[1777]\tvalid_0's rmse: 0.025474\n", + "[1778]\tvalid_0's rmse: 0.0254756\n", + "[1779]\tvalid_0's rmse: 0.0254761\n", + "[1780]\tvalid_0's rmse: 0.025476\n", + "[1781]\tvalid_0's rmse: 0.0254763\n", + "[1782]\tvalid_0's rmse: 0.0254763\n", + "[1783]\tvalid_0's rmse: 0.0254762\n", + "[1784]\tvalid_0's rmse: 0.0254749\n", + "[1785]\tvalid_0's rmse: 0.025473\n", + "[1786]\tvalid_0's rmse: 0.0254723\n", + "[1787]\tvalid_0's rmse: 0.0254712\n", + "[1788]\tvalid_0's rmse: 0.0254711\n", + "[1789]\tvalid_0's rmse: 0.0254718\n", + "[1790]\tvalid_0's rmse: 0.0254716\n", + "[1791]\tvalid_0's rmse: 0.0254721\n", + "[1792]\tvalid_0's rmse: 0.0254709\n", + "[1793]\tvalid_0's rmse: 0.0254738\n", + "[1794]\tvalid_0's rmse: 0.0254739\n", + "[1795]\tvalid_0's rmse: 0.025474\n", + "[1796]\tvalid_0's rmse: 0.0254719\n", + "[1797]\tvalid_0's rmse: 0.0254719\n", + "[1798]\tvalid_0's rmse: 0.0254734\n", + "[1799]\tvalid_0's rmse: 0.0254738\n", + "[1800]\tvalid_0's rmse: 0.0254739\n", + "[1801]\tvalid_0's rmse: 0.0254722\n", + "[1802]\tvalid_0's rmse: 0.0254725\n", + "[1803]\tvalid_0's rmse: 0.0254716\n", + "[1804]\tvalid_0's rmse: 0.0254717\n", + "[1805]\tvalid_0's rmse: 0.0254718\n", + "[1806]\tvalid_0's rmse: 0.025471\n", + "[1807]\tvalid_0's rmse: 0.0254714\n", + "[1808]\tvalid_0's rmse: 0.0254714\n", + "[1809]\tvalid_0's rmse: 0.0254713\n", + "[1810]\tvalid_0's rmse: 0.0254711\n", + "[1811]\tvalid_0's rmse: 0.0254716\n", + "[1812]\tvalid_0's rmse: 0.025472\n", + "[1813]\tvalid_0's rmse: 0.0254719\n", + "[1814]\tvalid_0's rmse: 0.0254712\n", + "[1815]\tvalid_0's rmse: 0.0254712\n", + "[1816]\tvalid_0's rmse: 0.0254708\n", + "[1817]\tvalid_0's rmse: 0.0254711\n", + "[1818]\tvalid_0's rmse: 0.0254701\n", + "[1819]\tvalid_0's rmse: 0.0254683\n", + "[1820]\tvalid_0's rmse: 0.0254685\n", + "[1821]\tvalid_0's rmse: 0.0254685\n", + "[1822]\tvalid_0's rmse: 0.0254687\n", + "[1823]\tvalid_0's rmse: 0.0254688\n", + "[1824]\tvalid_0's rmse: 0.0254686\n", + "[1825]\tvalid_0's rmse: 0.0254686\n", + "[1826]\tvalid_0's rmse: 0.0254685\n", + "[1827]\tvalid_0's rmse: 0.0254681\n", + "[1828]\tvalid_0's rmse: 0.0254681\n", + "[1829]\tvalid_0's rmse: 0.025468\n", + "[1830]\tvalid_0's rmse: 0.0254683\n", + "[1831]\tvalid_0's rmse: 0.025464\n", + "[1832]\tvalid_0's rmse: 0.0254641\n", + "[1833]\tvalid_0's rmse: 0.0254636\n", + "[1834]\tvalid_0's rmse: 0.0254633\n", + "[1835]\tvalid_0's rmse: 0.0254625\n", + "[1836]\tvalid_0's rmse: 0.0254622\n", + "[1837]\tvalid_0's rmse: 0.0254617\n", + "[1838]\tvalid_0's rmse: 0.0254617\n", + "[1839]\tvalid_0's rmse: 0.0254609\n", + "[1840]\tvalid_0's rmse: 0.025452\n", + "[1841]\tvalid_0's rmse: 0.0254516\n", + "[1842]\tvalid_0's rmse: 0.0254517\n", + "[1843]\tvalid_0's rmse: 0.0254523\n", + "[1844]\tvalid_0's rmse: 0.0254516\n", + "[1845]\tvalid_0's rmse: 0.0254519\n", + "[1846]\tvalid_0's rmse: 0.0254519\n", + "[1847]\tvalid_0's rmse: 0.0254506\n", + "[1848]\tvalid_0's rmse: 0.0254508\n", + "[1849]\tvalid_0's rmse: 0.0254503\n", + "[1850]\tvalid_0's rmse: 0.0254484\n", + "[1851]\tvalid_0's rmse: 0.0254485\n", + "[1852]\tvalid_0's rmse: 0.0254486\n", + "[1853]\tvalid_0's rmse: 0.0254492\n", + "[1854]\tvalid_0's rmse: 0.0254493\n", + "[1855]\tvalid_0's rmse: 0.0254488\n", + "[1856]\tvalid_0's rmse: 0.0254492\n", + "[1857]\tvalid_0's rmse: 0.0254538\n", + "[1858]\tvalid_0's rmse: 0.0254541\n", + "[1859]\tvalid_0's rmse: 0.0254591\n", + "[1860]\tvalid_0's rmse: 0.0254593\n", + "[1861]\tvalid_0's rmse: 0.0254593\n", + "[1862]\tvalid_0's rmse: 0.0254589\n", + "[1863]\tvalid_0's rmse: 0.0254589\n", + "[1864]\tvalid_0's rmse: 0.0254596\n", + "[1865]\tvalid_0's rmse: 0.0254593\n", + "[1866]\tvalid_0's rmse: 0.02546\n", + "[1867]\tvalid_0's rmse: 0.0254596\n", + "[1868]\tvalid_0's rmse: 0.0254609\n", + "[1869]\tvalid_0's rmse: 0.0254586\n", + "[1870]\tvalid_0's rmse: 0.0254583\n", + "[1871]\tvalid_0's rmse: 0.0254584\n", + "[1872]\tvalid_0's rmse: 0.0254582\n", + "[1873]\tvalid_0's rmse: 0.025458\n", + "[1874]\tvalid_0's rmse: 0.0254559\n", + "[1875]\tvalid_0's rmse: 0.0254556\n", + "[1876]\tvalid_0's rmse: 0.0254552\n", + "[1877]\tvalid_0's rmse: 0.0254551\n", + "[1878]\tvalid_0's rmse: 0.0254557\n", + "[1879]\tvalid_0's rmse: 0.0254539\n", + "[1880]\tvalid_0's rmse: 0.0254533\n", + "[1881]\tvalid_0's rmse: 0.0254524\n", + "[1882]\tvalid_0's rmse: 0.0254525\n", + "[1883]\tvalid_0's rmse: 0.0254542\n", + "[1884]\tvalid_0's rmse: 0.0254548\n", + "[1885]\tvalid_0's rmse: 0.0254539\n", + "[1886]\tvalid_0's rmse: 0.0254536\n", + "[1887]\tvalid_0's rmse: 0.0254537\n", + "[1888]\tvalid_0's rmse: 0.0254532\n", + "[1889]\tvalid_0's rmse: 0.0254555\n", + "[1890]\tvalid_0's rmse: 0.0254548\n", + "[1891]\tvalid_0's rmse: 0.0254549\n", + "[1892]\tvalid_0's rmse: 0.0254548\n", + "[1893]\tvalid_0's rmse: 0.0254545\n", + "[1894]\tvalid_0's rmse: 0.0254543\n", + "[1895]\tvalid_0's rmse: 0.0254553\n", + "[1896]\tvalid_0's rmse: 0.0254551\n", + "[1897]\tvalid_0's rmse: 0.0254553\n", + "[1898]\tvalid_0's rmse: 0.0254557\n", + "[1899]\tvalid_0's rmse: 0.0254553\n", + "[1900]\tvalid_0's rmse: 0.0254554\n", + "[1901]\tvalid_0's rmse: 0.025455\n", + "[1902]\tvalid_0's rmse: 0.0254548\n", + "[1903]\tvalid_0's rmse: 0.0254559\n", + "[1904]\tvalid_0's rmse: 0.025455\n", + "[1905]\tvalid_0's rmse: 0.0254548\n", + "[1906]\tvalid_0's rmse: 0.0254548\n", + "[1907]\tvalid_0's rmse: 0.025454\n", + "[1908]\tvalid_0's rmse: 0.0254535\n", + "[1909]\tvalid_0's rmse: 0.0254534\n", + "[1910]\tvalid_0's rmse: 0.0254536\n", + "[1911]\tvalid_0's rmse: 0.0254536\n", + "[1912]\tvalid_0's rmse: 0.0254531\n", + "[1913]\tvalid_0's rmse: 0.0254532\n", + "[1914]\tvalid_0's rmse: 0.0254535\n", + "[1915]\tvalid_0's rmse: 0.0254525\n", + "[1916]\tvalid_0's rmse: 0.025452\n", + "[1917]\tvalid_0's rmse: 0.0254519\n", + "[1918]\tvalid_0's rmse: 0.0254518\n", + "[1919]\tvalid_0's rmse: 0.0254515\n", + "[1920]\tvalid_0's rmse: 0.0254513\n", + "[1921]\tvalid_0's rmse: 0.0254524\n", + "[1922]\tvalid_0's rmse: 0.0254529\n", + "[1923]\tvalid_0's rmse: 0.0254551\n", + "[1924]\tvalid_0's rmse: 0.0254534\n", + "[1925]\tvalid_0's rmse: 0.0254535\n", + "[1926]\tvalid_0's rmse: 0.0254536\n", + "[1927]\tvalid_0's rmse: 0.0254536\n", + "[1928]\tvalid_0's rmse: 0.0254538\n", + "[1929]\tvalid_0's rmse: 0.0254538\n", + "[1930]\tvalid_0's rmse: 0.0254529\n", + "[1931]\tvalid_0's rmse: 0.0254529\n", + "[1932]\tvalid_0's rmse: 0.0254527\n", + "[1933]\tvalid_0's rmse: 0.0254525\n", + "[1934]\tvalid_0's rmse: 0.0254524\n", + "[1935]\tvalid_0's rmse: 0.0254518\n", + "[1936]\tvalid_0's rmse: 0.0254518\n", + "[1937]\tvalid_0's rmse: 0.0254518\n", + "[1938]\tvalid_0's rmse: 0.0254512\n", + "[1939]\tvalid_0's rmse: 0.0254511\n", + "[1940]\tvalid_0's rmse: 0.0254517\n", + "[1941]\tvalid_0's rmse: 0.0254514\n", + "[1942]\tvalid_0's rmse: 0.0254517\n", + "[1943]\tvalid_0's rmse: 0.0254503\n", + "[1944]\tvalid_0's rmse: 0.0254474\n", + "[1945]\tvalid_0's rmse: 0.0254471\n", + "[1946]\tvalid_0's rmse: 0.0254472\n", + "[1947]\tvalid_0's rmse: 0.0254473\n", + "[1948]\tvalid_0's rmse: 0.0254469\n", + "[1949]\tvalid_0's rmse: 0.0254462\n", + "[1950]\tvalid_0's rmse: 0.0254464\n", + "[1951]\tvalid_0's rmse: 0.025446\n", + "[1952]\tvalid_0's rmse: 0.025446\n", + "[1953]\tvalid_0's rmse: 0.0254422\n", + "[1954]\tvalid_0's rmse: 0.0254356\n", + "[1955]\tvalid_0's rmse: 0.0254358\n", + "[1956]\tvalid_0's rmse: 0.0254357\n", + "[1957]\tvalid_0's rmse: 0.0254344\n", + "[1958]\tvalid_0's rmse: 0.0254348\n", + "[1959]\tvalid_0's rmse: 0.0254348\n", + "[1960]\tvalid_0's rmse: 0.0254347\n", + "[1961]\tvalid_0's rmse: 0.0254346\n", + "[1962]\tvalid_0's rmse: 0.0254346\n", + "[1963]\tvalid_0's rmse: 0.0254344\n", + "[1964]\tvalid_0's rmse: 0.0254341\n", + "[1965]\tvalid_0's rmse: 0.0254337\n", + "[1966]\tvalid_0's rmse: 0.0254337\n", + "[1967]\tvalid_0's rmse: 0.0254335\n", + "[1968]\tvalid_0's rmse: 0.0254336\n", + "[1969]\tvalid_0's rmse: 0.0254336\n", + "[1970]\tvalid_0's rmse: 0.0254333\n", + "[1971]\tvalid_0's rmse: 0.0254335\n", + "[1972]\tvalid_0's rmse: 0.0254333\n", + "[1973]\tvalid_0's rmse: 0.0254328\n", + "[1974]\tvalid_0's rmse: 0.0254329\n", + "[1975]\tvalid_0's rmse: 0.0254329\n", + "[1976]\tvalid_0's rmse: 0.0254334\n", + "[1977]\tvalid_0's rmse: 0.0254333\n", + "[1978]\tvalid_0's rmse: 0.0254336\n", + "[1979]\tvalid_0's rmse: 0.0254342\n", + "[1980]\tvalid_0's rmse: 0.0254343\n", + "[1981]\tvalid_0's rmse: 0.0254338\n", + "[1982]\tvalid_0's rmse: 0.0254341\n", + "[1983]\tvalid_0's rmse: 0.0254341\n", + "[1984]\tvalid_0's rmse: 0.0254343\n", + "[1985]\tvalid_0's rmse: 0.0254342\n", + "[1986]\tvalid_0's rmse: 0.0254341\n", + "[1987]\tvalid_0's rmse: 0.0254347\n", + "[1988]\tvalid_0's rmse: 0.025435\n", + "[1989]\tvalid_0's rmse: 0.0254349\n", + "[1990]\tvalid_0's rmse: 0.0254338\n", + "[1991]\tvalid_0's rmse: 0.0254339\n", + "[1992]\tvalid_0's rmse: 0.0254342\n", + "[1993]\tvalid_0's rmse: 0.0254341\n", + "[1994]\tvalid_0's rmse: 0.0254341\n", + "[1995]\tvalid_0's rmse: 0.0254339\n", + "[1996]\tvalid_0's rmse: 0.0254349\n", + "[1997]\tvalid_0's rmse: 0.025434\n", + "[1998]\tvalid_0's rmse: 0.0254327\n", + "[1999]\tvalid_0's rmse: 0.0254326\n", + "[2000]\tvalid_0's rmse: 0.025432\n", + "Did not meet early stopping. Best iteration is:\n", + "[2000]\tvalid_0's rmse: 0.025432\n" + ] + } + ], + "source": [ + "gbm = lgb.train(params_gbm, lgb_train, num_boost_round=2000, valid_sets=lgb_eval, early_stopping_rounds=100)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "y_pred = gbm.predict(X_test)\n", + "y_true = Y_test.values" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 3.7E-04\n", + "RMSE: 0.019\n", + "MAE: 0.013\n", + "MAPE: 2.64 %\n", + "R_2: 0.93\n" + ] + } + ], + "source": [ + "MSE = mean_squared_error(y_true, y_pred)\n", + "RMSE = np.sqrt(mean_squared_error(y_true, y_pred))\n", + "MAE = mean_absolute_error(y_true, y_pred)\n", + "MAPE = mean_absolute_percentage_error(y_true, y_pred)\n", + "R_2 = r2_score(y_true, y_pred)\n", + "print('MSE:', format(MSE, '.1E'))\n", + "print('RMSE:', round(RMSE, 3))\n", + "print('MAE:', round(MAE, 3))\n", + "print('MAPE:', round(MAPE*100, 2), '%')\n", + "print('R_2:', round(R_2, 3)) #R方为负就说明拟合效果比平均值差a" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 25, + "outputs": [], + "source": [ + "dtrain = xgb.DMatrix(X_train, Y_train)\n", + "dvalid = xgb.DMatrix(X_valid, Y_valid)\n", + "dtest = xgb.DMatrix(X_test, Y_test)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 102, + "outputs": [], + "source": [ + "from sklearn.model_selection import cross_val_score\n", + "from xgboost import XGBRegressor\n", + "from bayes_opt import BayesianOptimization" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 103, + "outputs": [], + "source": [ + "def xgb_cv(max_depth, learning_rate, n_estimators, min_child_weight, subsample, colsample_bytree, reg_alpha, gamma):\n", + " val = cross_val_score(estimator=XGBRegressor(max_depth=int(max_depth),\n", + " learning_rate=learning_rate,\n", + " n_estimators=int(n_estimators),\n", + " min_child_weight=min_child_weight,\n", + " subsample=max(min(subsample, 1), 0),\n", + " colsample_bytree=max(min(colsample_bytree, 1), 0),\n", + " reg_alpha=max(reg_alpha, 0), gamma=gamma, objective='reg:squarederror',\n", + " booster='gbtree',\n", + " seed=666), X=use_data[feature_cols], y=use_data.values[:1], scoring='r2',\n", + " cv=10).max()\n", + " return val" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 104, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "| iter | target | colsam... | gamma | learni... | max_depth | min_ch... | n_esti... | reg_alpha | subsample |\n", + "-------------------------------------------------------------------------------------------------------------------------\n" + ] + }, + { + "ename": "ValueError", + "evalue": "Found input variables with inconsistent numbers of samples: [3080, 1]", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mValueError\u001B[0m Traceback (most recent call last)", + "\u001B[1;32m~\\AppData\\Local\\Temp\\ipykernel_17148\\1576227182.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 7\u001B[0m \u001B[1;34m'reg_alpha'\u001B[0m\u001B[1;33m:\u001B[0m \u001B[1;33m(\u001B[0m\u001B[1;36m0.001\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;36m10\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 8\u001B[0m 'gamma': (0.001, 10)})\n\u001B[1;32m----> 9\u001B[1;33m \u001B[0mxgb_bo\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mmaximize\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mn_iter\u001B[0m\u001B[1;33m=\u001B[0m\u001B[1;36m100\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0minit_points\u001B[0m\u001B[1;33m=\u001B[0m\u001B[1;36m10\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m", + "\u001B[1;32mD:\\miniconda3\\envs\\py37\\lib\\site-packages\\bayes_opt\\bayesian_optimization.py\u001B[0m in \u001B[0;36mmaximize\u001B[1;34m(self, init_points, n_iter, acquisition_function, acq, kappa, kappa_decay, kappa_decay_delay, xi, **gp_params)\u001B[0m\n\u001B[0;32m 309\u001B[0m \u001B[0mx_probe\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0msuggest\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mutil\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 310\u001B[0m \u001B[0miteration\u001B[0m \u001B[1;33m+=\u001B[0m \u001B[1;36m1\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 311\u001B[1;33m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mprobe\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mx_probe\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mlazy\u001B[0m\u001B[1;33m=\u001B[0m\u001B[1;32mFalse\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 312\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 313\u001B[0m \u001B[1;32mif\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_bounds_transformer\u001B[0m \u001B[1;32mand\u001B[0m \u001B[0miteration\u001B[0m \u001B[1;33m>\u001B[0m \u001B[1;36m0\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mD:\\miniconda3\\envs\\py37\\lib\\site-packages\\bayes_opt\\bayesian_optimization.py\u001B[0m in \u001B[0;36mprobe\u001B[1;34m(self, params, lazy)\u001B[0m\n\u001B[0;32m 206\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_queue\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0madd\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mparams\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 207\u001B[0m \u001B[1;32melse\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 208\u001B[1;33m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_space\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mprobe\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mparams\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 209\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mdispatch\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mEvents\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mOPTIMIZATION_STEP\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 210\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mD:\\miniconda3\\envs\\py37\\lib\\site-packages\\bayes_opt\\target_space.py\u001B[0m in \u001B[0;36mprobe\u001B[1;34m(self, params)\u001B[0m\n\u001B[0;32m 234\u001B[0m \u001B[0mx\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_as_array\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mparams\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 235\u001B[0m \u001B[0mparams\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mdict\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mzip\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_keys\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mx\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 236\u001B[1;33m \u001B[0mtarget\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mtarget_func\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m**\u001B[0m\u001B[0mparams\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 237\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 238\u001B[0m \u001B[1;32mif\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0m_constraint\u001B[0m \u001B[1;32mis\u001B[0m \u001B[1;32mNone\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32m~\\AppData\\Local\\Temp\\ipykernel_17148\\2288155185.py\u001B[0m in \u001B[0;36mxgb_cv\u001B[1;34m(max_depth, learning_rate, n_estimators, min_child_weight, subsample, colsample_bytree, reg_alpha, gamma)\u001B[0m\n\u001B[0;32m 9\u001B[0m \u001B[0mbooster\u001B[0m\u001B[1;33m=\u001B[0m\u001B[1;34m'gbtree'\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 10\u001B[0m seed=666), X=use_data[feature_cols], y=use_data.values[:1], scoring='r2',\n\u001B[1;32m---> 11\u001B[1;33m cv=10).max()\n\u001B[0m\u001B[0;32m 12\u001B[0m \u001B[1;32mreturn\u001B[0m \u001B[0mval\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mD:\\miniconda3\\envs\\py37\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\u001B[0m in \u001B[0;36mcross_val_score\u001B[1;34m(estimator, X, y, groups, scoring, cv, n_jobs, verbose, fit_params, pre_dispatch, error_score)\u001B[0m\n\u001B[0;32m 518\u001B[0m \u001B[0mfit_params\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0mfit_params\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 519\u001B[0m \u001B[0mpre_dispatch\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0mpre_dispatch\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 520\u001B[1;33m \u001B[0merror_score\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0merror_score\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 521\u001B[0m )\n\u001B[0;32m 522\u001B[0m \u001B[1;32mreturn\u001B[0m \u001B[0mcv_results\u001B[0m\u001B[1;33m[\u001B[0m\u001B[1;34m\"test_score\"\u001B[0m\u001B[1;33m]\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mD:\\miniconda3\\envs\\py37\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\u001B[0m in \u001B[0;36mcross_validate\u001B[1;34m(estimator, X, y, groups, scoring, cv, n_jobs, verbose, fit_params, pre_dispatch, return_train_score, return_estimator, error_score)\u001B[0m\n\u001B[0;32m 251\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 252\u001B[0m \"\"\"\n\u001B[1;32m--> 253\u001B[1;33m \u001B[0mX\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0my\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mgroups\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mindexable\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mX\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0my\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mgroups\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 254\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 255\u001B[0m \u001B[0mcv\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mcheck_cv\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mcv\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0my\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mclassifier\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0mis_classifier\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mestimator\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mD:\\miniconda3\\envs\\py37\\lib\\site-packages\\sklearn\\utils\\validation.py\u001B[0m in \u001B[0;36mindexable\u001B[1;34m(*iterables)\u001B[0m\n\u001B[0;32m 376\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 377\u001B[0m \u001B[0mresult\u001B[0m \u001B[1;33m=\u001B[0m \u001B[1;33m[\u001B[0m\u001B[0m_make_indexable\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mX\u001B[0m\u001B[1;33m)\u001B[0m \u001B[1;32mfor\u001B[0m \u001B[0mX\u001B[0m \u001B[1;32min\u001B[0m \u001B[0miterables\u001B[0m\u001B[1;33m]\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 378\u001B[1;33m \u001B[0mcheck_consistent_length\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m*\u001B[0m\u001B[0mresult\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 379\u001B[0m \u001B[1;32mreturn\u001B[0m \u001B[0mresult\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 380\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mD:\\miniconda3\\envs\\py37\\lib\\site-packages\\sklearn\\utils\\validation.py\u001B[0m in \u001B[0;36mcheck_consistent_length\u001B[1;34m(*arrays)\u001B[0m\n\u001B[0;32m 332\u001B[0m raise ValueError(\n\u001B[0;32m 333\u001B[0m \u001B[1;34m\"Found input variables with inconsistent numbers of samples: %r\"\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 334\u001B[1;33m \u001B[1;33m%\u001B[0m \u001B[1;33m[\u001B[0m\u001B[0mint\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0ml\u001B[0m\u001B[1;33m)\u001B[0m \u001B[1;32mfor\u001B[0m \u001B[0ml\u001B[0m \u001B[1;32min\u001B[0m \u001B[0mlengths\u001B[0m\u001B[1;33m]\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 335\u001B[0m )\n\u001B[0;32m 336\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;31mValueError\u001B[0m: Found input variables with inconsistent numbers of samples: [3080, 1]" + ] + } + ], + "source": [ + "xgb_bo = BayesianOptimization(xgb_cv, pbounds={'max_depth': (20, 60),\n", + " 'learning_rate': (0.005, 0.1),\n", + " 'n_estimators': (100, 2000),\n", + " 'min_child_weight': (0, 30),\n", + " 'subsample': (0.05, 1),\n", + " 'colsample_bytree': (0.1, 1),\n", + " 'reg_alpha': (0.001, 10),\n", + " 'gamma': (0.001, 10)})\n", + "xgb_bo.maximize(n_iter=100, init_points=10)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 105, + "outputs": [], + "source": [ + "params_xgb = {'objective': 'reg:squarederror',\n", + " 'booster': 'gbtree',\n", + " 'eta': 0.037,\n", + " 'max_depth': 30,\n", + " 'subsample': 1.0,\n", + " 'colsample_bytree': 0.47,\n", + " 'min_child_weight': 30,\n", + " 'seed': 42}\n", + "num_boost_round = 2000\n", + "\n", + "dtrain = xgb.DMatrix(X_train, Y_train)\n", + "dvalid = xgb.DMatrix(X_valid, Y_valid)\n", + "watchlist = [(dtrain, 'train'), (dvalid, 'eval')]\n", + "\n", + "gb_model = xgb.train(params_xgb, dtrain, num_boost_round, evals=watchlist,\n", + " early_stopping_rounds=100, verbose_eval=False)\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 106, + "outputs": [], + "source": [ + "y_pred_xgb = np.expm1(gb_model.predict(xgb.DMatrix(X_test)))\n", + "y_true_xgb = np.expm1(Y_test.values)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 107, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 1.1E-05\n", + "RMSE: 0.003\n", + "MAE: 0.002\n", + "MAPE: 2.99 %\n", + "R_2: 0.88\n" + ] + } + ], + "source": [ + "MSE = mean_squared_error(y_true_xgb, y_pred_xgb)\n", + "RMSE = np.sqrt(mean_squared_error(y_true_xgb, y_pred_xgb))\n", + "MAE = mean_absolute_error(y_true_xgb, y_pred_xgb)\n", + "MAPE = mean_absolute_percentage_error(y_true_xgb, y_pred_xgb)\n", + "R_2 = r2_score(y_true_xgb, y_pred_xgb)\n", + "print('MSE:', format(MSE, '.1E'))\n", + "print('RMSE:', round(RMSE, 3))\n", + "print('MAE:', round(MAE, 3))\n", + "print('MAPE:', round(MAPE*100, 2), '%')\n", + "print('R_2:', round(R_2, 3)) #R方为负就说明拟合效果比平均值差a" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 108, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 109, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 1.8E-05, RMSE: 0.004, MAE: 0.002, MAPE: 3.47 %, R_2: 0.776\n", + "MSE: 1.8E-05, RMSE: 0.004, MAE: 0.002, MAPE: 3.19 %, R_2: 0.83\n", + "MSE: 1.8E-05, RMSE: 0.004, MAE: 0.002, MAPE: 3.87 %, R_2: 0.811\n", + "MSE: 1.2E-05, RMSE: 0.003, MAE: 0.002, MAPE: 2.96 %, R_2: 0.861\n", + "MSE: 1.9E-05, RMSE: 0.004, MAE: 0.002, MAPE: 3.65 %, R_2: 0.775\n", + "MSE: 1.9E-05, RMSE: 0.004, MAE: 0.002, MAPE: 3.56 %, R_2: 0.789\n", + "MSE: 2.3E-05, RMSE: 0.005, MAE: 0.002, MAPE: 3.05 %, R_2: 0.723\n", + "MSE: 2.5E-05, RMSE: 0.005, MAE: 0.002, MAPE: 3.94 %, R_2: 0.717\n", + "MSE: 1.0E-05, RMSE: 0.003, MAE: 0.002, MAPE: 2.9 %, R_2: 0.864\n", + "MSE: 9.4E-06, RMSE: 0.003, MAE: 0.002, MAPE: 2.89 %, R_2: 0.881\n" + ] + } + ], + "source": [ + "kf = KFold(n_splits=10, shuffle=True, random_state=42)\n", + "eva_list = list()\n", + "for (train_index, test_index) in kf.split(use_data):\n", + " train = use_data.loc[train_index]\n", + " test = use_data.loc[test_index]\n", + " train, valid = train_test_split(train, test_size=0.15, random_state=42)\n", + " X_train, Y_train = train[feature_cols], train[target_cols[1]]\n", + " X_valid, Y_valid = valid[feature_cols], valid[target_cols[1]]\n", + " X_test, Y_test = test[feature_cols], test[target_cols[1]]\n", + " dtrain = xgb.DMatrix(X_train, Y_train)\n", + " dvalid = xgb.DMatrix(X_valid, Y_valid)\n", + " watchlist = [(dvalid, 'eval')]\n", + " gb_model = xgb.train(params_xgb, dtrain, num_boost_round, evals=watchlist,\n", + " early_stopping_rounds=100, verbose_eval=False)\n", + " y_pred = gb_model.predict(xgb.DMatrix(X_test))\n", + " y_true = Y_test.values\n", + " MSE = mean_squared_error(y_true, y_pred)\n", + " RMSE = np.sqrt(mean_squared_error(y_true, y_pred))\n", + " MAE = mean_absolute_error(y_true, y_pred)\n", + " MAPE = mean_absolute_percentage_error(y_true, y_pred)\n", + " R_2 = r2_score(y_true, y_pred)\n", + " print('MSE:', format(MSE, '.1E'), end=', ')\n", + " print('RMSE:', round(RMSE, 3), end=', ')\n", + " print('MAE:', round(MAE, 3), end=', ')\n", + " print('MAPE:', round(MAPE*100, 2), '%', end=', ')\n", + " print('R_2:', round(R_2, 3)) #R方为负就说明拟合效果比平均值差\n", + " eva_list.append([MSE, RMSE, MAE, MAPE, R_2])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 110, + "outputs": [], + "source": [ + "record = pd.DataFrame.from_records(eva_list, columns=['MSE', 'RMSE', 'MAE', 'MAPE', 'R2'])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 120, + "outputs": [ + { + "data": { + "text/plain": " MSE RMSE MAE MAPE R2\n0 0.000018 0.004221 0.002394 0.034705 0.775560\n1 0.000018 0.004191 0.002405 0.031921 0.829931\n2 0.000018 0.004249 0.002235 0.038677 0.810649\n3 0.000012 0.003395 0.002090 0.029607 0.861337\n4 0.000019 0.004334 0.002302 0.036496 0.775066\n5 0.000019 0.004367 0.002260 0.035588 0.789063\n6 0.000023 0.004806 0.002272 0.030522 0.723082\n7 0.000025 0.004968 0.002401 0.039428 0.717094\n8 0.000010 0.003207 0.002037 0.029033 0.863679\n9 0.000009 0.003072 0.002008 0.028871 0.880821", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
MSERMSEMAEMAPER2
00.0000180.0042210.0023940.0347050.775560
10.0000180.0041910.0024050.0319210.829931
20.0000180.0042490.0022350.0386770.810649
30.0000120.0033950.0020900.0296070.861337
40.0000190.0043340.0023020.0364960.775066
50.0000190.0043670.0022600.0355880.789063
60.0000230.0048060.0022720.0305220.723082
70.0000250.0049680.0024010.0394280.717094
80.0000100.0032070.0020370.0290330.863679
90.0000090.0030720.0020080.0288710.880821
\n
" + }, + "execution_count": 120, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "record" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 124, + "outputs": [ + { + "data": { + "text/plain": " MSE RMSE MAE MAPE R2\n8 0.00001 0.003207 0.002037 0.029033 0.863679", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
MSERMSEMAEMAPER2
80.000010.0032070.0020370.0290330.863679
\n
" + }, + "execution_count": 124, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 126, + "outputs": [], + "source": [ + "index = [0, 1, 2, 3, 4, 5, 6, 8]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 128, + "outputs": [ + { + "data": { + "text/plain": "MSE 0.000017\nRMSE 0.004096\nMAE 0.002249\nMAPE 0.033319\nR2 0.803546\ndtype: float64" + }, + "execution_count": 128, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "record.loc[index].mean()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 63, + "outputs": [ + { + "data": { + "text/plain": "MSE 0.000552\nRMSE 0.022978\nMAE 0.014251\nMAPE 0.034105\nR2 0.896138\ndtype: float64" + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "record.mean()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 57, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "#新增加的两行\n", + "from pylab import mpl\n", + "# 设置显示中文字体\n", + "mpl.rcParams[\"font.sans-serif\"] = [\"SimHei\"]\n", + "\n", + "mpl.rcParams[\"axes.unicode_minus\"] = False" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 58, + "outputs": [ + { + "data": { + "text/plain": "
", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABREAAANBCAYAAAB3XPnSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzde3RU9bn/8c/ckxAS5SqiIl4IFQOUFqqIVBB7YCloEazWUhEVgbZotZaGImIpUjguWuQUrQLWKsfaA5aCCqVoT8FWwUrRoAJCEX/IJXiCQMBk9u33x8yeZHKdYHaYCe/XWiycPXvPfHfAvdqPz/N9fI7jOAIAAAAAAACAOvhP9QIAAAAAAAAApDdCRAAAAAAAAAD1IkQEAAAAAAAAUC9CRAAAAAAAAAD1IkQEAAAAAAAAUC9CRAAAAAAAAAD1IkQEAAAAAAAAUC9CRAAAAAAAAAD1IkQEAABAk6qoqNBnn31W4/j27du1f//+Wq8pKSnRT3/6Ux08eNDr5QEAAOAkBE/1AgAAAHBqnDhxQqZpKhwOy+fzJb0XjUbl9/uVlZWlSZMmaeDAgbr11lv12WefqaSkpMZnXXDBBQoGY//TcuXKlZo/f75ef/31pHMee+wxvfPOO1q7dq1ycnKS3quoqNCyZct011131bne/fv366qrrpLf70+s13Ec2batQCCQOM+2bfXq1UsvvPBC434gAAAAqBMhIgAAQAs3ZswYbdu2TaFQKBG+ffnLX1b37t31xBNPKBwOyzAMWZaVCPcqKir0rW99S9OmTdPll1+u2bNn67333lPv3r01c+ZMtW/fXpJkmqYOHjyojRs36owzzpAkhUIhhcPhpDXs379ff/vb3zR79uyk7wiFQvL7/YkQ0P3dsixFo1GFw+HEsUgkIkn67W9/q6997WuSpHXr1umnP/2pNm7cmPiuBQsWaNOmTU3/gwQAADiNESICAAC0cI8++qgcx1E4HNamTZtUVFSkm266SQMHDtT3v/99SdKcOXO0Z88eLVy4sMb1Y8eOVWFhoT7//HN9+umn6t27t5599llJ0t69e3X11VcrFApp9OjRGjp0qNq1a1fjMxYuXKhevXpp+PDheu+995Sbm6tp06bVCPuGDBmS9Prpp59W//79JUl+f+o78TTmXAAAADSMEBEAAKCF69ixo5544gllZWXpqaee0n/+539q4MCBSefs3r1bPXr0qPV6x3H0la98RZL0pz/9SZK0a9cuzZs3L6n9OBKJ1KhAlKQ33nhDy5cv1x/+8AdJ0kMPPaSjR4/q2WefVTgcVjgcVklJiYYOHaqXX35ZnTp1km3bqqioUF5eXuJz3GDwjjvuSGpnNgxDhYWFifMsy1K/fv0a/XMCAABA3QgRAQAATgOXXXaZJk2apK5duyZV+1166aWSJJ/Pp7///e968skn5TiOJGnr1q3asGGD5s+fr/nz56tz586J6xzH0bp165JCRJ/PV2Nvxc8//1yTJ09WXl6eli5dqsOHD+v999/Xc889p3bt2skwDEUiEWVnZ0uSsrKy1KpVK0WjUWVlZSkUCiU+y7IsSdLixYsbbGd+6623muTnBgAAgBj6PAAAAFowx3H0+eefq1evXlq6dKl69+4t27YT70ciES1evFhbtmzR0qVL9cYbb2jx4sWJ/QcvvfRS5eXlafTo0Xr//fcT17lDVFq1alXv92dnZ+v666/XmDFj1L17d61fv17jxo1Tnz599P7776tXr17q3r27vv71r0uSrr76ahUUFKiwsLDGYJSq625IY84FAABAw6hEBAAAaME+/fRTDRgwQH6/P1Fh+PTTT8uyLP3iF79IhIFHjx7V6NGj9d///d+SKkPCM888U7/5zW80e/ZsdezYUR9++GHS57thY32mTZsmSZoxY4bOPfdc/eAHP5AkFRQUaMOGDcrOzq6xh6FhGElViO6xQCCg22+/PXHMnc58ySWXJJ3bs2fPBtcFAACA1BEiAgAAtGDt2rVTcXGxwuGwZs2apRMnTujee+/VgAEDkvYNrKiokCSdf/752rlzZ9JnhEIhFRUVKRgMJoLI0tJS5eTkJMI/93hdNm/erD/84Q965plnEsFjOBxW27Zta702EokkgkxJOnDggLKysrR58+aklunXXntNM2bM0Pr165OudxxHx44dUzgcTinoBAAAQP0IEQEAAFown89XY9jJ//3f/+mGG25I2uPw2LFjCgaDatOmTa2fs2LFCq1Zs0bf+MY3JEkHDx5Ux44dE+9Ho9E617BhwwY98MADKigoUHFxsVauXKlgMKiHHnpIw4YN0549e2q9bvXq1brgggskScOGDdOJEyfq/I66Kg/nzp2r66+/vs7rAAAAkBr2RAQAADjNdO/e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\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(16, 10))\n", + "plt.plot(range(len(y_true)), y_true, 'o-', label='真实值')\n", + "plt.plot(range(len(y_pred)), y_pred, '*-', label='预测值')\n", + "plt.legend(loc='best')\n", + "plt.title('预测结果')\n", + "plt.savefig('./figure/CO2排放强度预测结果.png')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 59, + "outputs": [], + "source": [ + "pd.DataFrame.from_records([y_pred, y_true]).T.to_csv('pred.csv')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 60, + "outputs": [], + "source": [ + "rst = pd.DataFrame.from_records(([y_true_xgb, y_pred_xgb])).T\n", + "rst.columns = ['y_true', 'y_pred']" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 61, + "outputs": [], + "source": [ + "rst['mAP'] = abs(rst.y_pred - rst.y_true) / rst.y_true" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 62, + "outputs": [ + { + "data": { + "text/plain": " y_true y_pred mAP\n23 0.233161 0.228589 0.019609\n46 0.242031 0.260373 0.075782\n42 0.233845 0.215675 0.077700\n1 0.233773 0.237715 0.016864\n58 0.258407 0.259042 0.002460\n41 0.233404 0.246465 0.055956\n15 0.249245 0.248289 0.003837\n63 0.237670 0.284324 0.196296\n59 0.244008 0.242001 0.008228\n37 0.252681 0.251169 0.005983", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
y_truey_predmAP
230.2331610.2285890.019609
460.2420310.2603730.075782
420.2338450.2156750.077700
10.2337730.2377150.016864
580.2584070.2590420.002460
410.2334040.2464650.055956
150.2492450.2482890.003837
630.2376700.2843240.196296
590.2440080.2420010.008228
370.2526810.2511690.005983
\n
" + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rst.sort_values(by='mAP').sample(10)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 63, + "outputs": [ + { + "data": { + "text/plain": "
", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABREAAANBCAYAAAB3XPnSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzde3RU9bn/8c/cEy4JchVBVEShQiBSsApeAFFhCaJotNZSES8nclpEu2wbikB/6EHQZQWON27qEY7SoqUiQhE9BWwVjiAaRFAQ8aCYYLklgcx1//6YzM4MmUxmwiXs7PdrLdYke/ae2Rs2WbM+eZ7v4zAMwxAAAAAAAAAA1MLZ0CcAAAAAAAAA4PRGiAgAAAAAAAAgJUJEAAAAAAAAACkRIgIAAAAAAABIiRARAAAAAAAAQEqEiAAAAAAAAABSIkQEAAAAAAAAkBIhIgAAAAAAAICUCBEBAABwQvn9fh08eLDG9u3bt2vv3r1JjyktLdXvf/97lZSUnOzTAwAAQD24G/oEAAAA0DCOHDmiUCgkr9crh8OR8FwgEJDT6VRWVpbGjh2rK6+8UnfccYcOHjyo0tLSGq/VuXNnud3Rj5ZvvvmmZs6cqffffz9hn1mzZumTTz7RqlWr1KRJk4Tn/H6/lixZonvvvbfW8927d68GDBggp9Npnq9hGIpEInK5XOZ+kUhEvXr10uLFizP7CwEAAECtCBEBAAAauVGjRmnbtm3yeDxm+HbxxRerW7duev755+X1ehUMBhUOh81wz+/367bbbtPEiRN12WWXadq0afrss8+Un5+vqVOnqk2bNpKkUCikkpISrV+/Xi1atJAkeTweeb3ehHPYu3ev1qxZo2nTpiW8h8fjkdPpNEPA2GM4HFYgEJDX6zW3+Xw+SdJLL72kn/zkJ5Kk1atX6/e//73Wr19vvtfs2bO1YcOGE/8XCQAAYGOEiAAAAI3ck08+KcMw5PV6tWHDBhUVFenWW2/VlVdeqV/+8peSpOnTp2v37t169tlnaxw/evRo5eXl6ejRo/rhhx+Un5+vV155RZK0Z88eXX311fJ4PCooKNCQIUPUunXrGq/x7LPPqlevXho+fLg+++wzNWvWTBMnTqwR9g0ePDjh+xdffFH9+vWTJDmd6a/Ek8m+AAAAqBshIgAAQCPXrl07Pf/888rKytLcuXP1xBNP6Morr0zYZ9euXerevXvS4w3D0I9//GNJ0l//+ldJ0s6dO/XUU08ltB/7fL4aFYiS9MEHH+j111/Xn/70J0nS5MmTdfjwYb3yyivyer3yer0qLS3VkCFDtHz5crVv316RSER+v185OTnm68SCwbvvvjuhnTkYDCovL8/cLxwO65JLLsn47wkAAAC1I0QEAACwgUsvvVRjx47Veeedl1Dt16NHD0mSw+HQP/7xD82ZM0eGYUiStmzZonXr1mnmzJmaOXOmOnToYB5nGIZWr16dECI6HI4aaysePXpU48aNU05OjhYtWqQDBw5o69atWrhwoVq3bq1gMCifz6fs7GxJUlZWlpo2bapAIKCsrCx5PB7ztcLhsCRp/vz5dbYz/+///u8J+XsDAABAFH0eAAAAjZhhGDp69Kh69eqlRYsWKT8/X5FIxHze5/Np/vz52rx5sxYtWqQPPvhA8+fPN9cf7NGjh3JyclRQUKCtW7eax8WGqDRt2jTl+2dnZ2vEiBEaNWqUunXrprVr12rMmDHq3bu3tm7dql69eqlbt2666qqrJElXX321unbtqry8vBqDUeLPuy6Z7AsAAIC6UYkIAADQiP3www+6/PLL5XQ6zQrDF198UeFwWI8//rgZBh4+fFgFBQX67//+b0nVIeEZZ5yhF154QdOmTVO7du305ZdfJrx+LGxMZeLEiZKkKVOm6Oyzz9avfvUrSVLXrl21bt06ZWdn11jDMBgMJlQhxra5XC7ddddd5rbYdOaLLrooYd+ePXvWeV4AAABIHyEiAABAI9a6dWsVFxfL6/Xqscce05EjRzR+/HhdfvnlCesG+v1+SdK5556rHTt2JLyGx+NRUVGR3G63GUTu379fTZo0McO/2PbabNq0SX/605/08ssvm8Gj1+tVq1atkh7r8/nMIFOSvv/+e2VlZWnTpk0JLdPvvfeepkyZorVr1yYcbxiGysrK5PV60wo6AQAAkBohIgAAQCPmcDhqDDv517/+pRtvvDFhjcOysjK53W61bNky6essXbpUK1eu1LXXXitJKikpUbt27cznA4FAreewbt06Pfzww+ratauKi4v15ptvyu12a/LkyRo6dKh2796d9LgVK1aoc+fOkqShQ4fqyJEjtb5HbZWHM2bM0IgRI2o9DgAAAOlhTUQAAACb6datm6ZPny6puoJw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1isTEZFpMi8wXOW4MhGDlIkoIiISIU6HwabrlgJWwDCUfX/TdUtxOs4+KiIicceVYgUQwbpVAFFEZFYpVybiMAoiioiIRNDGZSU8evNqit1DS5aL3ak8evNqNi4ridHKRERERERkvOblZwBWT0TTHKnOaPZRObOIiEiEbVxWwtVLi9lV00JTp4eiLKuEWRmIIiIiIiKJoTQnDYcBvf0+Tnf1qa85CiKKiIhEhdNhcOnC/FgvQ0REREREJiHZ5aDEnUZdWy+1zT0KIqJyZhERERERERERkWGCw1XUFxFQEFFERERERERERGQYO4hYqwnNgIKIIiIiIiIiIiIiw5TlWkHEnUfO8FZ1Mz7/7B6woiCiiIiIiIiIiIhIiBeqGnj8D0cBePd4K59//G3WbX2ZF6oaYryy2FEQUUREREREREREJOCFqgbueHI3bT39Qx5vbPdwx5O7Z20gUUFEERERERERERERwOc32bx9HyMVLtuPbd6+b1aWNiuIKCIiIiIiIiIiAuyqaaGh3TPqcRNoaPewq6Zl+hYVJxREFBERERERERERAZo6Rw8gTua8mURBRBEREREREREREaAoKzWi580kCiKKiIiIiIiIiIgAayvzKHGnYoxy3ABK3KmsrcybzmXFBQURRUREREREREREAKfDYNN1SwGGBRLt+5uuW4rTMVqYceZSEFFERERERERERCRg47ISHr15NcXuoSXLxe5UHr15NRuXlcRoZbHlivUCRERERERERERE4snGZSVcvbSYXTUtNHV6KMqySphnYwaiTUFEERERERERERGRszgdBpcuzI/1MuKGyplFREREREREREQkLAURRUREREREREREJCwFEUVERERERERERCQsBRFFREREREREREQkLAURRUREREREREREJCwFEUVERERERERERCQsBRFFREREREREREQkLAURRUREREREREREJCwFEUVERERERERERCQsBRFFREREREREREQkLAURRUREREREREREJCwFEUVERERERERERCQsBRFFREREREREREQkLAURRUREREREREREJCwFEUVERERERERERCQsBRFFREREREREREQkLAURRUREREREREREJCwFEUVERERERERERCQsBRFFREREREREREQkLAURRUREREREREREJCwFEUVERERERERERCQsBRFFREREREREREQkLAURRUREREREREREJCwFEUVERERERERERCQsBRFFREREREREREQkLAURRUREREREREREJCwFEUVERERERERERCQsV6wXMBWmaQLg8/livJLosP9cM/XPJzOb9q8kMu1fSWTav5LotIclkWn/SiLT/p297L9zO842GsMc64w45vV62bt3b6yXISIiIiIiIiIiktCWL19OcnLyqMcTOojo9/sZGBjA4XBgGEaslyMiIiIiIiIiIpJQTNPE7/fjcrlwOEbvfJjQQUQRERERERERERGJPg1WERERERERERERkbAURBQREREREREREZGwFEQUERERERERERGRsBREFBERERERERERkbAURBQREREREREREZGwFEQUERERERERERGRsBREFBERERERERERkbAURBQRERFJcK2trezevZuWlpZYL0VEREREZigFEePUoUOH+MxnPsNFF13E1q1bMU0z1ksSCau1tZUrr7ySkydPBh/TPpZE8dJLL3HVVVexdOlSPvvZz1JdXQ1oD0tieP7557nmmmv49re/zSc+8Qmef/55QPtXEs8tt9zCr3/9a0D7VxLDli1bWLJkSfC/q6++GtD+lcTy0EMPcfvttwfva/9KOAoixiGv18vtt9/O+eefz7PPPkt1dXXwDZVIPGppaeH222+nrq4u+Jj2sSSK2tpa7r//fu655x5ef/115s6dy9/93d9pD0tC6OjoYMuWLfzbv/0b27ZtY/PmzTz00EPav5JwfvOb3/DGG28Aeg8hieOjjz7iscce45133uGdd97hP/7jP7R/JaEcOnSIX/ziF9x///2AXn9lbAoixqHXX3+drq4u7rvvPioqKrj77rt55plnYr0skVHdfffdXHvttUMe0z6WRFFdXc1f//Vfc+2111JQUMDnP/95qqqqRjjwPQAABSVJREFUtIclIXR3d3P//fdzzjnnAHDuuefS3t6u/SsJpa2tja1bt1JZWQnoPYQkhoGBAQ4dOsSaNWvIzs4mOzubzMxM7V9JGKZp8q1vfYsvfvGLVFRUAHr9lbEpiBiHDhw4wMqVK0lLSwNgyZIlwdI6kXi0ZcsWvvjFLw55TPtYEsUnPvEJPv/5zwfv19TUMG/ePO1hSQglJSVcf/31APT39/PEE09wzTXXaP9KQtm6dSsbNmxg1apVgN5DSGI4ePAgpmnyqU99ihUrVnDLLbdQX1+v/SsJ4+mnn+bAgQOUlZXxyiuv0N/fr/0rY1IQMQ51dXVRVlYWvG8YBg6Hg/b29hiuSmR05eXlwx7TPpZE5PV6eeKJJ/jCF76gPSwJ5cCBA1x++eXs3LmT+++/X/tXEsbbb7/NW2+9xTe+8Y3gY9q/kgiqq6tZvHgxDz/8MM8//zxJSUl861vf0v6VhNDd3c0jjzzCvHnzaGxs5Cc/+Qk333yz9q+MSUHEOOR0OklOTh7yWEpKCh6PJ0YrEpk47WNJRI888gjp6encdNNN2sOSUJYsWcJPf/pTFi1axH333af9Kwmhr6+PTZs28cADD5CZmRl8XPtXEsH111/P008/zYoVKygvL+eb3/wmO3fuxO/3a/9K3Pv9739Pb28v//qv/8qdd97JE088QUdHB88++6z2r4SlIGIccrvdtLS0DHmsu7ubpKSkGK1IZOK0jyXR7Ny5k1/96lc8/PDDJCUlaQ9LQjEMg6VLl/Lggw+yY8cO7V9JCD/+8Y9ZtmwZ69evH/K49q8kouzsbPx+PwUFBdq/EvcaGxtZsWIFOTk5ALhcLpYsWUJfX5/2r4SlIGIcWr58OXv27AneP3nyJF6vF7fbHcNViUyM9rEkkhMnTvD1r3+dBx54gEWLFgHaw5IY3nrrLbZu3Rq873Q6AViwYIH2r8S97du38/LLL7NmzRrWrFnDc889x+bNm9m2bZv2r8S97373u/z2t78N3t+7dy8Oh4MlS5Zo/0rcKy4upq+vb8hj9fX13Hvvvdq/EpaCiHHooosuorOzk23btgHw2GOPcdlllwU/GIgkAu1jSRQej4evfvWrbNiwgauuuoru7m66u7tZs2aN9rDEvQULFvDUU0/x1FNP0dDQwMMPP8zll1/O+vXrtX8l7v3iF79g+/btbNu2jW3btnHllVfyV3/1Vzz55JPavxL3zjvvPB555BHeeecd3nrrLbZs2cKnP/1pLr/8cu1fiXvr16+nurqaX/7ylzQ2NvKzn/2M/fv3s27dOu1fCcswTdOM9SJkuJdeeol77rmHjIwMfD4fTz75JIsXL471skTCWrJkCTt27Ag249U+lkTw0ksvceeddw57fMeOHRw4cEB7WOLeH/7wB7773e/S2NjIunXreOCBB8jLy9NrsCScv/3bv2Xt2rXceOON2r+SEB5++GF+9atfkZGRwYYNG7j77rtJT0/X/pWE8MEHH/Dggw+yf/9+CgoKuO+++9iwYYP2r4SlIGIcO3XqFHv37mX16tXk5eXFejkik6J9LIlOe1gSmfavJDLtX0lk2r+SyLR/ZTQKIoqIiIiIiIiIiEhY6okoIiIiIiIiIiIiYSmIKCIiIiIiIiIiImEpiCgiIiIiIiIiIiJhKYgoIiIiIiIiIiIiYSmIKCIiIiIiIiIiImEpiCgiIiIiIiIiIiJhKYgoIiIiIiIiIiIiYSmIKCIiIiIiIiIiImEpiCgiIiIiIiIiIiJh/T+fP9YhHn4itwAAAABJRU5ErkJggg==\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(16, 10))\n", + "plt.plot(range(len(y_true_xgb)), y_true_xgb, 'o-', label='真实值')\n", + "plt.plot(range(len(y_pred_xgb)), y_pred_xgb, '*-', label='预测值')\n", + "plt.legend(loc='best')\n", + "plt.title('预测结果')\n", + "plt.savefig('./figure/CO2排放强度预测结果.png')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "## 煤种标准化工程" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 73, + "outputs": [], + "source": [ + "new_values = total_data.groupby(['煤种', '入炉煤低位热值_new', '燃煤挥发份Var_new', '燃煤灰份Aar_new']).CO2_em_air.mean()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 74, + "outputs": [ + { + "data": { + "text/plain": " 煤种 入炉煤低位热值_new 燃煤挥发份Var_new 燃煤灰份Aar_new\n0 无烟煤 17050.00 6.51 31.330000\n1 无烟煤 18440.00 9.13 21.240189\n2 无烟煤 19335.65 7.06 21.400000\n3 无烟煤 20125.07 5.70 29.850000\n4 无烟煤 20463.30 5.70 29.790000\n.. ... ... ... ...\n622 贫煤 21772.91 10.66 26.320000\n623 贫煤 21907.00 10.64 28.100000\n624 贫煤 22042.72 12.96 25.690000\n625 贫煤 23215.00 11.00 19.310000\n626 贫煤 23791.00 11.00 19.310000\n\n[627 rows x 4 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
煤种入炉煤低位热值_new燃煤挥发份Var_new燃煤灰份Aar_new
0无烟煤17050.006.5131.330000
1无烟煤18440.009.1321.240189
2无烟煤19335.657.0621.400000
3无烟煤20125.075.7029.850000
4无烟煤20463.305.7029.790000
...............
622贫煤21772.9110.6626.320000
623贫煤21907.0010.6428.100000
624贫煤22042.7212.9625.690000
625贫煤23215.0011.0019.310000
626贫煤23791.0011.0019.310000
\n

627 rows × 4 columns

\n
" + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coal_df = new_values.reset_index().drop(columns='CO2_em_air')\n", + "coal_df" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 75, + "outputs": [], + "source": [ + "coal_params_dict = dict()\n", + "for coal_type in coal_df['煤种'].unique().tolist():\n", + " options = coal_df[coal_df['煤种']==coal_type][['入炉煤低位热值_new', '燃煤挥发份Var_new', '燃煤灰份Aar_new']].values\n", + " coal_params_dict[coal_type] = options" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 76, + "outputs": [ + { + "data": { + "text/plain": "{'无烟煤': array([[1.70500000e+04, 6.51000000e+00, 3.13300000e+01],\n [1.84400000e+04, 9.13000000e+00, 2.12401894e+01],\n [1.93356500e+04, 7.06000000e+00, 2.14000000e+01],\n [2.01250700e+04, 5.70000000e+00, 2.98500000e+01],\n [2.04633000e+04, 5.70000000e+00, 2.97900000e+01]]),\n '烟煤': array([[1.277100e+04, 2.126000e+01, 3.355000e+01],\n [1.500000e+04, 2.346000e+01, 1.904000e+01],\n [1.610000e+04, 2.333000e+01, 1.873000e+01],\n ...,\n [2.348751e+04, 2.927000e+01, 2.097000e+01],\n [2.365000e+04, 2.887000e+01, 7.910000e+00],\n [2.365614e+04, 2.927000e+01, 2.097000e+01]]),\n '褐煤': array([[1.059800e+04, 2.476000e+01, 2.179000e+01],\n [1.129000e+04, 4.764000e+01, 3.079000e+01],\n [1.160400e+04, 4.758000e+01, 3.025000e+01],\n [1.172435e+04, 4.601000e+01, 3.673000e+01],\n [1.203000e+04, 4.726000e+01, 3.119000e+01],\n [1.213546e+04, 4.642000e+01, 1.113000e+01],\n [1.217290e+04, 4.642000e+01, 1.113000e+01],\n [1.219256e+04, 4.642000e+01, 1.113000e+01],\n [1.221131e+04, 4.642000e+01, 1.113000e+01],\n [1.230939e+04, 4.642000e+01, 1.113000e+01],\n [1.233780e+04, 4.642000e+01, 1.113000e+01],\n [1.267400e+04, 4.324000e+01, 1.237000e+01],\n [1.278700e+04, 4.884000e+01, 4.117000e+01],\n [1.295100e+04, 2.228000e+01, 1.287000e+01],\n [1.299880e+04, 2.256000e+01, 1.716000e+01],\n [1.311100e+04, 2.367000e+01, 2.107000e+01],\n [1.313000e+04, 2.417000e+01, 1.630000e+01],\n [1.318000e+04, 2.445000e+01, 1.794000e+01],\n [1.320830e+04, 2.451000e+01, 1.429000e+01],\n [1.325722e+04, 1.703000e+01, 3.660000e+01],\n [1.327000e+04, 3.204000e+01, 1.709000e+01],\n [1.327300e+04, 2.364000e+01, 1.622000e+01],\n [1.327300e+04, 2.458000e+01, 1.261000e+01],\n [1.332771e+04, 4.090000e+01, 2.507000e+01],\n [1.333064e+04, 1.680000e+01, 3.741000e+01],\n [1.335883e+04, 2.301000e+01, 1.841000e+01],\n [1.336864e+04, 2.301000e+01, 1.841000e+01],\n [1.343787e+04, 2.336000e+01, 1.705000e+01],\n [1.344000e+04, 4.782000e+01, 2.290000e+01],\n [1.345749e+04, 2.388000e+01, 1.652000e+01],\n [1.357000e+04, 1.799000e+01, 2.177000e+01],\n [1.364000e+04, 2.526000e+01, 2.108000e+01],\n [1.365410e+04, 2.232000e+01, 1.171000e+01],\n [1.369000e+04, 4.771000e+01, 2.205000e+01],\n [1.382000e+04, 2.420000e+01, 1.104000e+01],\n [1.389597e+04, 2.232000e+01, 1.171000e+01],\n [1.390000e+04, 3.683000e+01, 4.441000e+01],\n [1.395400e+04, 2.310000e+01, 1.011000e+01],\n [1.396000e+04, 4.665000e+01, 1.890000e+01],\n [1.400000e+04, 4.520000e+01, 1.364000e+01],\n [1.404100e+04, 2.346000e+01, 1.046000e+01],\n [1.410900e+04, 4.520000e+01, 1.364000e+01],\n [1.412200e+04, 2.478000e+01, 1.916000e+01],\n [1.419900e+04, 4.733000e+01, 1.697000e+01],\n [1.433937e+04, 2.476000e+01, 3.371000e+01],\n [1.440000e+04, 2.589000e+01, 1.643000e+01],\n [1.442729e+04, 4.474000e+01, 1.193000e+01],\n [1.446814e+04, 2.484000e+01, 3.331000e+01],\n [1.448810e+04, 3.554000e+01, 1.171000e+01],\n [1.458200e+04, 2.834000e+01, 2.320000e+01],\n [1.460000e+04, 2.714000e+01, 4.346000e+01],\n [1.462400e+04, 4.613000e+01, 2.700000e+01],\n [1.463500e+04, 4.613000e+01, 2.700000e+01],\n [1.464000e+04, 4.439000e+01, 1.684000e+01],\n [1.470100e+04, 2.210000e+01, 4.588000e+01],\n [1.481078e+04, 4.501000e+01, 1.325000e+01],\n [1.489878e+04, 2.386000e+01, 3.161000e+01],\n [1.507938e+04, 4.501000e+01, 1.325000e+01],\n [1.512117e+04, 2.355000e+01, 1.472000e+01],\n [1.517400e+04, 3.126000e+01, 1.696000e+01],\n [1.523800e+04, 2.492000e+01, 2.378000e+01],\n [1.524041e+04, 2.355000e+01, 1.472000e+01],\n [1.528927e+04, 2.345000e+01, 1.554000e+01],\n [1.534700e+04, 2.492000e+01, 2.378000e+01],\n [1.536708e+04, 4.501000e+01, 8.590000e+00],\n [1.540000e+04, 2.450000e+01, 2.085000e+01],\n [1.560165e+04, 2.345000e+01, 1.554000e+01],\n [1.562100e+04, 4.409000e+01, 1.019000e+01],\n [1.568455e+04, 1.865000e+01, 3.545000e+01],\n [1.599544e+04, 1.865000e+01, 3.545000e+01],\n [1.619823e+04, 2.032000e+01, 3.297000e+01],\n [1.619823e+04, 2.075000e+01, 3.310000e+01],\n [1.619951e+04, 1.790000e+01, 3.976000e+01],\n [1.620200e+04, 1.268000e+01, 4.012000e+01],\n [1.638000e+04, 2.264000e+01, 2.024000e+01],\n [1.644918e+04, 2.061000e+01, 3.224000e+01],\n [1.644918e+04, 2.087000e+01, 3.238000e+01],\n [1.660450e+04, 3.484000e+01, 9.590000e+00],\n [1.662400e+04, 1.287000e+01, 3.909000e+01],\n [1.667800e+04, 1.320000e+01, 3.884000e+01],\n [1.701000e+04, 2.721000e+01, 4.295000e+01],\n [1.711359e+04, 3.560000e+01, 9.440000e+00],\n [1.721702e+04, 3.266000e+01, 6.030000e+00],\n [1.732699e+04, 3.266000e+01, 6.030000e+00],\n [1.769205e+04, 3.632000e+01, 8.880000e+00],\n [1.783200e+04, 3.564000e+01, 2.418000e+01],\n [1.792600e+04, 3.563000e+01, 2.488000e+01],\n [1.802919e+04, 3.526000e+01, 7.680000e+00],\n [1.811583e+04, 3.348000e+01, 1.236000e+01],\n [1.815944e+04, 3.348000e+01, 1.236000e+01],\n [1.834900e+04, 3.542000e+01, 1.152000e+01],\n [1.862400e+04, 3.951000e+01, 1.937000e+01],\n [1.877383e+04, 2.676000e+01, 3.448000e+01],\n [1.877602e+04, 2.676000e+01, 3.448000e+01],\n [1.882100e+04, 2.678000e+01, 3.445000e+01],\n [1.884200e+04, 2.685000e+01, 3.451000e+01],\n [1.896000e+04, 3.951000e+01, 1.937000e+01],\n [1.903900e+04, 2.580000e+01, 2.420000e+01],\n [1.908760e+04, 3.426000e+01, 4.580000e+00],\n [1.918000e+04, 2.670000e+01, 2.480000e+01],\n [1.922827e+04, 3.426000e+01, 4.580000e+00],\n [1.924675e+04, 3.243000e+01, 7.700000e+00],\n [1.927600e+04, 3.200000e+01, 7.700000e+00],\n [1.959900e+04, 3.514000e+01, 1.065000e+01],\n [1.964010e+04, 3.446000e+01, 4.600000e+00],\n [1.965200e+04, 2.990000e+01, 2.406000e+01],\n [1.974233e+04, 3.422000e+01, 2.892000e+01],\n [1.976235e+04, 3.414000e+01, 2.934000e+01],\n [1.977612e+04, 3.446000e+01, 4.600000e+00],\n [1.993700e+04, 3.514000e+01, 1.065000e+01],\n [1.997000e+04, 3.533000e+01, 9.050000e+00],\n [2.003000e+04, 3.948000e+01, 3.080000e+01],\n [2.006000e+04, 3.911000e+01, 3.080000e+01],\n [2.011300e+04, 2.560000e+01, 2.312000e+01],\n [2.017338e+04, 2.979000e+01, 1.814000e+01],\n [2.025484e+04, 2.979000e+01, 1.814000e+01],\n [2.028500e+04, 3.009000e+01, 1.125000e+01],\n [2.057100e+04, 3.147000e+01, 2.478000e+01],\n [2.062600e+04, 2.627000e+01, 2.050000e+01],\n [2.066423e+04, 2.752000e+01, 2.014000e+01],\n [2.067360e+04, 2.840000e+01, 2.165000e+01],\n [2.068200e+04, 2.960000e+01, 1.603000e+01],\n [2.068600e+04, 3.124000e+01, 2.445000e+01],\n [2.070300e+04, 3.000000e+01, 1.125000e+01],\n [2.073600e+04, 2.627000e+01, 2.050000e+01],\n [2.075090e+04, 2.780000e+01, 2.254000e+01],\n [2.076000e+04, 2.977000e+01, 1.291000e+01],\n [2.078500e+04, 3.871000e+01, 1.575000e+01],\n [2.083648e+04, 2.780000e+01, 2.254000e+01],\n [2.089200e+04, 3.252000e+01, 9.680000e+00],\n [2.089200e+04, 3.255000e+01, 9.380000e+00],\n [2.089200e+04, 3.262000e+01, 1.026000e+01],\n [2.089200e+04, 3.324000e+01, 8.560000e+00],\n [2.090000e+04, 3.100000e+01, 1.981000e+01],\n [2.093990e+04, 2.840000e+01, 2.165000e+01],\n [2.094100e+04, 2.977000e+01, 1.291000e+01],\n [2.094900e+04, 3.100000e+01, 2.007000e+01],\n [2.107400e+04, 3.830000e+01, 1.525000e+01],\n [2.110000e+04, 2.470000e+01, 2.599000e+01],\n [2.114300e+04, 2.580000e+01, 2.196000e+01],\n [2.114300e+04, 2.580000e+01, 2.197000e+01],\n [2.121740e+04, 3.279000e+01, 1.334000e+01],\n [2.127156e+04, 3.844000e+01, 1.186000e+01],\n [2.134680e+04, 3.885000e+01, 1.243000e+01],\n [2.137900e+04, 2.944000e+01, 1.436000e+01],\n [2.147400e+04, 2.944000e+01, 1.436000e+01],\n [2.166129e+04, 3.124000e+01, 1.849000e+01],\n [2.176000e+04, 3.213000e+01, 1.785000e+01],\n [2.208167e+04, 3.176000e+01, 1.816000e+01],\n [2.214783e+04, 3.736000e+01, 1.390000e+01],\n [2.219619e+04, 3.736000e+01, 1.390000e+01],\n [2.240000e+04, 3.052000e+01, 1.785000e+01],\n [2.248200e+04, 3.010000e+01, 1.125000e+01],\n [2.261900e+04, 3.047000e+01, 1.303000e+01],\n [2.274200e+04, 3.028000e+01, 1.057000e+01]]),\n '贫煤': array([[1.695900e+04, 9.310000e+00, 4.477000e+01],\n [1.742404e+04, 1.058000e+01, 2.268000e+01],\n [1.742931e+04, 7.900000e+00, 3.840000e+01],\n [1.799800e+04, 1.175000e+01, 2.981000e+01],\n [1.875700e+04, 1.185000e+01, 3.122000e+01],\n [1.912518e+04, 7.810000e+00, 3.145000e+01],\n [1.928076e+04, 7.930000e+00, 3.137000e+01],\n [1.935228e+04, 1.119000e+01, 3.202000e+01],\n [1.938269e+04, 1.127000e+01, 3.192000e+01],\n [1.983535e+04, 1.152000e+01, 3.052000e+01],\n [1.986900e+04, 1.161000e+01, 3.042000e+01],\n [1.994000e+04, 9.370000e+00, 3.426000e+01],\n [1.994300e+04, 9.370000e+00, 3.426000e+01],\n [2.003700e+04, 1.125000e+01, 3.067000e+01],\n [2.024590e+04, 1.058000e+01, 2.654000e+01],\n [2.028730e+04, 1.120000e+01, 2.698000e+01],\n [2.031000e+04, 1.123000e+01, 3.357000e+01],\n [2.031700e+04, 1.125000e+01, 3.067000e+01],\n [2.036000e+04, 9.450000e+00, 3.077000e+01],\n [2.057000e+04, 1.185000e+01, 2.786000e+01],\n [2.075500e+04, 1.174000e+01, 2.817000e+01],\n [2.086230e+04, 1.040000e+01, 2.583000e+01],\n [2.092670e+04, 9.510000e+00, 2.515000e+01],\n [2.096500e+04, 1.258000e+01, 2.965000e+01],\n [2.097590e+04, 1.017000e+01, 2.491000e+01],\n [2.098100e+04, 1.258000e+01, 2.965000e+01],\n [2.101000e+04, 1.209000e+01, 2.169000e+01],\n [2.101980e+04, 9.410000e+00, 2.489000e+01],\n [2.103908e+04, 7.010000e+00, 2.714000e+01],\n [2.105200e+04, 1.074000e+01, 3.136000e+01],\n [2.106690e+04, 1.034000e+01, 2.481000e+01],\n [2.107710e+04, 1.017000e+01, 2.478000e+01],\n [2.110900e+04, 7.670000e+00, 2.597000e+01],\n [2.110900e+04, 1.209000e+01, 2.169000e+01],\n [2.119000e+04, 7.170000e+00, 2.591000e+01],\n [2.119400e+04, 7.190000e+00, 2.597000e+01],\n [2.119433e+04, 7.010000e+00, 2.667000e+01],\n [2.122400e+04, 1.256000e+01, 2.636000e+01],\n [2.126600e+04, 7.260000e+00, 2.567000e+01],\n [2.126900e+04, 1.174000e+01, 2.817000e+01],\n [2.157900e+04, 1.189000e+01, 2.689000e+01],\n [2.174500e+04, 1.074000e+01, 2.850000e+01],\n [2.176688e+04, 1.062000e+01, 2.687000e+01],\n [2.177291e+04, 1.066000e+01, 2.632000e+01],\n [2.190700e+04, 1.064000e+01, 2.810000e+01],\n [2.204272e+04, 1.296000e+01, 2.569000e+01],\n [2.321500e+04, 1.100000e+01, 1.931000e+01],\n [2.379100e+04, 1.100000e+01, 1.931000e+01]])}" + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coal_params_dict" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 77, + "outputs": [ + { + "data": { + "text/plain": " 地区 所属集团 投产时间 机组容量 机组类型 参数分类 冷却方式 锅炉类型 时间 \\\n0 北京 华能 1998/1/20 0:00 165 供热式 超高压 水冷 煤粉 2016.0 \n1 北京 华能 1998/1/20 0:00 165 供热式 超高压 水冷 煤粉 2016.0 \n2 北京 华能 1998/12/20 0:00 220 供热式 超高压 水冷 煤粉 2016.0 \n3 北京 华能 1999/6/26 0:00 220 供热式 超高压 水冷 煤粉 2016.0 \n4 辽宁 大唐 2009/4/30 0:00 300 供热式 亚临界 水冷 煤粉 2016.0 \n.. .. ... ... ... ... ... ... ... ... \n847 新疆 NaN NaN 1320 纯凝式 超临界 间接空冷 煤粉 NaN \n848 辽宁 NaN NaN 700 供热式 超临界 水冷 煤粉 NaN \n849 内蒙 NaN NaN 700 供热式 超临界 直接空冷 煤粉 NaN \n850 山东 NaN NaN 40 供热式 超高压 水冷 循环流化床 NaN \n851 浙江 NaN NaN 70 供热式 超高压 水冷 循环流化床 NaN \n\n 发电量 ... 标煤量 出力系数 煤种 入炉煤低位热值 燃煤挥发份Var 燃煤灰份Aar \\\n0 51841.70000 ... 2.580497e+05 75.84 烟煤 23380.0 27.59 9.94 \n1 47387.95000 ... 2.126813e+05 74.50 烟煤 23380.0 27.59 9.94 \n2 115498.04000 ... 4.410925e+05 78.76 烟煤 23380.0 27.59 9.94 \n3 120884.07000 ... 4.707218e+05 81.41 烟煤 23380.0 27.59 9.94 \n4 111218.55000 ... 3.726990e+05 71.27 褐煤 14122.0 24.78 19.16 \n.. ... ... ... ... .. ... ... ... \n847 704381.26290 ... 2.283076e+06 NaN 褐煤 19970.0 35.33 9.05 \n848 350000.00000 ... 1.328747e+06 NaN 褐煤 14640.0 44.39 16.84 \n849 385000.00000 ... 1.362009e+06 NaN 褐煤 13960.0 46.65 18.90 \n850 17000.00000 ... 1.810834e+05 NaN 烟煤 21060.0 19.12 20.27 \n851 35788.81469 ... 3.502535e+05 NaN 烟煤 22021.0 19.12 21.77 \n\n CO2_em_air 入炉煤低位热值_new 燃煤挥发份Var_new 燃煤灰份Aar_new \n0 0.235066 23380.0 27.59 9.94 \n1 0.226207 23380.0 27.59 9.94 \n2 0.220954 23380.0 27.59 9.94 \n3 0.216298 23380.0 27.59 9.94 \n4 0.238755 14122.0 24.78 19.16 \n.. ... ... ... ... \n847 0.196452 19970.0 35.33 9.05 \n848 0.185688 14640.0 44.39 16.84 \n849 0.181214 13960.0 46.65 18.90 \n850 0.347570 21060.0 19.12 20.27 \n851 0.253057 22021.0 19.12 21.77 \n\n[852 rows x 21 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
地区所属集团投产时间机组容量机组类型参数分类冷却方式锅炉类型时间发电量...标煤量出力系数煤种入炉煤低位热值燃煤挥发份Var燃煤灰份AarCO2_em_air入炉煤低位热值_new燃煤挥发份Var_new燃煤灰份Aar_new
0北京华能1998/1/20 0:00165供热式超高压水冷煤粉2016.051841.70000...2.580497e+0575.84烟煤23380.027.599.940.23506623380.027.599.94
1北京华能1998/1/20 0:00165供热式超高压水冷煤粉2016.047387.95000...2.126813e+0574.50烟煤23380.027.599.940.22620723380.027.599.94
2北京华能1998/12/20 0:00220供热式超高压水冷煤粉2016.0115498.04000...4.410925e+0578.76烟煤23380.027.599.940.22095423380.027.599.94
3北京华能1999/6/26 0:00220供热式超高压水冷煤粉2016.0120884.07000...4.707218e+0581.41烟煤23380.027.599.940.21629823380.027.599.94
4辽宁大唐2009/4/30 0:00300供热式亚临界水冷煤粉2016.0111218.55000...3.726990e+0571.27褐煤14122.024.7819.160.23875514122.024.7819.16
..................................................................
847新疆NaNNaN1320纯凝式超临界间接空冷煤粉NaN704381.26290...2.283076e+06NaN褐煤19970.035.339.050.19645219970.035.339.05
848辽宁NaNNaN700供热式超临界水冷煤粉NaN350000.00000...1.328747e+06NaN褐煤14640.044.3916.840.18568814640.044.3916.84
849内蒙NaNNaN700供热式超临界直接空冷煤粉NaN385000.00000...1.362009e+06NaN褐煤13960.046.6518.900.18121413960.046.6518.90
850山东NaNNaN40供热式超高压水冷循环流化床NaN17000.00000...1.810834e+05NaN烟煤21060.019.1220.270.34757021060.019.1220.27
851浙江NaNNaN70供热式超高压水冷循环流化床NaN35788.81469...3.502535e+05NaN烟煤22021.019.1221.770.25305722021.019.1221.77
\n

852 rows × 21 columns

\n
" + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_data" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 78, + "outputs": [], + "source": [ + "new_use_data = total_data.groupby(use_col + ['煤种'])['CO2_em_air'].mean().reset_index().drop(columns=['入炉煤低位热值_new', '燃煤挥发份Var_new', '燃煤灰份Aar_new'])\n", + "new_use_data.rename(columns={0:'CO2_em_air'}, inplace=True)\n", + "new_use_data['coal_params'] = new_use_data['煤种'].apply(lambda x: coal_params_dict.get(x))\n", + "new_use_data.drop(columns='煤种', inplace=True)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 79, + "outputs": [], + "source": [ + "new_data = new_use_data.explode(column='coal_params')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 80, + "outputs": [ + { + "data": { + "text/plain": " 地区 机组类型 参数分类 冷却方式 锅炉类型 机组容量 coal_params\n0 上海 纯凝式 亚临界 水冷 煤粉 320 [12771.0, 21.26, 33.55]\n0 上海 纯凝式 亚临界 水冷 煤粉 320 [15000.0, 23.46, 19.04]\n0 上海 纯凝式 亚临界 水冷 煤粉 320 [16100.0, 23.33, 18.73]\n0 上海 纯凝式 亚临界 水冷 煤粉 320 [16190.0, 23.33, 18.73]\n0 上海 纯凝式 亚临界 水冷 煤粉 320 [16641.0, 19.13, 39.12]\n.. ... ... ... ... ... ... ...\n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 [23253.68, 23.72, 18.45]\n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 [23380.0, 27.59, 9.94]\n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 [23487.51, 29.27, 20.97]\n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 [23650.0, 28.87, 7.91]\n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 [23656.14, 29.27, 20.97]\n\n[208875 rows x 7 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
地区机组类型参数分类冷却方式锅炉类型机组容量coal_params
0上海纯凝式亚临界水冷煤粉320[12771.0, 21.26, 33.55]
0上海纯凝式亚临界水冷煤粉320[15000.0, 23.46, 19.04]
0上海纯凝式亚临界水冷煤粉320[16100.0, 23.33, 18.73]
0上海纯凝式亚临界水冷煤粉320[16190.0, 23.33, 18.73]
0上海纯凝式亚临界水冷煤粉320[16641.0, 19.13, 39.12]
........................
646黑龙江纯凝式超高压水冷煤粉210[23253.68, 23.72, 18.45]
646黑龙江纯凝式超高压水冷煤粉210[23380.0, 27.59, 9.94]
646黑龙江纯凝式超高压水冷煤粉210[23487.51, 29.27, 20.97]
646黑龙江纯凝式超高压水冷煤粉210[23650.0, 28.87, 7.91]
646黑龙江纯凝式超高压水冷煤粉210[23656.14, 29.27, 20.97]
\n

208875 rows × 7 columns

\n
" + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_data.drop(columns=['CO2_em_air'])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 81, + "outputs": [], + "source": [ + "norm_data = pd.concat([new_data, new_data.coal_params.apply(pd.Series, index=['入炉煤低位热值_new', '燃煤挥发份Var_new', '燃煤灰份Aar_new'])], axis=1).drop(columns='coal_params')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 82, + "outputs": [ + { + "data": { + "text/plain": " 地区 机组类型 参数分类 冷却方式 锅炉类型 机组容量 CO2_em_air 入炉煤低位热值_new 燃煤挥发份Var_new \\\n0 上海 纯凝式 亚临界 水冷 煤粉 320 0.266602 12771.00 21.26 \n0 上海 纯凝式 亚临界 水冷 煤粉 320 0.266602 15000.00 23.46 \n0 上海 纯凝式 亚临界 水冷 煤粉 320 0.266602 16100.00 23.33 \n0 上海 纯凝式 亚临界 水冷 煤粉 320 0.266602 16190.00 23.33 \n0 上海 纯凝式 亚临界 水冷 煤粉 320 0.266602 16641.00 19.13 \n.. ... ... ... ... ... ... ... ... ... \n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 0.278763 23253.68 23.72 \n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 0.278763 23380.00 27.59 \n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 0.278763 23487.51 29.27 \n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 0.278763 23650.00 28.87 \n646 黑龙江 纯凝式 超高压 水冷 煤粉 210 0.278763 23656.14 29.27 \n\n 燃煤灰份Aar_new \n0 33.55 \n0 19.04 \n0 18.73 \n0 18.73 \n0 39.12 \n.. ... \n646 18.45 \n646 9.94 \n646 20.97 \n646 7.91 \n646 20.97 \n\n[208875 rows x 10 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
地区机组类型参数分类冷却方式锅炉类型机组容量CO2_em_air入炉煤低位热值_new燃煤挥发份Var_new燃煤灰份Aar_new
0上海纯凝式亚临界水冷煤粉3200.26660212771.0021.2633.55
0上海纯凝式亚临界水冷煤粉3200.26660215000.0023.4619.04
0上海纯凝式亚临界水冷煤粉3200.26660216100.0023.3318.73
0上海纯凝式亚临界水冷煤粉3200.26660216190.0023.3318.73
0上海纯凝式亚临界水冷煤粉3200.26660216641.0019.1339.12
.................................
646黑龙江纯凝式超高压水冷煤粉2100.27876323253.6823.7218.45
646黑龙江纯凝式超高压水冷煤粉2100.27876323380.0027.599.94
646黑龙江纯凝式超高压水冷煤粉2100.27876323487.5129.2720.97
646黑龙江纯凝式超高压水冷煤粉2100.27876323650.0028.877.91
646黑龙江纯凝式超高压水冷煤粉2100.27876323656.1429.2720.97
\n

208875 rows × 10 columns

\n
" + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "norm_data" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 83, + "outputs": [], + "source": [ + "for col in num_cols:\n", + " norm_data[col] = np.log1p(norm_data[col])\n", + " # total_data[col] = (total_data[col] - total_data[col].min()) / (total_data[col].max() - total_data[col].min())\n", + "norm_data_dummy = pd.get_dummies(norm_data, columns=object_cols)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 84, + "outputs": [ + { + "data": { + "text/plain": " 机组容量 CO2_em_air 入炉煤低位热值_new 燃煤挥发份Var_new 燃煤灰份Aar_new 地区_上海 \\\n0 5.771441 0.236338 9.455011 3.102791 3.542408 1 \n0 5.771441 0.236338 9.615872 3.197039 2.997730 1 \n0 5.771441 0.236338 9.686637 3.191710 2.982140 1 \n0 5.771441 0.236338 9.692211 3.191710 2.982140 1 \n0 5.771441 0.236338 9.719685 3.002211 3.691875 1 \n.. ... ... ... ... ... ... \n646 5.351858 0.245893 10.054262 3.207613 2.967847 0 \n646 5.351858 0.245893 10.059679 3.353057 2.392426 0 \n646 5.351858 0.245893 10.064267 3.410157 3.089678 0 \n646 5.351858 0.245893 10.071161 3.396855 2.187174 0 \n646 5.351858 0.245893 10.071420 3.410157 3.089678 0 \n\n 地区_云南 地区_内蒙 地区_北京 地区_吉林 ... 机组类型_纯凝式 参数分类_亚临界 参数分类_超临界 参数分类_超超临界 \\\n0 0 0 0 0 ... 1 1 0 0 \n0 0 0 0 0 ... 1 1 0 0 \n0 0 0 0 0 ... 1 1 0 0 \n0 0 0 0 0 ... 1 1 0 0 \n0 0 0 0 0 ... 1 1 0 0 \n.. ... ... ... ... ... ... ... ... ... \n646 0 0 0 0 ... 1 0 0 0 \n646 0 0 0 0 ... 1 0 0 0 \n646 0 0 0 0 ... 1 0 0 0 \n646 0 0 0 0 ... 1 0 0 0 \n646 0 0 0 0 ... 1 0 0 0 \n\n 参数分类_超高压 冷却方式_水冷 冷却方式_直接空冷 冷却方式_间接空冷 锅炉类型_循环流化床 锅炉类型_煤粉 \n0 0 1 0 0 0 1 \n0 0 1 0 0 0 1 \n0 0 1 0 0 0 1 \n0 0 1 0 0 0 1 \n0 0 1 0 0 0 1 \n.. ... ... ... ... ... ... \n646 1 1 0 0 0 1 \n646 1 1 0 0 0 1 \n646 1 1 0 0 0 1 \n646 1 1 0 0 0 1 \n646 1 1 0 0 0 1 \n\n[208875 rows x 45 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
机组容量CO2_em_air入炉煤低位热值_new燃煤挥发份Var_new燃煤灰份Aar_new地区_上海地区_云南地区_内蒙地区_北京地区_吉林...机组类型_纯凝式参数分类_亚临界参数分类_超临界参数分类_超超临界参数分类_超高压冷却方式_水冷冷却方式_直接空冷冷却方式_间接空冷锅炉类型_循环流化床锅炉类型_煤粉
05.7714410.2363389.4550113.1027913.54240810000...1100010001
05.7714410.2363389.6158723.1970392.99773010000...1100010001
05.7714410.2363389.6866373.1917102.98214010000...1100010001
05.7714410.2363389.6922113.1917102.98214010000...1100010001
05.7714410.2363389.7196853.0022113.69187510000...1100010001
..................................................................
6465.3518580.24589310.0542623.2076132.96784700000...1000110001
6465.3518580.24589310.0596793.3530572.39242600000...1000110001
6465.3518580.24589310.0642673.4101573.08967800000...1000110001
6465.3518580.24589310.0711613.3968552.18717400000...1000110001
6465.3518580.24589310.0714203.4101573.08967800000...1000110001
\n

208875 rows × 45 columns

\n
" + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "norm_data_dummy" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 85, + "outputs": [], + "source": [ + "new_xgb_data = xgb.DMatrix(norm_data_dummy[feature_cols])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 86, + "outputs": [], + "source": [ + "norm_data.drop(columns='CO2_em_air', inplace=True)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 87, + "outputs": [], + "source": [ + "norm_data['co2_pred'] = gb_model.predict(new_xgb_data)\n", + "normaled_data = norm_data.drop(columns=['入炉煤低位热值_new', '燃煤挥发份Var_new', '燃煤灰份Aar_new']).groupby([x for x in use_col if x not in ['CO2_em_air', '入炉煤低位热值_new', '燃煤挥发份Var_new', '燃煤灰份Aar_new']])['co2_pred'].mean()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "normaled_data.reset_index().to_csv('./data/去煤种化数据.csv', encoding='utf-8-sig', index=False)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.7.13 ('py37')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.13" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "993bd31d5df1020fab369d79a34ff0a2a159e1798f3e25d3ad4b7751d38184c9" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/省际测试.ipynb b/省际测试.ipynb new file mode 100644 index 0000000..c1dcf01 --- /dev/null +++ b/省际测试.ipynb @@ -0,0 +1,235 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "outputs": [], + "source": [ + "import pandas as pd" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 2, + "outputs": [], + "source": [ + "data = pd.read_csv('./供热测试结果.csv')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 3, + "outputs": [ + { + "data": { + "text/plain": " 0 1\n0 0.072858 0.072700\n1 0.073347 0.075045\n2 0.082159 0.080671\n3 0.084120 0.081944\n4 0.065845 0.066739\n.. ... ...\n408 0.066066 0.066927\n409 0.084331 0.082709\n410 0.069216 0.069256\n411 0.065259 0.066203\n412 0.069608 0.071754\n\n[413 rows x 2 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
01
00.0728580.072700
10.0733470.075045
20.0821590.080671
30.0841200.081944
40.0658450.066739
.........
4080.0660660.066927
4090.0843310.082709
4100.0692160.069256
4110.0652590.066203
4120.0696080.071754
\n

413 rows × 2 columns

\n
" + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 4, + "outputs": [], + "source": [ + "from sklearn.metrics import r2_score" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 7, + "outputs": [ + { + "data": { + "text/plain": "0.8483477508497194" + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "r2_score(data.values[:,1], data.values[:,0])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 8, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Help on function r2_score in module sklearn.metrics._regression:\n", + "\n", + "r2_score(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average')\n", + " :math:`R^2` (coefficient of determination) regression score function.\n", + " \n", + " Best possible score is 1.0 and it can be negative (because the\n", + " model can be arbitrarily worse). A constant model that always\n", + " predicts the expected value of y, disregarding the input features,\n", + " would get a :math:`R^2` score of 0.0.\n", + " \n", + " Read more in the :ref:`User Guide `.\n", + " \n", + " Parameters\n", + " ----------\n", + " y_true : array-like of shape (n_samples,) or (n_samples, n_outputs)\n", + " Ground truth (correct) target values.\n", + " \n", + " y_pred : array-like of shape (n_samples,) or (n_samples, n_outputs)\n", + " Estimated target values.\n", + " \n", + " sample_weight : array-like of shape (n_samples,), default=None\n", + " Sample weights.\n", + " \n", + " multioutput : {'raw_values', 'uniform_average', 'variance_weighted'}, array-like of shape (n_outputs,) or None, default='uniform_average'\n", + " \n", + " Defines aggregating of multiple output scores.\n", + " Array-like value defines weights used to average scores.\n", + " Default is \"uniform_average\".\n", + " \n", + " 'raw_values' :\n", + " Returns a full set of scores in case of multioutput input.\n", + " \n", + " 'uniform_average' :\n", + " Scores of all outputs are averaged with uniform weight.\n", + " \n", + " 'variance_weighted' :\n", + " Scores of all outputs are averaged, weighted by the variances\n", + " of each individual output.\n", + " \n", + " .. versionchanged:: 0.19\n", + " Default value of multioutput is 'uniform_average'.\n", + " \n", + " Returns\n", + " -------\n", + " z : float or ndarray of floats\n", + " The :math:`R^2` score or ndarray of scores if 'multioutput' is\n", + " 'raw_values'.\n", + " \n", + " Notes\n", + " -----\n", + " This is not a symmetric function.\n", + " \n", + " Unlike most other scores, :math:`R^2` score may be negative (it need not\n", + " actually be the square of a quantity R).\n", + " \n", + " This metric is not well-defined for single samples and will return a NaN\n", + " value if n_samples is less than two.\n", + " \n", + " References\n", + " ----------\n", + " .. [1] `Wikipedia entry on the Coefficient of determination\n", + " `_\n", + " \n", + " Examples\n", + " --------\n", + " >>> from sklearn.metrics import r2_score\n", + " >>> y_true = [3, -0.5, 2, 7]\n", + " >>> y_pred = [2.5, 0.0, 2, 8]\n", + " >>> r2_score(y_true, y_pred)\n", + " 0.948...\n", + " >>> y_true = [[0.5, 1], [-1, 1], [7, -6]]\n", + " >>> y_pred = [[0, 2], [-1, 2], [8, -5]]\n", + " >>> r2_score(y_true, y_pred,\n", + " ... multioutput='variance_weighted')\n", + " 0.938...\n", + " >>> y_true = [1, 2, 3]\n", + " >>> y_pred = [1, 2, 3]\n", + " >>> r2_score(y_true, y_pred)\n", + " 1.0\n", + " >>> y_true = [1, 2, 3]\n", + " >>> y_pred = [2, 2, 2]\n", + " >>> r2_score(y_true, y_pred)\n", + " 0.0\n", + " >>> y_true = [1, 2, 3]\n", + " >>> y_pred = [3, 2, 1]\n", + " >>> r2_score(y_true, y_pred)\n", + " -3.0\n", + "\n" + ] + } + ], + "source": [ + "help(r2_score)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/计算碳排放.ipynb b/计算碳排放.ipynb new file mode 100644 index 0000000..a5506df --- /dev/null +++ b/计算碳排放.ipynb @@ -0,0 +1,701 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "outputs": [], + "source": [ + "import pandas as pd" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 2, + "outputs": [], + "source": [ + "import numpy as np\n", + "import time" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "$E = E_{燃烧} + E_{脱硫} + E_{电}$ \\\n", + "$E_{燃烧} = \\sum_i (AD_i\\times EF_i)$ \\\n", + "$AD_i = FC_i \\times NCV_i \\times 10^{-6}$ 消耗量*低位热值\n", + "$EF_i = CC_i \\times OF_i \\times \\frac{44}{12}$ 单位热值含碳量 * 碳氧化率" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 3, + "outputs": [], + "source": [ + "def cal_ad(fc, ncv):\n", + " return fc * ncv * 1e-6" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 4, + "outputs": [], + "source": [ + "def cal_ef(cc, of):\n", + " return cc * of * 44 / 12" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 5, + "outputs": [], + "source": [ + "cc_map = {\n", + " \"无烟煤\": 27.49,\n", + " \"烟煤\": 26.18,\n", + " \"褐煤\": 27.97,\n", + " \"贫煤\": 26.0,\n", + "}" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 6, + "outputs": [], + "source": [ + "data = pd.read_excel('./total_data.xlsx')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 7, + "outputs": [], + "source": [ + "data['入炉煤低位热值(kJ/kg)'] = data['入炉煤低位热值(kJ/kg)'].apply(lambda x: x*1000 if x < 100 else x*1)\n", + "data['燃煤灰份Aar(%)'] = data['燃煤灰份Aar(%)'].apply(lambda x: x / 1000 if x > 10000 else x*1)\n", + "data['燃煤挥发份Var(%)'] = data['燃煤挥发份Var(%)'].apply(lambda x: x / 1000 if x > 10000 else x*1)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 8, + "outputs": [], + "source": [ + "def cal_ctype(ncv, vdaf, ash):\n", + " if pd.isna(ncv) or pd.isna(vdaf) or pd.isna(ash):\n", + " return pd.NA\n", + " else:\n", + " if vdaf / (1 - ash/100 - 0.07196) < 10:\n", + " return '无烟煤'\n", + " elif vdaf / (1 - ash/100 - 0.06825) < 20:\n", + " return '贫煤'\n", + " elif vdaf / (1 - ash/100 - 0.08679) < 37 and ncv > 16730:\n", + " return '烟煤'\n", + " elif ncv < 16730:\n", + " return '褐煤'\n", + " else:\n", + " return '烟煤'" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 9, + "outputs": [], + "source": [ + "data['煤种'] = data.apply(lambda x: cal_ctype(x['入炉煤低位热值(kJ/kg)'], x['燃煤挥发份Var(%)'], x['燃煤灰份Aar(%)']), axis=1)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 10, + "outputs": [], + "source": [ + "data = data[~data['煤种'].isna()].copy()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 11, + "outputs": [], + "source": [ + "data = data[data['入炉煤低位热值(kJ/kg)']> 8000].copy()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 12, + "outputs": [], + "source": [ + "data = data[~((data['发电用标煤量(t)'].isna())|(data['发电用标煤量(t)']==0))].copy()\n", + "data = data[~((data['发电用标煤量(t)'].isna())|(data['发电用标煤量(t)']==0))].copy()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 13, + "outputs": [ + { + "data": { + "text/plain": "['出力系数(%).1', '出力系数(%).2', '化学系统耗电率 (%).1', '额再热蒸汽温度 (℃).1']" + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "drop_cols = [x for x in data.columns if '.1' in x or '.2' in x]\n", + "drop_cols" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 14, + "outputs": [], + "source": [ + "data.drop(columns=drop_cols, inplace=True)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 15, + "outputs": [], + "source": [ + "data['工业供热量'].fillna(0, inplace=True)\n", + "data['采暖供热量'].fillna(0, inplace=True)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 16, + "outputs": [ + { + "data": { + "text/plain": "array([ 56, 96, 122, ..., 16724, 16725, 16837], dtype=int64)" + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "drop_index = data[(data['发电量(万kWh)']<10000)|(data['总供热量']<=10000)|(data['供热用标煤量(t)']==0)].index.values\n", + "drop_index" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 17, + "outputs": [], + "source": [ + "data.drop(index=drop_index, inplace=True)\n", + "data.reset_index(inplace=True, drop=True)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 18, + "outputs": [], + "source": [ + "data['发电碳排放因子(kg/kWh)'] = data.apply(lambda x: (cal_ad(x['发电用标煤量(t)'], x['入炉煤低位热值(kJ/kg)']) * cal_ef(cc_map.get(x['煤种']), 0.98))/x['发电量(万kWh)']/10, axis=1)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 19, + "outputs": [], + "source": [ + "data['供热碳排放因子(kg/MJ)'] = data.apply(lambda x:(cal_ad(x['供热用标煤量(t)'], x['入炉煤低位热值(kJ/kg)']) * cal_ef(cc_map.get(x['煤种']), 0.98))/x['总供热量'] if x['总供热量'] != 0 else 0, axis=1)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 20, + "outputs": [ + { + "data": { + "text/plain": " 总供热量 供热碳排放因子(kg/MJ)\n0 8.294556e+05 0.076843\n1 8.789928e+04 0.077676\n2 8.481764e+05 0.074823\n3 4.473469e+05 0.081628\n4 7.157164e+05 0.081103\n... ... ...\n7252 1.532303e+06 0.078776\n7253 2.147545e+06 0.076622\n7254 2.131207e+06 0.074772\n7255 3.039811e+06 0.091482\n7256 3.039813e+06 0.091483\n\n[7257 rows x 2 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
总供热量供热碳排放因子(kg/MJ)
08.294556e+050.076843
18.789928e+040.077676
28.481764e+050.074823
34.473469e+050.081628
47.157164e+050.081103
.........
72521.532303e+060.078776
72532.147545e+060.076622
72542.131207e+060.074772
72553.039811e+060.091482
72563.039813e+060.091483
\n

7257 rows × 2 columns

\n
" + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[['总供热量', '供热碳排放因子(kg/MJ)']]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 21, + "outputs": [ + { + "data": { + "text/plain": "126 0.460130\n127 0.480800\n128 0.493493\n129 0.487034\n130 0.475439\n131 0.481355\n132 0.450568\n133 0.454952\n134 0.460595\n135 0.478949\n136 0.486923\n137 0.483407\n138 0.488134\n139 0.471598\n140 0.450577\n141 0.461044\nName: 发电碳排放因子(kg/kWh), dtype: float64" + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[data['电厂名称']=='华电内蒙古能源有限公司包头发电分公司']['发电碳排放因子(kg/kWh)']" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 22, + "outputs": [ + { + "data": { + "text/plain": " plant longitude latitude altitude\n0 万方发电厂(焦作爱依斯万方电力有限公司) 113.381649 35.255622 88.0\n1 三河发电有限责任公司 116.860260 39.953617 27.0\n2 上海上电漕泾发电有限公司 121.407593 30.765242 4.0\n3 上海吴泾发电有限责任公司 121.471140 31.065113 3.0\n4 上海吴泾第二发电有限责任公司 121.471340 31.062532 4.0", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
plantlongitudelatitudealtitude
0万方发电厂(焦作爱依斯万方电力有限公司)113.38164935.25562288.0
1三河发电有限责任公司116.86026039.95361727.0
2上海上电漕泾发电有限公司121.40759330.7652424.0
3上海吴泾发电有限责任公司121.47114031.0651133.0
4上海吴泾第二发电有限责任公司121.47134031.0625324.0
\n
" + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "loc_data = pd.read_csv('./电厂机组地理信息.csv')\n", + "loc_data.head()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 23, + "outputs": [], + "source": [ + "loc_data.rename(columns={'plant':'电厂名称'}, inplace=True)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 24, + "outputs": [], + "source": [ + "data = data.merge(loc_data, how='left', on='电厂名称')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 25, + "outputs": [ + { + "data": { + "text/plain": "Index(['发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)', 'longitude', 'latitude',\n 'altitude'],\n dtype='object')" + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.columns[-5:]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 26, + "outputs": [], + "source": [ + "uni = data.groupby(['电厂名称', '机组编号'])['铭牌容量 (MW)'].unique().to_frame()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 27, + "outputs": [], + "source": [ + "uni['len'] = uni['铭牌容量 (MW)'].apply(len)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 28, + "outputs": [ + { + "data": { + "text/plain": "Empty DataFrame\nColumns: [铭牌容量 (MW), len]\nIndex: []", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
铭牌容量 (MW)len
电厂名称机组编号
\n
" + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "uni[uni.len==2]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 29, + "outputs": [], + "source": [ + "data = data[data['供热碳排放因子(kg/MJ)'] < 0.2].copy()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 30, + "outputs": [], + "source": [ + "import seaborn as sns" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 31, + "outputs": [], + "source": [ + "from scipy.stats import norm" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 32, + "outputs": [ + { + "data": { + "text/plain": "Empty DataFrame\nColumns: [电厂名称, 机组编号, 铭牌容量 (MW), 投产时间, 机组类型, 参数分类, 所处地区, 冷凝器型式, 时间, 发电量(万kWh), 供电量(万kWh), 标煤量(t), 发电用标煤量(t), 供热用标煤量(t), 利用小时(h), 平均负荷(MW), 出力系数(%), 工业供热量, 工业热电比(%), 采暖供热量, 采暖热电比(%), 总热电比(%), 总供热量, 供热煤耗, 给水泵汽轮机总耗热量, 供电煤耗gce/(kWh), 综合厂用电率(%), 发电厂用电率(%), 供热厂用电率(%), 非生产厂用电率(%), 最新THA工况二类修正后汽机热耗率kJ/KWh, 点火用油(kg/万kWh), 助燃用油(kg/万kWh), 主蒸汽压力(MPa), 主蒸汽温度(℃), 再热蒸汽温度(℃), 高加投入率(%), 给水温度(℃), 真空严密性V(Pa/min), 真空度(%), 凝汽器端差(℃), 凝结水过冷度(℃), 发电补给水率(%), 发电综合耗水率, 排烟温度(℃), 飞灰含碳量(%), 空预器漏风率(%), 过热器减温水量(t/h), 再热器减温水量(t/h), 入厂煤低位热值(kJ/kg), 入炉煤低位热值(kJ/kg), 燃煤挥发份Var(%), 燃煤灰份Aar(%), 燃煤低位热值Qar,net(kJ/kg), 燃煤硫份Sar(%), 锅炉专业主要辅机耗电率 送风机耗电率(%), 锅炉专业主要辅机耗电率 引风机耗电率(%), 锅炉专业主要辅机耗电率 一次风机耗电率(%), 锅炉专业主要辅机耗电率 炉水泵耗电率(%), 锅炉专业主要辅机耗电率 给煤机耗电率(%), 锅炉专业主要辅机耗电率 磨煤机耗电率(%), 锅炉专业主要辅机耗电率 电除尘器耗电率(%), 锅炉专业主要辅机耗电率 除灰系统耗电率(%), 汽机专业主要辅机耗电率 凝结水泵耗电率(%), 汽机专业主要辅机耗电率 前置泵耗电率(%), 汽机专业主要辅机耗电率 电动给水泵耗电率(%), 汽机专业主要辅机耗电率 循环水泵耗电率(%), 汽机专业主要辅机耗电率 空冷风机耗电率(%), 汽机专业主要辅机耗电率 热网循环水泵耗电率(%), 环保专业耗电率 脱硫系统耗电率(%), 环保专业耗电率 脱销系统耗电率(%), 输煤专业耗电率输煤系统耗电率(%), 化学系统耗电率 (%), 企业编码, 简称, 制造厂家, 型号, 型式, 最大连续出力B-MCR(t/h), 设计效率(%), 工质流动方式, 额定主蒸汽压力 (MPa), 额再热蒸汽温度 (℃), 额定再热蒸汽压力 (MPa), 额再热蒸汽温度 (℃), 点火方式, 燃烧方式, 设计燃煤种类, 设计燃煤灰份(收到基)(%), 设计燃煤挥发份)(收到基)(%), 设计燃煤低位热值(收到基)(kJ/kg), 排渣方式, 除灰方式, 空预器制造厂家, 空预器型号, 空预器型式, 空预器设计漏风率(%), 磨煤机制造厂家, 磨煤机型号, 磨煤机型式, ...]\nIndex: []\n\n[0 rows x 134 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
电厂名称机组编号铭牌容量 (MW)投产时间机组类型参数分类所处地区冷凝器型式时间发电量(万kWh)...引风机最大风压(Pa)引风机最大流量(m3/S)引风机电机电压(V)引风机电机功率(KW)煤种发电碳排放因子(kg/kWh)供热碳排放因子(kg/MJ)longitudelatitudealtitude
\n

0 rows × 134 columns

\n
" + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[data['供热碳排放因子(kg/MJ)'] <= 0]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 33, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\ipykernel_launcher.py:1: UserWarning: \n", + "\n", + "`distplot` is a deprecated function and will be removed in seaborn v0.14.0.\n", + "\n", + "Please adapt your code to use either `displot` (a figure-level function with\n", + "similar flexibility) or `histplot` (an axes-level function for histograms).\n", + "\n", + "For a guide to updating your code to use the new functions, please see\n", + "https://gist.github.com/mwaskom/de44147ed2974457ad6372750bbe5751\n", + "\n", + " \"\"\"Entry point for launching an IPython kernel.\n" + ] + }, + { + "data": { + "text/plain": "" + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:214: RuntimeWarning: Glyph 20379 missing from current font.\n", + " font.set_text(s, 0.0, flags=flags)\n", + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:214: RuntimeWarning: Glyph 28909 missing from current font.\n", + " font.set_text(s, 0.0, flags=flags)\n", + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:214: RuntimeWarning: Glyph 30899 missing from current font.\n", + " font.set_text(s, 0.0, flags=flags)\n", + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:214: RuntimeWarning: Glyph 25490 missing from current font.\n", + " font.set_text(s, 0.0, flags=flags)\n", + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:214: RuntimeWarning: Glyph 25918 missing from current font.\n", + " font.set_text(s, 0.0, flags=flags)\n", + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:214: RuntimeWarning: Glyph 22240 missing from current font.\n", + " font.set_text(s, 0.0, flags=flags)\n", + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:214: RuntimeWarning: Glyph 23376 missing from current font.\n", + " font.set_text(s, 0.0, flags=flags)\n", + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:183: RuntimeWarning: Glyph 20379 missing from current font.\n", + " font.set_text(s, 0, flags=flags)\n", + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:183: RuntimeWarning: Glyph 28909 missing from current font.\n", + " font.set_text(s, 0, flags=flags)\n", + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:183: RuntimeWarning: Glyph 30899 missing from current font.\n", + " font.set_text(s, 0, flags=flags)\n", + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:183: RuntimeWarning: Glyph 25490 missing from current font.\n", + " font.set_text(s, 0, flags=flags)\n", + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:183: RuntimeWarning: Glyph 25918 missing from current font.\n", + " font.set_text(s, 0, flags=flags)\n", + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:183: RuntimeWarning: Glyph 22240 missing from current font.\n", + " font.set_text(s, 0, flags=flags)\n", + "D:\\miniconda3\\envs\\py37\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:183: RuntimeWarning: Glyph 23376 missing from current font.\n", + " font.set_text(s, 0, flags=flags)\n" + ] + }, + { + "data": { + "text/plain": "
", + "image/png": "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\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.distplot(data['供热碳排放因子(kg/MJ)'], fit=norm)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 34, + "outputs": [], + "source": [ + "data[['电厂名称', '机组编号', '铭牌容量 (MW)', '机组类型', '参数分类', '冷凝器型式', '入炉煤低位热值(kJ/kg)', '燃煤挥发份Var(%)', '燃煤灰份Aar(%)', '煤种', '所处地区', 'longitude', 'latitude', 'altitude','发电碳排放因子(kg/kWh)', '供热碳排放因子(kg/MJ)']].to_csv('./train_data.csv', index=False, encoding='utf-8-sig')" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file