|
@@ -66,11 +66,11 @@ class YawErrorDensityAnalyst(AnalystWithGoodBadLimitPoint):
|
|
|
fixed_colorscale = [
|
|
fixed_colorscale = [
|
|
|
[i / (len(fixed_colors) - 1), color] for i, color in enumerate(fixed_colors)
|
|
[i / (len(fixed_colors) - 1), color] for i, color in enumerate(fixed_colors)
|
|
|
]
|
|
]
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
for name, group in grouped:
|
|
for name, group in grouped:
|
|
|
dataFrame=group[Field_YawError].abs() <= 45
|
|
dataFrame=group[Field_YawError].abs() <= 45
|
|
|
- yawerror=np.mean(dataFrame[Field_YawError])
|
|
|
|
|
-
|
|
|
|
|
|
|
+ # yawerror=np.mean(dataFrame[Field_YawError])
|
|
|
|
|
+
|
|
|
df = self.calculateYawError(group)
|
|
df = self.calculateYawError(group)
|
|
|
df.dropna(inplace=True)
|
|
df.dropna(inplace=True)
|
|
|
counts = df['density'].value_counts()
|
|
counts = df['density'].value_counts()
|
|
@@ -92,7 +92,7 @@ class YawErrorDensityAnalyst(AnalystWithGoodBadLimitPoint):
|
|
|
'std_X': [std_X],
|
|
'std_X': [std_X],
|
|
|
'mediann_X':[mediann_X],
|
|
'mediann_X':[mediann_X],
|
|
|
'skewness_X':[skewness_X],
|
|
'skewness_X':[skewness_X],
|
|
|
- 'kurtosis_X':[kurtosis_X],
|
|
|
|
|
|
|
+ 'kurtosis_X':[kurtosis_X],
|
|
|
'max_X':[max_X],
|
|
'max_X':[max_X],
|
|
|
'min_X':[min_X]
|
|
'min_X':[min_X]
|
|
|
}
|
|
}
|
|
@@ -103,19 +103,19 @@ class YawErrorDensityAnalyst(AnalystWithGoodBadLimitPoint):
|
|
|
fig.add_trace(go.Scattergl(
|
|
fig.add_trace(go.Scattergl(
|
|
|
x=df["x"],
|
|
x=df["x"],
|
|
|
y=df["y"],
|
|
y=df["y"],
|
|
|
- mode='markers',
|
|
|
|
|
|
|
+ mode='markers',
|
|
|
marker=dict(
|
|
marker=dict(
|
|
|
size=3,
|
|
size=3,
|
|
|
- opacity=0.7,
|
|
|
|
|
- color=df["density"],
|
|
|
|
|
- colorscale=fixed_colorscale,
|
|
|
|
|
|
|
+ opacity=0.7,
|
|
|
|
|
+ color=df["density"],
|
|
|
|
|
+ colorscale=fixed_colorscale,
|
|
|
showscale=True,
|
|
showscale=True,
|
|
|
)
|
|
)
|
|
|
))
|
|
))
|
|
|
|
|
|
|
|
fig.update_layout(
|
|
fig.update_layout(
|
|
|
xaxis_title='对风角度',
|
|
xaxis_title='对风角度',
|
|
|
- yaxis_title='风速',
|
|
|
|
|
|
|
+ yaxis_title='风速',
|
|
|
title=f'动态偏航误差分析-{name[0]}',
|
|
title=f'动态偏航误差分析-{name[0]}',
|
|
|
xaxis=dict(range=[-20, 20]), # 限制横坐标范围为 -20 到 20
|
|
xaxis=dict(range=[-20, 20]), # 限制横坐标范围为 -20 到 20
|
|
|
yaxis=dict(range=[0, 25])
|
|
yaxis=dict(range=[0, 25])
|
|
@@ -132,8 +132,8 @@ class YawErrorDensityAnalyst(AnalystWithGoodBadLimitPoint):
|
|
|
# 构建最终的JSON对象
|
|
# 构建最终的JSON对象
|
|
|
json_output = {
|
|
json_output = {
|
|
|
"analysisTypeCode": "动态偏航误差",
|
|
"analysisTypeCode": "动态偏航误差",
|
|
|
- "engineCode": engineTypeCode,
|
|
|
|
|
- "engineTypeName": engineTypeName,
|
|
|
|
|
|
|
+ "engineCode": engineTypeCode,
|
|
|
|
|
+ "engineTypeName": engineTypeName,
|
|
|
"xaixs": "对风角度(°)",
|
|
"xaixs": "对风角度(°)",
|
|
|
"yaixs": "风速(m/s)",
|
|
"yaixs": "风速(m/s)",
|
|
|
"data": [{
|
|
"data": [{
|
|
@@ -144,7 +144,7 @@ class YawErrorDensityAnalyst(AnalystWithGoodBadLimitPoint):
|
|
|
"yData": df["y"].tolist(),
|
|
"yData": df["y"].tolist(),
|
|
|
"colorbar": df["density"].tolist(),
|
|
"colorbar": df["density"].tolist(),
|
|
|
"colorbartitle": "密度"
|
|
"colorbartitle": "密度"
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
}]
|
|
}]
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -156,8 +156,8 @@ class YawErrorDensityAnalyst(AnalystWithGoodBadLimitPoint):
|
|
|
# 构建最终的JSON对象2
|
|
# 构建最终的JSON对象2
|
|
|
json_output2 = {
|
|
json_output2 = {
|
|
|
"analysisTypeCode": "动态偏航误差",
|
|
"analysisTypeCode": "动态偏航误差",
|
|
|
- "engineCode": engineTypeCode,
|
|
|
|
|
- "engineTypeName": engineTypeName,
|
|
|
|
|
|
|
+ "engineCode": engineTypeCode,
|
|
|
|
|
+ "engineTypeName": engineTypeName,
|
|
|
"xaixs": "对风角度(°)",
|
|
"xaixs": "对风角度(°)",
|
|
|
"yaixs": "概率密度函数",
|
|
"yaixs": "概率密度函数",
|
|
|
"data": [{
|
|
"data": [{
|
|
@@ -167,18 +167,18 @@ class YawErrorDensityAnalyst(AnalystWithGoodBadLimitPoint):
|
|
|
"xData": x .tolist(),
|
|
"xData": x .tolist(),
|
|
|
"yData": pdf_data.tolist(),
|
|
"yData": pdf_data.tolist(),
|
|
|
"xrange":[-30,30]
|
|
"xrange":[-30,30]
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
}]
|
|
}]
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
# Save to file
|
|
# Save to file
|
|
|
- filePathOfImage = os.path.join(outputAnalysisDir, f"{name[0]}.png")
|
|
|
|
|
- fig.write_image(filePathOfImage, scale=3)
|
|
|
|
|
|
|
+ # filePathOfImage = os.path.join(outputAnalysisDir, f"{name[0]}.png")
|
|
|
|
|
+ # fig.write_image(filePathOfImage, scale=3)
|
|
|
# filePathOfHtml = os.path.join(outputAnalysisDir, f"{name[0]}.html")
|
|
# filePathOfHtml = os.path.join(outputAnalysisDir, f"{name[0]}.html")
|
|
|
# fig.write_html(filePathOfHtml)
|
|
# fig.write_html(filePathOfHtml)
|
|
|
|
|
|
|
|
|
|
|
|
|
- # 将JSON对象保存到文件
|
|
|
|
|
|
|
+ # 将JSON对象保存到文件np.mean(dataFrame[Field_YawError])
|
|
|
output_json_path = os.path.join(outputAnalysisDir, f"{name[0]}.json")
|
|
output_json_path = os.path.join(outputAnalysisDir, f"{name[0]}.json")
|
|
|
with open(output_json_path, 'w', encoding='utf-8') as f:
|
|
with open(output_json_path, 'w', encoding='utf-8') as f:
|
|
|
import json
|
|
import json
|
|
@@ -208,14 +208,14 @@ class YawErrorDensityAnalyst(AnalystWithGoodBadLimitPoint):
|
|
|
Field_Return_IsSaveDatabase: True
|
|
Field_Return_IsSaveDatabase: True
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
- result_rows.append({
|
|
|
|
|
- Field_Return_TypeAnalyst: self.typeAnalyst(),
|
|
|
|
|
- Field_PowerFarmCode: conf.dataContract.dataFilter.powerFarmID,
|
|
|
|
|
- Field_Return_BatchCode: conf.dataContract.dataFilter.dataBatchNum,
|
|
|
|
|
- Field_CodeOfTurbine: name[1],
|
|
|
|
|
- Field_Return_FilePath: filePathOfImage,
|
|
|
|
|
- Field_Return_IsSaveDatabase: False
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ # result_rows.append({
|
|
|
|
|
+ # Field_Return_TypeAnalyst: self.typeAnalyst(),
|
|
|
|
|
+ # Field_PowerFarmCode: conf.dataContract.dataFilter.powerFarmID,
|
|
|
|
|
+ # Field_Return_BatchCode: conf.dataContract.dataFilter.dataBatchNum,
|
|
|
|
|
+ # Field_CodeOfTurbine: name[1],
|
|
|
|
|
+ # Field_Return_FilePath: filePathOfImage,
|
|
|
|
|
+ # Field_Return_IsSaveDatabase: False
|
|
|
|
|
+ # })
|
|
|
|
|
|
|
|
# result_rows.append({
|
|
# result_rows.append({
|
|
|
# Field_Return_TypeAnalyst: self.typeAnalyst(),
|
|
# Field_Return_TypeAnalyst: self.typeAnalyst(),
|
|
@@ -224,16 +224,16 @@ class YawErrorDensityAnalyst(AnalystWithGoodBadLimitPoint):
|
|
|
# Field_CodeOfTurbine: name[1],
|
|
# Field_CodeOfTurbine: name[1],
|
|
|
# Field_Return_FilePath: filePathOfHtml,
|
|
# Field_Return_FilePath: filePathOfHtml,
|
|
|
# Field_Return_IsSaveDatabase: True
|
|
# Field_Return_IsSaveDatabase: True
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
# })
|
|
# })
|
|
|
|
|
|
|
|
result_df = pd.DataFrame(result_rows)
|
|
result_df = pd.DataFrame(result_rows)
|
|
|
|
|
|
|
|
return result_df
|
|
return result_df
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
def calculateYawError(self, dataFrame: pd.DataFrame):
|
|
def calculateYawError(self, dataFrame: pd.DataFrame):
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
dataFrame = dataFrame.dropna(
|
|
dataFrame = dataFrame.dropna(
|
|
|
subset=[Field_NameOfTurbine, Field_YawError, Field_ActiverPower,Field_WindSpeed])
|
|
subset=[Field_NameOfTurbine, Field_YawError, Field_ActiverPower,Field_WindSpeed])
|
|
|
|
|
|
|
@@ -265,5 +265,5 @@ class YawErrorDensityAnalyst(AnalystWithGoodBadLimitPoint):
|
|
|
|
|
|
|
|
# 将 result 转换为 DataFrame
|
|
# 将 result 转换为 DataFrame
|
|
|
result_df = pd.DataFrame(result)
|
|
result_df = pd.DataFrame(result)
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
return result_df
|
|
return result_df
|