浏览代码

Merge branch 'chart/13.8'

Roc 2 年之前
父节点
当前提交
1225705cd7
共有 1 个文件被更改,包括 29 次插入12 次删除
  1. 29 12
      services/chart/correlation/chart_info.go

+ 29 - 12
services/chart/correlation/chart_info.go

@@ -254,6 +254,7 @@ func GetChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *chart_edb_mapping.C
 
 	// 2023-03-17 时间序列始终以指标A为基准, 始终是B进行平移
 	baseDataList := make([]*edb_data.EdbDataList, 0)
+	baseDataMap := make(map[string]float64)
 	changeDataList := make([]*edb_data.EdbDataList, 0)
 	changeDataMap := make(map[string]float64)
 
@@ -270,8 +271,7 @@ func GetChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *chart_edb_mapping.C
 
 		// 如果A指标是高频,那么就需要对B指标进行升频
 		if frequencyIntMap[edbInfoMappingA.Frequency] < frequencyIntMap[edbInfoMappingB.Frequency] {
-			aDataMap := make(map[string]float64)
-			tmpNewChangeDataList, e := HandleDataByLinearRegression(aDataList, aDataMap)
+			tmpNewChangeDataList, e := HandleDataByLinearRegression(aDataList, baseDataMap)
 			if e != nil {
 				err = fmt.Errorf("获取变频指标插值法Map失败, Err: %s", e.Error())
 				return
@@ -279,6 +279,9 @@ func GetChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *chart_edb_mapping.C
 			baseDataList = tmpNewChangeDataList
 		} else {
 			baseDataList = aDataList
+			for _, v := range baseDataList {
+				baseDataMap[v.DataTime] = v.Value
+			}
 		}
 		// 如果B指标是高频,那么就需要对A指标进行升频
 		if frequencyIntMap[edbInfoMappingA.Frequency] > frequencyIntMap[edbInfoMappingB.Frequency] {
@@ -290,10 +293,11 @@ func GetChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *chart_edb_mapping.C
 			changeDataList = tmpNewChangeDataList
 		} else {
 			changeDataList = bDataList
-			for _, v := range bDataList {
+			for _, v := range changeDataList {
 				changeDataMap[v.DataTime] = v.Value
 			}
 		}
+
 	}
 
 	// 计算不领先也不滞后时的相关系数
@@ -303,15 +307,22 @@ func GetChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *chart_edb_mapping.C
 		baseDataTimeArr = append(baseDataTimeArr, baseDataList[i].DataTime)
 		baseCalculateData = append(baseCalculateData, baseDataList[i].Value)
 	}
+
+	zeroBaseData := make([]float64, 0)
 	zeroCalculateData := make([]float64, 0)
 	for i := range baseDataTimeArr {
-		zeroCalculateData = append(zeroCalculateData, changeDataMap[baseDataTimeArr[i]])
+		tmpBaseVal, ok1 := baseDataMap[baseDataTimeArr[i]]
+		tmpCalculateVal, ok2 := changeDataMap[baseDataTimeArr[i]]
+		if ok1 && ok2 {
+			zeroBaseData = append(zeroBaseData, tmpBaseVal)
+			zeroCalculateData = append(zeroCalculateData, tmpCalculateVal)
+		}
 	}
-	if len(baseCalculateData) != len(zeroCalculateData) {
+	if len(zeroBaseData) != len(zeroCalculateData) {
 		err = fmt.Errorf("相关系数两组序列元素数不一致, %d-%d", len(baseCalculateData), len(zeroCalculateData))
 		return
 	}
-	zeroRatio := utils.CalculateCorrelationByIntArr(baseCalculateData, zeroCalculateData)
+	zeroRatio := utils.CalculateCorrelationByIntArr(zeroBaseData, zeroCalculateData)
 	if leadValue == 0 {
 		yData = append(yData, zeroRatio)
 	}
@@ -326,6 +337,7 @@ func GetChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *chart_edb_mapping.C
 				yData = append(yData, zeroRatio)
 				continue
 			}
+			xCalculateData := make([]float64, 0)
 			yCalculateData := make([]float64, 0)
 
 			// 平移指定天数
@@ -334,15 +346,20 @@ func GetChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *chart_edb_mapping.C
 
 			// 取出对应的基准日期的值
 			for i2 := range baseDataTimeArr {
-				yCalculateData = append(yCalculateData, dMap[baseDataTimeArr[i2]])
+				if yVal, ok := dMap[baseDataTimeArr[i2]]; ok {
+					xCalculateData = append(xCalculateData, baseCalculateData[i2])
+					yCalculateData = append(yCalculateData, yVal)
+				}
 			}
-			if len(baseCalculateData) != len(yCalculateData) {
-				err = fmt.Errorf("领先滞后相关系数两组序列元素数不一致, %d-%d", len(baseCalculateData), len(yCalculateData))
-				return
+			if len(yCalculateData) <= 0 {
+				//err = fmt.Errorf("领先滞后相关系数两组序列元素数不一致, %d-%d", len(baseCalculateData), len(yCalculateData))
+				//return
+				// 领先滞后后,没有可以计算的数据了
+				continue
 			}
 
 			// 公式计算出领先/滞后频度对应点的相关性系数
-			ratio := utils.CalculateCorrelationByIntArr(baseCalculateData, yCalculateData)
+			ratio := utils.CalculateCorrelationByIntArr(xCalculateData, yCalculateData)
 			yData = append(yData, ratio)
 		}
 	}
@@ -409,7 +426,7 @@ func GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *c
 		}
 		//baseDataList = tmpNewChangeDataList
 	}
-	// A指标不管三七二十一,先变个频再说
+	// B指标不管三七二十一,先变个频再说
 	{
 		tmpNewChangeDataList, e := HandleDataByLinearRegression(bDataList, changeDataMap)
 		if e != nil {