Home | History | Annotate | Download | only in cros
      1 # Copyright 2017 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 from math import ceil, floor, sqrt
      6 
      7 
      8 def get_kth_percentile(num_list, k):
      9     """
     10     Computes the k-th percentile of a list of numbers.
     11 
     12     @param num_list: list with numbers.
     13     @param k: the percentile to be computed.
     14 
     15     @returns the kth percentile value of the list.
     16 
     17     """
     18     if not num_list:
     19         return 0
     20     assert k >= 0 and k <= 1
     21     i = k * (len(num_list) - 1)
     22     c, f = int(ceil(i)), int(floor(i))
     23     if c == f:
     24         return num_list[c]
     25     return round((i - f) * num_list[c] + (c - i) * num_list[f], 2)
     26 
     27 
     28 def get_median(num_list):
     29     """
     30     Computes the median of a list of numbers.
     31 
     32     @param num_list: a list with numbers.
     33 
     34     @returns the median value of the numbers.
     35 
     36     """
     37     if not num_list:
     38         return 0
     39     num_list.sort()
     40     size = len(num_list)
     41     if size % 2 != 0:
     42         return num_list[size / 2]
     43     return round((num_list[size / 2] + num_list[size / 2 - 1]) / 2.0, 2)
     44 
     45 
     46 def get_average(num_list):
     47     """
     48     Computes mean of a list of numbers.
     49 
     50     @param num_list: a list with numbers.
     51 
     52     @returns the average value computed from the list of numbers.
     53 
     54     """
     55     if not num_list:
     56         return 0
     57     return round(float(sum(num_list)) / len(num_list) , 2)
     58 
     59 
     60 def get_std_dev(num_list):
     61     """
     62     Computes standard deviation of a list of numbers.
     63 
     64     @param num_list: a list with numbers.
     65 
     66     @returns Standard deviation computed from the list of numbers.
     67 
     68     """
     69     n = len(num_list)
     70     if not num_list or n == 1:
     71         return 0
     72     mean = float(sum(num_list)) / n
     73     variance = sum([(elem - mean) ** 2 for elem in num_list]) / (n -1)
     74     return round(sqrt(variance), 2)