ratedWindSpeedAnalyst.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import os
  2. from datetime import datetime
  3. import pandas as pd
  4. import numpy as np
  5. import pandas as pd
  6. import matplotlib.pyplot as plt
  7. import matplotlib.cm as cm
  8. from matplotlib.ticker import MultipleLocator
  9. from matplotlib.colors import Normalize
  10. import seaborn as sns
  11. import plotly.graph_objects as go
  12. from plotly.subplots import make_subplots
  13. from geopy.distance import geodesic
  14. from behavior.analyst import Analyst
  15. from utils.directoryUtil import DirectoryUtil as dir
  16. from algorithmContract.confBusiness import *
  17. class RatedWindSpeedAnalyst(Analyst):
  18. """
  19. 风电机组额定风速分析。
  20. 秒级scada数据运算太慢,建议使用分钟级scada数据
  21. """
  22. def typeAnalyst(self):
  23. return "rated_windspeed"
  24. def turbinesAnalysis(self, dataFrameMerge, outputAnalysisDir, confData: ConfBusiness):
  25. self.draw(dataFrameMerge, outputAnalysisDir, confData)
  26. def draw(self, dataFrameMerge: pd.DataFrame, outputAnalysisDir, confData: ConfBusiness):
  27. """
  28. 绘制并保存满发风速区间数据计数图。
  29. 参数:
  30. dataFrameMerge (pd.DataFrame): 包含数据的DataFrame,需要包含设备名、风速和功率列。
  31. outputAnalysisDir (str): 分析输出目录。
  32. confData (ConfBusiness): 配置
  33. """
  34. # 初始化结果列表
  35. res = []
  36. # 按设备名分组并计算统计数据
  37. grouped = dataFrameMerge.groupby(Field_NameOfTurbine)
  38. for name, group in grouped:
  39. group = group[group[confData.field_wind_speed] >= 11]
  40. res.append([name, group[confData.field_power].min(), group[confData.field_power].max(
  41. ), group[confData.field_power].mean(), group.shape[0]])
  42. # 创建结果DataFrame
  43. data = pd.DataFrame(res, columns=[
  44. Field_NameOfTurbine, 'power-min', 'power-max', 'power-mean', 'count'])
  45. # 绘制风速区间数据计数图
  46. fig, ax = plt.subplots()
  47. sns.barplot(x=Field_NameOfTurbine, y='count',
  48. data=data, ax=ax, color='dodgerblue')
  49. ax.set_title('Rated - full wind speed interval data count')
  50. ax.grid(True)
  51. # 旋转45度
  52. plt.xticks(rotation=45)
  53. # 保存图表
  54. plt.savefig(os.path.join(outputAnalysisDir, "风速区间数据计数.png"),
  55. bbox_inches='tight', dpi=120)
  56. plt.close()