public void WriteLine(StreamWriter sw, SingleLineData data) { for (var i = 1; i <= Config.TotalDays; i++) { sw.WriteLine($"{data.Line.Code}, {data.Line.Date}, {data.Line.Type},{data.Line.FromStation}, {data.Line.ToStation},{i}, {data.ActualSales[i]}, {data.PredictSales[i]}, {data.ErrorRate[i]}, {data.TotalErrorRate}"); } }
public void PredictSalesWithWeight(SingleLineData line) { foreach (var sales in line.ActualSales) { int start = sales.Key - this.NFactor; start = start > 1 ? start : 1; int end = sales.Key; double size = (double)end - start; double sum = 0; if (size >= this.NFactor) { for (var i = start; i < end; i++) { var index = i - start; sum += line.ActualSales[i] * this.PredictWeights[index]; } } else { this.PredictSales(line); } line.PredictSales[sales.Key] = (int)Math.Ceiling((double)(sum)); } }
public void CalculatePredictErrorRate(SingleLineData line) { for (int i = 1; i <= Config.TotalDays; i++) { if (line.ActualSales[i] != 0) { var errorRate = (double)(line.PredictSales[i] - line.ActualSales[i]) / (double)line.ActualSales[i]; line.ErrorRate[i] = Math.Abs(errorRate); } else { line.ErrorRate[i] = int.MinValue; } } }
public List <SingleLineData> FetchAllLinesData() { Dictionary <string, SingleLineData> dataSet = new Dictionary <string, SingleLineData>(); var connStr = "server=cnyazha-svr;user id=sa;password=Passw0rd!;database=Test"; using (var conn = new SqlConnection(connStr)) { if (conn.State != System.Data.ConnectionState.Open) { conn.Open(); } using (var sqlCmd = conn.CreateCommand()) { sqlCmd.CommandText = "select code, ondate, [type], fromstation, tostation, presaleday, SUM(sales) as sales from AllData group by code, ondate, [type], fromstation, tostation, presaleday order by code, ondate, [type], fromstation, tostation, presaleday"; using (var reader = sqlCmd.ExecuteReader()) { while (reader.Read()) { var lineData = new SingleLineData(); lineData.Line.Code = reader.GetString(0); lineData.Line.Date = reader[1].ToString(); lineData.Line.Type = reader.GetString(2); lineData.Line.FromStation = reader.GetString(3); lineData.Line.ToStation = reader.GetString(4); var key = lineData.GetKey(); if (dataSet.ContainsKey(key)) { lineData = dataSet[key]; } else { dataSet[key] = lineData; } var presaleDay = Config.TotalDays + reader.GetInt32(5); var sales = reader.GetInt32(6); lineData.ActualSales[presaleDay] = sales; } } } } return(dataSet.Values.ToList()); }
public void CalculateTotalErrorRate(SingleLineData line) { var sum = 0.0d; var factor = 0.0d; for (var i = Config.TotalDays; i > (Config.TotalDays - this.ErrorRateDays); i--) { var error = line.ErrorRate[i]; if (Math.Abs(error - int.MinValue) > 0) { factor += line.ActualSales[i]; var errorRate = line.ErrorRate[i] * line.ActualSales[i]; sum += errorRate; } } line.TotalErrorRate = sum / factor; }
public void PredictSalesWithLog(SingleLineData line) { foreach (var sales in line.ActualSales) { int start = sales.Key - this.NFactor - 1; start = start > 1 ? start : 1; int end = sales.Key; int sum = 0; for (var i = start; i < end; i++) { sum += line.ActualSales[i]; } line.PredictSales[sales.Key] = (int)Math.Ceiling((double)(sum) / (double)this.NFactor); } }