|
@@ -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 {
|