def percentileOfSeries(requestContext, *args):
    levels = []
    seriesList = []
    for arg in args:
        logging.info("Arg: %s", arg)
        if isinstance(arg, (int, long, float)):
            levels.append(arg)
        elif isinstance(arg, basestring):
            levels += [float(x) for x in arg.split(";")]
        else:
            seriesList += arg

    logging.info("Levels: %s", levels)
    logging.info("Series: %s", seriesList)

    result = []
    for level in levels:
        if levels <= 0:
            raise ValueError('The requested percent is required to be greater than 0')

        name = 'percentilesOfSeries(%s,%g)' % (seriesList[0].pathExpression, level)
        (start, end, step) = functions.normalize([seriesList])[1:]
        values = [functions._getPercentile(row, level, False) for row in functions.izip(*seriesList)]
        resultSeries = TimeSeries(name, start, end, step, values)
        resultSeries.pathExpression = name
        result.append(resultSeries)

    return result
 def testGetPercentile(self):
     seriesList = [
         ([None, None, 15, 20, 35, 40, 50], 20),
         (range(100), 30),
         (range(200), 60),
         (range(300), 90),
         (range(1, 101), 31),
         (range(1, 201), 61),
         (range(1, 301), 91),
         (range(0, 102), 30),
         (range(1, 203), 61),
         (range(1, 303), 91),
     ]
     for index, conf in enumerate(seriesList):
         series, expected = conf
         result = functions._getPercentile(series, 30)
         self.assertEqual(expected, result, 'For series index <%s> the 30th percentile ordinal is not %d, but %d ' % (index, expected, result))
Exemple #3
0
 def testGetPercentile(self):
     seriesList = [
         ([None, None, 15, 20, 35, 40, 50], 20),
         (range(100), 30),
         (range(200), 60),
         (range(300), 90),
         (range(1, 101), 31),
         (range(1, 201), 61),
         (range(1, 301), 91),
         (range(0, 102), 30),
         (range(1, 203), 61),
         (range(1, 303), 91),
     ]
     for index, conf in enumerate(seriesList):
         series, expected = conf
         result = functions._getPercentile(series, 30)
         self.assertEqual(expected, result, 'For series index <%s> the 30th percentile ordinal is not %d, but %d ' % (index, expected, result))