Просмотр исходного кода

Merge branch 'master' into develop_chy

chenhongyan1989 1 неделя назад
Родитель
Сommit
c551cbf600

+ 2 - 1
README.md

@@ -165,7 +165,8 @@ pip download -r requirements.txt -d download
    http://106.120.102.238:58880
     5.1.1 算法服务:
      部署至192.168.50.235(内网IP)服务器,为Deamon服务(路径:/etc/systemd/system/wtoaamapi.service),纳入systemctl管理
-     程序目录:/data/source_code/WTOAAM
+     程序目录(发电性能异常检测算法):/data/source_code/WTOAAM
+     程序目录(健康评估算法):/data/source_code/CMS     在此目录下执行命令: uvicorn [FastAPI接口python文件名]:app --reload --host 0.0.0.0 --port 8888   示例: uvicorn api_20241201:app --reload --host --port 8777
 
     5.2 生产
     http://106.120.102.238:18000

+ 7 - 4
dataAnalysisBusiness/algorithm/cpAnalyst.py

@@ -1,5 +1,5 @@
 import os
-
+import math
 import pandas as pd
 import plotly.graph_objects as go
 from algorithmContract.confBusiness import *
@@ -93,7 +93,8 @@ class CpAnalyst(AnalystWithGoodPoint):
                 "engineName": currTurbineInfo[Field_NameOfTurbine],
                 "engineCode": turbineCode,
                 "xData": turbine_data[Field_PowerFloor].tolist(),
-                "yData": turbine_data[Field_CpMedian].tolist(),
+                # "yData": turbine_data[Field_CpMedian].tolist(),
+                "yData": [None if math.isinf(val) else val for val in turbine_data[Field_CpMedian].tolist()],
             }
             turbine_data_list.append(turbine_data_total)
 
@@ -224,7 +225,8 @@ class CpAnalyst(AnalystWithGoodPoint):
                     "engineName": tempTurbineInfo[Field_NameOfTurbine],
                     "engineCode": other_name,
                     "xData": other_group[Field_PowerFloor].tolist(),
-                    "yData": other_group[Field_CpMedian].tolist(),
+                    # "yData": other_group[Field_CpMedian].tolist(),
+                    "yData": [None if math.isinf(val) else val for val in other_group[Field_CpMedian].tolist()],
                 }
                 turbine_data_list_each.append(turbine_data_other_each)
 
@@ -239,7 +241,8 @@ class CpAnalyst(AnalystWithGoodPoint):
                 "engineName": currTurbineInfo[Field_NameOfTurbine],
                 "engineCode": currTurbineInfo[Field_CodeOfTurbine],
                 "xData": group[Field_PowerFloor].tolist(),
-                "yData": group[Field_CpMedian].tolist(),
+                # "yData": group[Field_CpMedian].tolist(),
+                "yData": [None if math.isinf(val) else val for val in group[Field_CpMedian].tolist()],
             }
             turbine_data_list_each.append(turbine_data_curr)
 

+ 5 - 3
dataAnalysisBusiness/algorithm/cpWindSpeedAnalyst.py

@@ -1,5 +1,5 @@
 import os
-
+import math 
 import pandas as pd
 import plotly.graph_objects as go
 from algorithmContract.confBusiness import *
@@ -84,7 +84,8 @@ class CpWindSpeedAnalyst(AnalystWithGoodPoint):
                 "engineName": currTurbineInfo[Field_NameOfTurbine],
                 "engineCode": turbineCode,
                 "xData": group[Field_WindSpeedFloor].tolist(),
-                "yData": group[Field_Cp].tolist(),
+                # "yData": group[Field_Cp].tolist(),
+                "yData": [None if math.isinf(val) else val for val in group[Field_Cp].tolist()],
                 }
             turbine_data_list.append(turbine_data_total)
 
@@ -182,7 +183,8 @@ class CpWindSpeedAnalyst(AnalystWithGoodPoint):
                     "engineName": tempTurbineInfo[Field_NameOfTurbine],
                     "engineCode": turbineCode,
                     "xData": tempDataFrame[Field_WindSpeedFloor].tolist(),
-                    "yData": tempDataFrame[Field_Cp].tolist(),
+                    # "yData": tempDataFrame[Field_Cp].tolist(),
+                    "yData": [None if math.isinf(val) else val for val in tempDataFrame[Field_Cp].tolist()],
                 }
                 turbine_data_list_each.append(turbine_data_other_each)
 

+ 2 - 1
dataAnalysisBusiness/algorithm/pitchPowerAnalyst.py

@@ -150,7 +150,8 @@ class PitchPowerAnalyst(AnalystWithGoodBadPoint):
                     "title": f' 机组: {name[0]}',
                     "xData": group[Field_ActiverPower].tolist(),
                     "yData": group[Field_PitchAngel1].tolist(),
-                    "colorbar": dataFrameMerge[Field_YearMonth].unique().tolist(),
+                    # "colorbar": dataFrameMerge[Field_YearMonth].unique().tolist(),
+                    "colorbar": group[Field_YearMonth].tolist(),
                 }]
             }
 

+ 5 - 3
dataAnalysisBusiness/algorithm/pitchTSRCpAnalyst.py

@@ -1,5 +1,5 @@
 import os
-
+import math
 import pandas as pd
 import plotly.graph_objects as go
 from algorithmContract.confBusiness import *
@@ -109,8 +109,10 @@ class PitchTSRCpAnalyst(AnalystWithGoodPoint):
                         "engineName": turbine_name,
                         "engineCode": turbine_code,
                         "title":f' 风能利用系数 vs. 叶尖速比-{turbine_name}',
-                        "xData": group[Field_TSR].tolist(),
-                        "yData":group[Field_Cp].tolist(),
+                        # "xData": group[Field_TSR].tolist(),
+                        "xData":[None if math.isinf(val) else val for val in group[Field_TSR].tolist()],
+                        # "yData":group[Field_Cp].tolist(),
+                        "yData":[None if math.isinf(val) else val for val in group[Field_Cp].tolist()],
                         "colorbar": pitch_bin,
                         "colorbartitle": "桨距角"
                         }]

+ 5 - 3
dataAnalysisBusiness/algorithm/productionIndicatorAnalyst.py

@@ -215,12 +215,14 @@ class ProductionIndicatorAnalyst(AnalystNotFilter):
         # 风场等效利用小时
         Thc=Qp/result_df['RatedPowerSUM'].iloc[0]
         # 风场弃风电量
-        Qdr=sum(result_df['Qdl'])-Qp
+        # Qdr=sum(result_df['Qdl'])-Qp
+        Qdl=result_df['Qdl'].iloc[0]
+        Qdr=0 if Qdl==0 else Qdl-Qp
         # 电网弃风率
         if Qp+Qdr==0:
             Rdr=0
         else:
-            Rdr=Qdr/(Qp+Qdr)
+            Rdr=Qdr/(Qp+Qdr)*100
         return Qp,Thc,Qdr,Rdr
     def get_Ws(self,df,dataFrameGuaranteePowerCurve):
         '''
@@ -310,7 +312,7 @@ class ProductionIndicatorAnalyst(AnalystNotFilter):
         Qp, Thc, Qdr,Rdr = self.Production_indicators(dataFrameresults)
         Qp=round(Qp,2)
         Thc=round(Thc,2)
-        Rdr = Rdr if Rdr is not None else 0
+        Rdr = round(Rdr,2) if Rdr is not None else 0
         print("Rdr:",Rdr)
         Qdr=round(Qdr,2)
         # 将Qp, Thc, Rdr添加到results_df中

+ 4 - 2
dataAnalysisBusiness/algorithm/tsrAnalyst.py

@@ -149,7 +149,8 @@ class TSRAnalyst(AnalystWithGoodPoint):
                 "engineName": turbine,
                 "engineCode": turbine_data[Field_CodeOfTurbine].iloc[0],
                 "xData": turbine_data[x_name].tolist(),
-                "yData": turbine_data[y_name].tolist(),
+                # "yData": turbine_data[y_name].tolist(),
+                "yData": [None if math.isinf(val) else val for val in turbine_data[y_name].tolist()],
                 }
             turbine_data_list.append(turbine_data_total)
 
@@ -261,7 +262,8 @@ class TSRAnalyst(AnalystWithGoodPoint):
                     "engineName": turbine,
                     "engineCode": turbine_data[Field_CodeOfTurbine].iloc[0],
                     "xData": turbine_data[x_name].tolist(),
-                    "yData": turbine_data[y_name].tolist(),
+                    # "yData": turbine_data[y_name].tolist(),
+                    "yData": [None if math.isinf(val) else val for val in turbine_data[y_name].tolist()],
                 }
                 turbine_data_list_each.append(turbine_data_each)
 

+ 5 - 2
dataAnalysisBusiness/algorithm/tsrWindSpeedAnalyst.py

@@ -1,4 +1,5 @@
 import os
+import math
 import pandas as pd
 import plotly.graph_objects as go
 import seaborn as sns
@@ -152,7 +153,8 @@ class TSRWindSpeedAnalyst(AnalystWithGoodPoint):
                 "engineName": turbine,
                 "engineCode": turbine_data[Field_CodeOfTurbine].iloc[0],
                 "xData": turbine_data[x_name].tolist(),
-                "yData": turbine_data[y_name].tolist(),
+                # "yData": turbine_data[y_name].tolist(),
+                "yData": [None if math.isinf(val) else val for val in turbine_data[y_name].tolist()],
                 }
             turbine_data_list.append(turbine_data_total)
 
@@ -279,7 +281,8 @@ class TSRWindSpeedAnalyst(AnalystWithGoodPoint):
                     "engineName": turbine,
                     "engineCode": turbine_data[Field_CodeOfTurbine].iloc[0],
                     "xData": turbine_data[x_name].tolist(),
-                    "yData": turbine_data[y_name].tolist(),
+                    # "yData": turbine_data[y_name].tolist(),
+                    "yData": [None if math.isinf(val) else val for val in turbine_data[y_name].tolist()],
                 }
                 turbine_data_list_each.append(turbine_data_each)
 

+ 20 - 20
dataAnalysisBusiness/algorithm/windDirectionFrequencyAnalyst.py

@@ -253,26 +253,26 @@ class WindDirectionFrequencyAnalyst(AnalystNotFilter):
         # 返回结果数据框
         return result_df
 
-    def outputJsonData(self, conf: Contract, outputAnalysisDir: str, turbineModelInfo: pd.Series, dataFrameMerge: pd.DataFrame) -> pd.DataFrame:
-        turbineCodes = dataFrameMerge[Field_CodeOfTurbine].unique()
-
-        result_rows = []
-        for turbineCode in turbineCodes:
-            jsonDictionary = self.convert2Json(turbineModelInfo, turbineCodes=turbineCode, dataFrameOfTurbines=dataFrameMerge)
-            jsonFileName = f"风向玫瑰图{turbineCode}.json"
-            jsonFilePath = os.path.join(outputAnalysisDir, jsonFileName)
-            JsonUtil.write_json(jsonDictionary, file_path=jsonFilePath)
-            result_rows.append({
-                Field_Return_TypeAnalyst: self.typeAnalyst(),
-                Field_PowerFarmCode: conf.dataContract.dataFilter.powerFarmID,
-                Field_Return_BatchCode: conf.dataContract.dataFilter.dataBatchNum,
-                Field_CodeOfTurbine: turbineCode,
-                Field_Return_FilePath: jsonFilePath,
-                Field_Return_IsSaveDatabase: True
-            })
-
-        returnDatas = pd.DataFrame(result_rows)
-        return returnDatas
+    # def outputJsonData(self, conf: Contract, outputAnalysisDir: str, turbineModelInfo: pd.Series, dataFrameMerge: pd.DataFrame) -> pd.DataFrame:
+    #     turbineCodes = dataFrameMerge[Field_CodeOfTurbine].unique()
+
+    #     result_rows = []
+    #     for turbineCode in turbineCodes:
+    #         jsonDictionary = self.convert2Json(turbineModelInfo, turbineCodes=turbineCode, dataFrameOfTurbines=dataFrameMerge)
+    #         jsonFileName = f"风向玫瑰图{turbineCode}.json"
+    #         jsonFilePath = os.path.join(outputAnalysisDir, jsonFileName)
+    #         JsonUtil.write_json(jsonDictionary, file_path=jsonFilePath)
+    #         result_rows.append({
+    #             Field_Return_TypeAnalyst: self.typeAnalyst(),
+    #             Field_PowerFarmCode: conf.dataContract.dataFilter.powerFarmID,
+    #             Field_Return_BatchCode: conf.dataContract.dataFilter.dataBatchNum,
+    #             Field_CodeOfTurbine: turbineCode,
+    #             Field_Return_FilePath: jsonFilePath,
+    #             Field_Return_IsSaveDatabase: True
+    #         })
+
+    #     returnDatas = pd.DataFrame(result_rows)
+    #     return returnDatas
 
     def outputJsonData(self, conf: Contract, outputAnalysisDir: str, turbineModelInfo: pd.Series, dataFrameMerge: pd.DataFrame) -> pd.DataFrame:
         turbineCodes = dataFrameMerge[Field_CodeOfTurbine].unique()

+ 2 - 1
dataAnalysisBusiness/algorithm/yawErrorAnalyst.py

@@ -256,7 +256,8 @@ class YawErrorAnalyst(AnalystWithGoodPoint):
                             "engineCode": name[1],
                             "title": f'静态偏航误差分析 {name[0]}',
                             "xData": final_df[self.fieldWindDirFloor].tolist(),
-                            "yData": yData.tolist(),
+                            # "yData": yData.tolist(),
+                            "yData": final_df[col].astype(str).replace(["None", "nan", "null", ""], "").tolist(),
                             "legend": col,
                             "type": "lines+markers",