Ver Fonte

Merge remote-tracking branch 'origin/chart/15.0' into debug

Roc há 1 ano atrás
pai
commit
c10fcd6c6e
4 ficheiros alterados com 44 adições e 34 exclusões
  1. 6 0
      go.mod
  2. 12 0
      go.sum
  3. 24 10
      services/data/line_feature/chart_info.go
  4. 2 24
      utils/calculate.go

+ 6 - 0
go.mod

@@ -46,6 +46,12 @@ require (
 	github.com/garyburd/redigo v1.6.3 // indirect
 	github.com/go-redis/redis/v8 v8.11.5 // indirect
 	github.com/golang/protobuf v1.5.2 // indirect
+	github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac // indirect
+	github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82 // indirect
+	github.com/gonum/internal v0.0.0-20181124074243-f884aa714029 // indirect
+	github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9 // indirect
+	github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9 // indirect
+	github.com/gonum/stat v0.0.0-20181125101827-41a0da705a5b // indirect
 	github.com/hashicorp/golang-lru v0.5.4 // indirect
 	github.com/jmespath/go-jmespath v0.4.0 // indirect
 	github.com/josharian/intern v1.0.0 // indirect

+ 12 - 0
go.sum

@@ -311,6 +311,18 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu
 github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
+github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac h1:Q0Jsdxl5jbxouNs1TQYt0gxesYMU4VXRbsTlgDloZ50=
+github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc=
+github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82 h1:EvokxLQsaaQjcWVWSV38221VAK7qc2zhaO17bKys/18=
+github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg=
+github.com/gonum/internal v0.0.0-20181124074243-f884aa714029 h1:8jtTdc+Nfj9AR+0soOeia9UZSvYBvETVHZrugUowJ7M=
+github.com/gonum/internal v0.0.0-20181124074243-f884aa714029/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks=
+github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9 h1:7qnwS9+oeSiOIsiUMajT+0R7HR6hw5NegnKPmn/94oI=
+github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A=
+github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9 h1:V2IgdyerlBa/MxaEFRbV5juy/C3MGdj4ePi+g6ePIp4=
+github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw=
+github.com/gonum/stat v0.0.0-20181125101827-41a0da705a5b h1:fbskpz/cPqWH8VqkQ7LJghFkl2KPAiIFUHrTJ2O3RGk=
+github.com/gonum/stat v0.0.0-20181125101827-41a0da705a5b/go.mod h1:Z4GIJBJO3Wa4gD4vbwQxXXZ+WHmW6E9ixmNrwvs0iZs=
 github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=

+ 24 - 10
services/data/line_feature/chart_info.go

@@ -115,9 +115,9 @@ func GetPercentileData(chartInfoId int, mappingInfo *data_manage.ChartEdbInfoMap
 		currDateTime, _ := time.ParseInLocation(utils.FormatDate, tmpData.DataTime, time.Local)
 		maxVal := tmpData.Value
 		minVal := tmpData.Value
-		for i := 0; i < calculateDay; i++ {
-			preVal, ok := dataMap[currDateTime.AddDate(0, 0, -i)]
-			if ok {
+		for k := 0; k < calculateDay; k++ {
+			preVal, ok2 := dataMap[currDateTime.AddDate(0, 0, -k)]
+			if ok2 {
 				if preVal > maxVal {
 					maxVal = preVal
 				}
@@ -130,14 +130,14 @@ func GetPercentileData(chartInfoId int, mappingInfo *data_manage.ChartEdbInfoMap
 		if maxVal == minVal {
 			continue
 		}
-		tmpV := (tmpData.Value) / (maxVal - minVal) * 100
-		tmpV, _ = decimal.NewFromFloat(tmpV).Round(4).Float64()
 		//百分位=(现值-Min)/(Max-Min)
+		tmpV := (tmpData.Value - minVal) / (maxVal - minVal) * 100
+		tmpV, _ = decimal.NewFromFloat(tmpV).Round(4).Float64()
 		newDataList = append(newDataList, data_manage.EdbDataList{
 			EdbDataId:     i,
 			EdbInfoId:     edb.EdbInfoId,
-			DataTime:      dataList[i-1].DataTime,
-			DataTimestamp: dataList[i-1].DataTimestamp,
+			DataTime:      dataList[i].DataTime,
+			DataTimestamp: dataList[i].DataTimestamp,
 			Value:         tmpV,
 		})
 
@@ -256,14 +256,28 @@ func GetFrequencyDistributionData(chartInfoId int, mappingInfo *data_manage.Char
 		}
 	}
 
+	var minNum, maxNum int
 	tmpNum := 0
-	for _, tmpMinVal := range XDataList {
+	for k, tmpMinVal := range XDataList {
 		// 频率
 		frequencyYNum := distributionDataNumMap[tmpMinVal]
 		Y1DataList = append(Y1DataList, response.FrequencyDistributionYData{
 			X: tmpMinVal,
 			Y: float64(frequencyYNum),
 		})
+
+		if k == 0 {
+			minNum = frequencyYNum
+			maxNum = frequencyYNum
+		} else {
+			if frequencyYNum < minNum {
+				minNum = frequencyYNum
+			}
+			if frequencyYNum > maxNum {
+				maxNum = frequencyYNum
+			}
+		}
+
 		// 累计数
 		tmpNum += frequencyYNum
 		// 累计频率
@@ -295,8 +309,8 @@ func GetFrequencyDistributionData(chartInfoId int, mappingInfo *data_manage.Char
 	}
 	edbList[0].DataList = nil
 	dataResp = response.FrequencyDistributionResp{
-		LeftMinValue:  minVal,
-		LeftMaxValue:  maxVal,
+		LeftMinValue:  float64(minNum),
+		LeftMaxValue:  float64(maxNum),
 		RightMinValue: 0,
 		RightMaxValue: 100,
 		DataList:      newDataList,

+ 2 - 24
utils/calculate.go

@@ -1,6 +1,7 @@
 package utils
 
 import (
+	"github.com/gonum/stat"
 	"github.com/shopspring/decimal"
 	"math"
 )
@@ -164,28 +165,5 @@ func CalculationDecisive(sList []Coordinate) (r2 float64) {
 
 // CalculateStandardDeviation 计算标准差
 func CalculateStandardDeviation(data []float64) float64 {
-	// 计算平均值
-	mean := calculateMean(data)
-	// 计算方差
-	variance := calculateVariance(data, mean)
-	return math.Sqrt(variance)
-}
-
-// 计算平均值
-func calculateMean(data []float64) float64 {
-	sum := 0.0
-	for _, value := range data {
-		sum += value
-	}
-	return sum / float64(len(data))
-}
-
-// 计算方差
-func calculateVariance(data []float64, mean float64) float64 {
-	sumSquaredDiff := 0.0
-	for _, value := range data {
-		diff := value - mean
-		sumSquaredDiff += diff * diff
-	}
-	return sumSquaredDiff / float64(len(data))
+	return stat.StdDev(data, nil)
 }