|
@@ -1,5 +1,5 @@
|
|
|
import pandas as pd
|
|
|
-import os
|
|
|
+import os, argparse
|
|
|
import numpy as np
|
|
|
np.random.seed(42)
|
|
|
import matplotlib
|
|
@@ -9,10 +9,15 @@ current_path = os.path.dirname(__file__)
|
|
|
|
|
|
|
|
|
class LimitPower(object):
|
|
|
- def __init__(self, logger, args, weather_power):
|
|
|
- self.logger = logger
|
|
|
- self.args = args
|
|
|
- self.opt = self.args.parse_args_and_yaml()
|
|
|
+ def __init__(self, weather_power):
|
|
|
+ self.opt = argparse.Namespace(**{'usable_power': {
|
|
|
+ 'bias': 3.304,
|
|
|
+ 'coe': 4,
|
|
|
+ 'down_fractile': 30,
|
|
|
+ 'env': 'C_GLOBALR',
|
|
|
+ 'k': 0.03506,
|
|
|
+ 'outliers_threshold': 1.5,
|
|
|
+ 'up_fractile': 70}, 'cap': 30})
|
|
|
self.weather_power = weather_power
|
|
|
|
|
|
def segment_statis(self):
|
|
@@ -76,7 +81,7 @@ class LimitPower(object):
|
|
|
k_final = round(np.mean(ks), 5) # 对清洗后的斜率做平均
|
|
|
# print("++++2:", ks)
|
|
|
delete_x.extend(delete_x1)
|
|
|
- self.logger.info("拟合可用功率,删除的斜率:" + ' '.join([str(x) for x in delete_x]))
|
|
|
+ print("拟合可用功率,删除的斜率:" + ' '.join([str(x) for x in delete_x]))
|
|
|
glob_rp = {k: v for k, v in glob_rp.items() if k not in delete_x} # 清洗后剩下的分段点位
|
|
|
return k_final, bias, glob_rp
|
|
|
|
|
@@ -113,11 +118,11 @@ class LimitPower(object):
|
|
|
new_weather_power.append(row)
|
|
|
new_weather_power = pd.concat(new_weather_power, axis=1).T
|
|
|
new_weather_power.plot.scatter(x=self.opt.usable_power["env"], y='C_REAL_VALUE', c='c')
|
|
|
- plt.savefig(current_path + '/figs/测光法{}.png'.format(name))
|
|
|
+ plt.savefig(current_path + './data/测光法{}.png'.format(name))
|
|
|
new_weather_power = new_weather_power[new_weather_power['c'] == 'red']
|
|
|
number = len(new_weather_power)
|
|
|
- self.logger.info("测光法-未清洗限电前,总共有:{}条数据".format(len(self.weather_power)))
|
|
|
- self.logger.info("测光法-清除限电后保留的点有:" + str(number) + " 占比:" + str(round(number / len(self.weather_power), 2)))
|
|
|
+ print("测光法-未清洗限电前,总共有:{}条数据".format(len(self.weather_power)))
|
|
|
+ print("测光法-清除限电后保留的点有:" + str(number) + " 占比:" + str(round(number / len(self.weather_power), 2)))
|
|
|
return new_weather_power.loc[:, ['C_TIME', 'C_REAL_VALUE', 'C_ABLE_VALUE']]
|
|
|
|
|
|
def clean_limited_power_by_signal(self, name):
|
|
@@ -127,8 +132,8 @@ class LimitPower(object):
|
|
|
weather_power1.plot.scatter(x=self.opt.usable_power["env"], y='C_REAL_VALUE', c='c')
|
|
|
plt.savefig(current_path + '/figs/信号法{}.png'.format(name))
|
|
|
weather_power1 = weather_power1[weather_power1['signal'] == False]
|
|
|
- self.logger.info("信号法-未清洗限电前,总共有:{}条数据".format(len(self.weather_power)))
|
|
|
- self.logger.info("信号法-清除限电后保留的点有:" + str(len(weather_power1)) + " 占比:" + str(round(len(weather_power1) / len(self.weather_power), 2)))
|
|
|
+ print("信号法-未清洗限电前,总共有:{}条数据".format(len(self.weather_power)))
|
|
|
+ print("信号法-清除限电后保留的点有:" + str(len(weather_power1)) + " 占比:" + str(round(len(weather_power1) / len(self.weather_power), 2)))
|
|
|
return weather_power1.loc[:, ['C_TIME', 'C_REAL_VALUE', 'C_ABLE_VALUE']]
|
|
|
|
|
|
def signal_result(self, manual, auto):
|