| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- 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 seaborn as sns
- import plotly.graph_objects as go
- from plotly.subplots import make_subplots
- from geopy.distance import geodesic
- from behavior.analyst import Analyst
- from utils.directoryUtil import DirectoryUtil as dir
- from algorithmContract.confBusiness import *
- class RatedWindSpeedAnalyst(Analyst):
- """
- 风电机组额定风速分析。
- 秒级scada数据运算太慢,建议使用分钟级scada数据
- """
- def typeAnalyst(self):
- return "rated_windspeed"
- def turbinesAnalysis(self, dataFrameMerge, outputAnalysisDir, confData: ConfBusiness):
- self.draw(dataFrameMerge, outputAnalysisDir, confData)
- def draw(self, dataFrameMerge: pd.DataFrame, outputAnalysisDir, confData: ConfBusiness):
- """
- 绘制并保存满发风速区间数据计数图。
- 参数:
- dataFrameMerge (pd.DataFrame): 包含数据的DataFrame,需要包含设备名、风速和功率列。
- outputAnalysisDir (str): 分析输出目录。
- confData (ConfBusiness): 配置
- """
- # 初始化结果列表
- res = []
- # 按设备名分组并计算统计数据
- grouped = dataFrameMerge.groupby(Field_NameOfTurbine)
- for name, group in grouped:
- group = group[group[confData.field_wind_speed] >= 11]
- res.append([name, group[confData.field_power].min(), group[confData.field_power].max(
- ), group[confData.field_power].mean(), group.shape[0]])
- # 创建结果DataFrame
- data = pd.DataFrame(res, columns=[
- Field_NameOfTurbine, 'power-min', 'power-max', 'power-mean', 'count'])
- # 绘制风速区间数据计数图
- fig, ax = plt.subplots()
- sns.barplot(x=Field_NameOfTurbine, y='count',
- data=data, ax=ax, color='dodgerblue')
- ax.set_title('Rated - full wind speed interval data count')
- ax.grid(True)
- # 旋转45度
- plt.xticks(rotation=45)
- # 保存图表
- plt.savefig(os.path.join(outputAnalysisDir, "风速区间数据计数.png"),
- bbox_inches='tight', dpi=120)
- plt.close()
|