David 2 mesiacov pred
rodič
commit
4d953671ce

+ 3 - 3
app/common/limited_power_solar.py

@@ -6,7 +6,7 @@ import matplotlib
 matplotlib.use('Agg')
 import matplotlib.pyplot as plt
 current_path = os.path.dirname(__file__)
-
+parent_path = os.path.dirname(current_path)
 
 class LimitPower(object):
     def __init__(self, logger, args, weather_power):
@@ -113,12 +113,12 @@ 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_s["env"], y='Power', c='c')
-        plt.savefig(current_path + '/figs/测光法{}.png'.format(name))
+        plt.savefig(parent_path + '/figs/测光法{}.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)))
-        return new_weather_power.loc[:, ['C_TIME', self.opt.target]]
+        return new_weather_power.loc[:, [self.opt.col_time, self.opt.target]]
 
 
 

+ 5 - 6
app/common/limited_power_wind.py

@@ -4,14 +4,14 @@ import pandas as pd
 import numpy as np
 import matplotlib.pyplot as plt
 import pickle
+import argparse
 current_path = os.path.dirname(__file__)
-
+parent_path = os.path.dirname(current_path)
 
 class LimitPower(object):
     def __init__(self, logger, args, weather_power):
         self.logger = logger
-        self.args = args
-        self.opt = self.args.parse_args_and_yaml()
+        self.opt = argparse.Namespace(**args)
         self.weather_power = weather_power
         self.step = self.opt.usable_power_w['step']
         self.segs = np.array([x * self.step for x in range(1, 50)])  # 对风速以50为间隔进行分段
@@ -120,7 +120,6 @@ class LimitPower(object):
     def clean_limited_power(self, name, cluster=False):
         if cluster is True:
             glob_rp = self.segment_statis()
-            self.saveVar(os.path.dirname(current_path) + '/var/glob_rp.pickle', glob_rp)
             self.mapping_relation(glob_rp)
         new_weather_power, number = [], 0
         # fig, ax = plt.subplots()
@@ -137,12 +136,12 @@ 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_w["env"], y='Power', c='c')
-        plt.savefig(current_path + '/figs/测风法{}.png'.format(name))
+        plt.savefig(parent_path + '/figs/测风法{}.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)))
-        return new_weather_power.loc[:, ['C_TIME', self.opt.tagert]]
+        return new_weather_power.loc[:, [self.opt.col_time, self.opt.tagert]]
 
 
 

+ 0 - 7
app/common/neu.yaml

@@ -29,13 +29,6 @@ calculate: []
 cap: 50.0
 col_time: Datetime
 dataloc: ./data
-env_columns:
-- C_TIME
-- C_CELLT
-- C_DIFFUSER
-- C_GLOBALR
-- C_RH
-- C_REAL_VALUE
 full_field: true
 history_hours: 1
 new_field: true

+ 15 - 8
app/model/main.py

@@ -66,10 +66,17 @@ def material(input_file, isDq=True):
         basic_area = pd.read_csv(input_file / basi_area, sep='\s+', header=0)
         return basic_area
 
-def clean_limited_power1(power, env):
-    power['Datetime'] = pd.to_datetime(power['Datetime'])
-    env['Datetime'] = pd.to_datetime(env['Datetime'])
-    power_env = pd.merge(power, env, on='Datetime')
+def clean_power(power, env, plant_id):
+    env_power = pd.merge(env, power, on=args['col_time'])
+    if 'HubSpeed' in env.columns.tolist():
+        from app.common.limited_power_wind import LimitPower
+        lp = LimitPower(logger, args, env_power)
+        power = lp.clean_limited_power(plant_id, True)
+    elif 'Irradiance' in env.columns.tolist():
+        from app.common.limited_power_solar import LimitPower
+        lp = LimitPower(logger, args, env_power)
+        power = lp.clean_limited_power(plant_id, True)
+    return power
 
 
 def input_file_handler(input_file: str):
@@ -77,12 +84,12 @@ def input_file_handler(input_file: str):
     if 'dqyc' in input_file.lower():
         station_info, station_info_d, nwp, nwp_h, power, nwp_v, nwp_v_h, env = material(input_file, True)
         cap = round(station_info['PlantCap'][0], 2)
+        plant_id = int(station_info['PlantID'][0])
         # 含有model,训练
         if 'model' in input_file.lower():
-            # 进行限电清洗
-            if env is not None:
-                pass
-            train_data = pd.merge(nwp_v_h, power, on='Datetime')
+            if env is not None:     # 进行限电清洗
+                power = clean_power(power, env, plant_id)
+            train_data = pd.merge(nwp_v_h, power, on=args['col_time'])
             if args['model_name'] == 'fmi':
                 from app.model.tf_fmi_train import model_training
             elif args['model_name'] == 'cnn':