|
@@ -7,6 +7,7 @@ from algorithmContract.contract import Contract
|
|
|
from behavior.analystWithGoodPoint import AnalystWithGoodPoint
|
|
|
from plotly.subplots import make_subplots
|
|
|
from scipy.optimize import curve_fit
|
|
|
+import math
|
|
|
|
|
|
|
|
|
class YawErrorAnalyst(AnalystWithGoodPoint):
|
|
@@ -101,7 +102,7 @@ class YawErrorAnalyst(AnalystWithGoodPoint):
|
|
|
power_dict[k][m] = mean_power
|
|
|
# 检查 yaw_data_value_co 是否为空
|
|
|
if yaw_data_value_co.size == 0:
|
|
|
- print(f"yaw_data_value_co k={k}是空的,无法计算argmax")
|
|
|
+ # print(f"yaw_data_value_co k={k}是空的,无法计算argmax")
|
|
|
continue
|
|
|
else:
|
|
|
max_row = np.argmax(yaw_data_value_co[:, 0])
|
|
@@ -211,6 +212,7 @@ class YawErrorAnalyst(AnalystWithGoodPoint):
|
|
|
results.append({
|
|
|
Field_NameOfTurbine: name[0],
|
|
|
Field_YawError: max_yaw_error_floor
|
|
|
+
|
|
|
})
|
|
|
|
|
|
#对 final_df 中的数据进行可视化
|
|
@@ -230,6 +232,9 @@ class YawErrorAnalyst(AnalystWithGoodPoint):
|
|
|
legend_title='风速区间',
|
|
|
showlegend=True
|
|
|
)
|
|
|
+ # 将NAN转化为空字符串
|
|
|
+ yData = final_df[col].astype(str).replace(["None", "nan", "null", ""], "")
|
|
|
+ print("yData:", yData)
|
|
|
# 确保从 Series 中提取的是具体的值
|
|
|
engineTypeCode = turbineModelInfo.get(Field_MillTypeCode, "")
|
|
|
if isinstance(engineTypeCode, pd.Series):
|
|
@@ -251,7 +256,7 @@ class YawErrorAnalyst(AnalystWithGoodPoint):
|
|
|
"engineCode": name[1],
|
|
|
"title": f'静态偏航误差分析 {name[0]}',
|
|
|
"xData": final_df[self.fieldWindDirFloor].tolist(),
|
|
|
- "yData": final_df[col].tolist(),
|
|
|
+ "yData": yData.tolist(),
|
|
|
"legend": col,
|
|
|
"type": "lines+markers",
|
|
|
|
|
@@ -320,7 +325,12 @@ class YawErrorAnalyst(AnalystWithGoodPoint):
|
|
|
# 初始化一个空的DataFrame,指定列名
|
|
|
columns = [Field_NameOfTurbine, Field_YawError]
|
|
|
dataFrameResult = pd.DataFrame(results, columns=columns)
|
|
|
-
|
|
|
+ # 新增三列,分别表示 [0,3], (3,5], (5, 正无穷)
|
|
|
+ dataFrameResult['[0,3]'] = np.where((abs(dataFrameResult[Field_YawError]) >= 0) & (abs(dataFrameResult[Field_YawError]) <= 3), dataFrameResult[Field_YawError], 0)
|
|
|
+ dataFrameResult['(3,5]'] = np.where((abs(dataFrameResult[Field_YawError]) > 3) & (abs(dataFrameResult[Field_YawError]) <= 5), dataFrameResult[Field_YawError], 0)
|
|
|
+ dataFrameResult['(5, )'] = np.where(abs(dataFrameResult[Field_YawError]) > 5, dataFrameResult[Field_YawError], 0)
|
|
|
+ dataFrameResult["powerloss"]=((1 - np.cos(np.radians(dataFrameResult[Field_YawError])) ** 2) * 100).round(2)
|
|
|
+ print("损失电量:",dataFrameResult["powerloss"])
|
|
|
filePathOfYawError = os.path.join(
|
|
|
outputAnalysisDir, f"yaw_error_result{CSVSuffix}")
|
|
|
dataFrameResult.to_csv(filePathOfYawError, index=False)
|