windSpeedAnalyst.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import os
  2. import pandas as pd
  3. import numpy as np
  4. import plotly.graph_objects as go
  5. from plotly.subplots import make_subplots
  6. import plotly.express as px
  7. from behavior.analyst import Analyst
  8. from utils.directoryUtil import DirectoryUtil as dir
  9. from algorithmContract.confBusiness import *
  10. class WindSpeedAnalyst(Analyst):
  11. def typeAnalyst(self):
  12. return "wind_speed"
  13. def turbinesAnalysis(self, dataFrameMerge, outputAnalysisDir, confData: ConfBusiness):
  14. self.drawWindSpeedAnalysis(dataFrameMerge, outputAnalysisDir, confData)
  15. def drawWindSpeedAnalysis(self, dataFrameMerge: pd.DataFrame, outputAnalysisDir, confData: ConfBusiness):
  16. # 检查所需列是否存在
  17. required_columns = {Field_NameOfTurbine,confData.field_wind_speed}
  18. if not required_columns.issubset(dataFrameMerge.columns):
  19. raise ValueError(f"DataFrame缺少必要的列。需要的列有: {required_columns}")
  20. # 确保'风速'列是数值类型
  21. dataFrameMerge[confData.field_wind_speed] = pd.to_numeric(dataFrameMerge[confData.field_wind_speed], errors='coerce')
  22. # 计算每个turbine_name的平均风速
  23. average_wind_speed = dataFrameMerge.groupby(Field_NameOfTurbine)[confData.field_wind_speed].mean().reset_index()
  24. # 使用plotly绘制柱状图
  25. fig = px.bar(average_wind_speed, x=Field_NameOfTurbine, y=confData.field_wind_speed, title='Turbine Average Wind Speed')
  26. # 更新x轴和y轴的标签
  27. fig.update_xaxes(title_text='Turbine Name', tickangle=-45)
  28. fig.update_yaxes(title_text='Average Wind Speed (m/s)')
  29. # 如果需要进一步调整标题样式或位置(尽管默认情况下标题是居中的)
  30. # 可以使用 update_layout 来设置标题的 x 坐标(xanchor)为 'center' 来确保居中
  31. fig.update_layout(title_x=0.5) # 设置标题的x位置为图的中心
  32. # 保存图像
  33. output_file = os.path.join(outputAnalysisDir, f"WindSpeedAvg_Turbines.png")
  34. fig.write_image(output_file)