| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- 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()
|