import os from datetime import datetime import pandas as pd import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.cm as cm from matplotlib.ticker import MultipleLocator from matplotlib.colors import Normalize import matplotlib.ticker as ticker import seaborn as sns import plotly.graph_objects as go from plotly.subplots import make_subplots from geopy.distance import geodesic from .analyst import Analyst from .utils.directoryUtil import DirectoryUtil as dir from confBusiness import * class RatedPowerWindSpeedAnalyst(Analyst): """ 风电机组额定功率风速分析。 秒级scada数据运算太慢,建议使用分钟级scada数据 """ def typeAnalyst(self): return "rated_power_windspeed" def turbinesAnalysis(self, dataFrameMerge, outputAnalysisDir, confData: ConfBusiness): self.draw(dataFrameMerge, outputAnalysisDir, confData) def draw(self, dataFrameMerge: pd.DataFrame, outputAnalysisDir, confData: ConfBusiness): """ 绘制并保存额定满发风速功率分布图,根据环境温度是否大于等于25℃。 参数: dataFrameMerge (pd.DataFrame): 包含数据的DataFrame,需要包含设备名、风速和功率列。 outputAnalysisDir (str): 分析输出目录。 confData (ConfBusiness): 配置 """ y_name='power' # 根据环境温度筛选数据 over_temp = dataFrameMerge[(dataFrameMerge[confData.field_env_temp] >= 25) & ( dataFrameMerge[confData.field_wind_speed] >= confData.rated_WindSpeed)] below_temp = dataFrameMerge[(dataFrameMerge[confData.field_env_temp] < 25) & ( dataFrameMerge[confData.field_wind_speed] >= confData.rated_WindSpeed)] # 绘制环境温度大于等于25℃的功率分布图 # fig, ax = plt.subplots(figsize=(16, 8)) fig, ax = plt.subplots() sns.boxplot(y=confData.field_power, x=Field_NameOfTurbine, data=over_temp, fliersize=0, ax=ax, medianprops={'linestyle': '-', 'color': 'red'}, boxprops={'color': 'dodgerblue', 'facecolor': 'dodgerblue'}) # ax.yaxis.set_major_locator(ticker.MultipleLocator(20)) # ax.set_ylim(confData.rated_power*0.55, confData.rated_power*1.1) ax.set_ylabel(y_name) ax.set_title('rated wind speed and power distribute(10min)(ambient temperature>=25℃)') plt.xticks(rotation=45) # 旋转45度 plt.savefig(os.path.join(outputAnalysisDir, "额定满发风速功率分布(10min)(环境温度大于25度).png"), bbox_inches='tight', dpi=120) plt.close() # 绘制环境温度小于25℃的功率分布图 fig, ax = plt.subplots() sns.boxplot(y=confData.field_power, x=Field_NameOfTurbine, data=below_temp, fliersize=0, ax=ax, medianprops={'linestyle': '-', 'color': 'red'}, boxprops={'color': 'dodgerblue', 'facecolor': 'dodgerblue'}) # ax.yaxis.set_major_locator(ticker.MultipleLocator(10)) # ax.set_ylim(confData.rated_power*0.6, confData.rated_power*1.1) ax.set_ylabel(y_name) ax.set_title('rated wind speed and power distribute(10min)(ambient temperature<25℃)') plt.xticks(rotation=45) # 旋转45度 plt.savefig(os.path.join(outputAnalysisDir, "额定满发风速功率分布(10min)(环境温度小于25度).png"), bbox_inches='tight', dpi=120) plt.close()