private void CreatePairs(DateTime[] dateTimeVector, double[] dataValueVector) { mNumericalSeriesPair = new NumericalSeriesPair[dataValueVector.Length]; for (int i = 0; i < dataValueVector.Length; i++) { mNumericalSeriesPair[i] = new NumericalSeriesPair(dateTimeVector[i], dataValueVector[i]); } }
public NumericalSeriesPair[] Derive(NumericalDataType datatype, int timeInteval) { if (timeInteval == 0) { timeInteval = 1; } DateTime[] mDateTimeVector = DateTimes; double[] mDataValueVector = Value; List <NumericalSeriesPair> list = new List <NumericalSeriesPair>(); int startYear = mDateTimeVector.Min().Year; int year = mDateTimeVector.Max().Year - mDateTimeVector.Min().Year + 1; int index = 0; DateTime start = mDateTimeVector.Min(); for (int i = 0; i < year; i++) { for (int j = 0; j < 12; j++) { int daysInMonth = DateTime.DaysInMonth(startYear + i, j + 1); double s = (double)daysInMonth / (double)timeInteval; //int seg =(int)Math.Ceiling( s); int seg = 6; for (int c = 0; c < seg - 1; c++) { double sum = 0; DateTime now = start.AddDays(index); for (int t = 0; t < timeInteval; t++) { sum += mDataValueVector[index]; index++; } double ave = Math.Round(sum / timeInteval, 3); NumericalSeriesPair np = new NumericalSeriesPair(now, ave); list.Add(np); } double sum1 = 0; DateTime now1 = start.AddDays(index); for (int c = (seg - 1) * timeInteval; c < daysInMonth; c++) { sum1 += mDataValueVector[c]; index++; } if (datatype == NumericalDataType.Average) { double ave1 = Math.Round(sum1 / (daysInMonth - (seg - 1) * timeInteval), 3); list.Add(new NumericalSeriesPair(now1, ave1)); } else if (datatype == NumericalDataType.Cumulative) { list.Add(new NumericalSeriesPair(now1, sum1)); } } } return(list.ToArray()); }
public NumericalSeriesPair[] Derive(NumericalDataType datatype, TimeUnits outseriesTimeUnit) { INumericalSeriesPair[] sourcePairs = SeriesPairs; NumericalSeriesPair[] derivedParis = null; DateTime[] mDateTimeVector = DateTimes; double[] mDataValueVector = Value; if (datatype == NumericalDataType.Average || datatype == NumericalDataType.Cumulative) { if (outseriesTimeUnit == TimeUnits.Week) { int startIndex = 0; DateTime start = mDateTimeVector[0]; foreach (DateTime t in mDateTimeVector) { if (t.DayOfWeek == DayOfWeek.Monday) { start = t; break; } startIndex++; } int weekCount = (mDateTimeVector.Length - startIndex + 1) / 7; if (weekCount > 0) { derivedParis = new NumericalSeriesPair[weekCount]; for (int w = 0; w < weekCount; w++) { double weekSum = 0; double max = startIndex + (w + 1) * 7 > mDateTimeVector.Length ? mDateTimeVector.Length : startIndex + (w + 1) * 7; for (int j = startIndex + w * 7; j < max; j++) { weekSum += mDataValueVector[j]; } if (datatype == NumericalDataType.Average) { derivedParis[w] = new NumericalSeriesPair(start.AddDays(w * 7), Math.Round(weekSum / 7, 4)); } else if (datatype == NumericalDataType.Cumulative) { derivedParis[w] = new NumericalSeriesPair(start.AddDays(w * 7), weekSum); } } } } else if (outseriesTimeUnit == TimeUnits.Month) { if (datatype == NumericalDataType.Average) { var derivedValues = sourcePairs.GroupBy(t => new { t.DateTime.Year, t.DateTime.Month }).Select(group => new NumericalSeriesPair(new DateTime(group.Key.Year, group.Key.Month, 1), Math.Round(group.Sum(s => s.Value) / group.Count(), 4))); derivedParis = derivedValues.ToArray(); } else if (datatype == NumericalDataType.Cumulative) { var derivedValues = sourcePairs.GroupBy(t => new { t.DateTime.Year, t.DateTime.Month }).Select(group => new NumericalSeriesPair(new DateTime(group.Key.Year, group.Key.Month, 1), group.Sum(s => s.Value))); derivedParis = derivedValues.ToArray(); } } else if (outseriesTimeUnit == TimeUnits.CommanYear) { if (datatype == NumericalDataType.Average) { var derivedValues = sourcePairs.GroupBy(t => new { t.DateTime.Year }).Select(group => new NumericalSeriesPair(new DateTime(group.Key.Year, 1, 1), Math.Round(group.Sum(s => s.Value) / group.Count(), 4))); derivedParis = derivedValues.ToArray(); } else if (datatype == NumericalDataType.Cumulative) { var derivedValues = sourcePairs.GroupBy(t => new { t.DateTime.Year }).Select(group => new NumericalSeriesPair(new DateTime(group.Key.Year, 1, 1), group.Sum(s => s.Value))); derivedParis = derivedValues.ToArray(); } } else if (outseriesTimeUnit == TimeUnits.FiveDays) { derivedParis = Derive(datatype, 5); } else if (outseriesTimeUnit == TimeUnits.Day) { derivedParis = (NumericalSeriesPair[])sourcePairs; } } return(derivedParis); }