Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(151)

Side by Side Diff: tools/telemetry/telemetry/util/statistics.py

Issue 185953004: Add some statistics to the monsoon profile run (Closed) Base URL: https://git.chromium.org/chromium/src.git@master
Patch Set: Rebase and provide own statistics functions Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2013 The Chromium Authors. All rights reserved. 1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """A collection of statistical utility functions to be used by metrics.""" 5 """A collection of statistical utility functions to be used by metrics."""
6 6
7 import bisect 7 import bisect
8 import math 8 import math
9 9
10 10
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 152
153 Args: 153 Args:
154 durations: List of interval lengths in milliseconds. 154 durations: List of interval lengths in milliseconds.
155 absolute: See TimestampsDiscrepancy. 155 absolute: See TimestampsDiscrepancy.
156 interval_multiplier: See TimestampsDiscrepancy. 156 interval_multiplier: See TimestampsDiscrepancy.
157 """ 157 """
158 timestamps = reduce(lambda x, y: x + [x[-1] + y], durations, [0])[1:] 158 timestamps = reduce(lambda x, y: x + [x[-1] + y], durations, [0])[1:]
159 return TimestampsDiscrepancy(timestamps, absolute, interval_multiplier) 159 return TimestampsDiscrepancy(timestamps, absolute, interval_multiplier)
160 160
161 161
162 def ArithmeticMean(numerator, denominator): 162 def ArithmeticMean(data):
163 """Calculates arithmetic mean. 163 """Calculates arithmetic mean.
164 164
165 Both numerator and denominator can be given as either individual 165 Both numerator and denominator can be given as either individual
tonyg 2014/03/12 15:28:38 Nit: update the bit about the denominator.
166 values or lists of values which will be summed. 166 values or lists of values which will be summed.
167 167
168 Args: 168 Args:
169 numerator: A quantity that represents a sum total value. 169 numerator: A quantity that represents a sum total value.
170 denominator: A quantity that represents a count of the number of things. 170 denominator: A quantity that represents a count of the number of things.
tonyg 2014/03/12 15:28:38 Nit: remove this line
171 171
172 Returns: 172 Returns:
173 The arithmetic mean value, or 0 if the denominator value was 0. 173 The arithmetic mean value, or 0 if the denominator value was 0.
174 """ 174 """
175 numerator_total = Total(numerator) 175 numerator_total = Total(data)
176 denominator_total = Total(denominator) 176 denominator_total = Total(len(data))
177 return DivideIfPossibleOrZero(numerator_total, denominator_total) 177 return DivideIfPossibleOrZero(numerator_total, denominator_total)
178 178
179 179
180 def StandardDeviation(data):
tonyg 2014/03/12 15:28:38 Even though these are really common concepts, I re
181 if len(data) == 1:
182 return 0.0
183
184 mean = ArithmeticMean(data)
185 variances = [float(x) - mean for x in data]
186 variances = [x * x for x in variances]
187 std_dev = math.sqrt(ArithmeticMean(variances))
188
189 return std_dev
190
191
192 def StandardErrorOfMean(data):
193 if len(data) <= 1:
194 return 0.0
195
196 std_dev = StandardDeviation(data)
197
198 return std_dev / math.sqrt(len(data))
199
200
201 def TrapezoidalRule(data, dx):
202 """ Calculate the integral according to trapezoidal rule
203 Approximates the definite integral of f from a to b by
204 the composite trapezoidal rule, using n subintervals
205 http://en.wikipedia.org/wiki/Trapezoidal_rule#Uniform_grid
206 """
tonyg 2014/03/12 15:28:38 The content of this comment is perfect, but please
207 n = len(data) - 1
208 s = data[0] + data[n]
209
210 for i in range(1, n):
211 s += 2 * data[i]
212
213 return s * dx / 2.0
214
180 def Total(data): 215 def Total(data):
181 """Returns the float value of a number or the sum of a list.""" 216 """Returns the float value of a number or the sum of a list."""
182 if type(data) == float: 217 if type(data) == float:
183 total = data 218 total = data
184 elif type(data) == int: 219 elif type(data) == int:
185 total = float(data) 220 total = float(data)
186 elif type(data) == list: 221 elif type(data) == list:
187 total = float(sum(data)) 222 total = float(sum(data))
188 else: 223 else:
189 raise TypeError 224 raise TypeError
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 new_values.append(value) 291 new_values.append(value)
257 else: 292 else:
258 new_values.append(0.001) 293 new_values.append(0.001)
259 # Compute the sum of the log of the values. 294 # Compute the sum of the log of the values.
260 log_sum = sum(map(math.log, new_values)) 295 log_sum = sum(map(math.log, new_values))
261 # Raise e to that sum over the number of values. 296 # Raise e to that sum over the number of values.
262 mean = math.pow(math.e, (log_sum / len(new_values))) 297 mean = math.pow(math.e, (log_sum / len(new_values)))
263 # Return the rounded mean. 298 # Return the rounded mean.
264 return int(round(mean)) 299 return int(round(mean))
265 300
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698