Changeset 6 for trunk/lib/nanownlib/stats.py
- Timestamp:
- 07/09/15 12:27:04 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/nanownlib/stats.py
r4 r6 227 227 yield (sid,[dict(r) for r in probes]) 228 228 229 230 def subseries(db, probe_type, unusual_case, size=None, offset=None, field='packet_rtt'): 231 cursor = db.conn.cursor() 232 cursor.execute("SELECT max(c) FROM (SELECT count(sample) c FROM probes WHERE type=? GROUP BY test_case)", (probe_type,)) 233 population_size = cursor.fetchone()[0] 234 235 if size == None or size > population_size: 236 size = population_size 237 if offset == None or offset >= population_size or offset < 0: 238 offset = numpy.random.random_integers(0,population_size-1) 239 240 query=""" 241 SELECT %(field)s AS unusual_case, 242 (SELECT avg(%(field)s) FROM probes,analysis 243 WHERE analysis.probe_id=probes.id AND probes.test_case!=:unusual_case AND probes.type=:probe_type AND sample=u.sample) AS other_cases 244 FROM (SELECT probes.sample,%(field)s FROM probes,analysis 245 WHERE analysis.probe_id=probes.id AND probes.test_case =:unusual_case AND probes.type=:probe_type) u 246 LIMIT :size OFFSET :offset 247 """ % {"field":field} 248 249 params = {"probe_type":probe_type, "unusual_case":unusual_case, "offset":offset, "size":size} 250 cursor.execute(query, params) 251 for row in cursor: 252 size -= 1 253 yield dict(row) 254 255 if size > 0: 256 params['offset'] = 0 257 params['size'] = size 258 cursor.execute(query, params) 259 for row in cursor: 260 yield dict(row) 261 262 229 263 # if test_cases=None, include all of them. Otherwise, include only the specified test cases. 230 264 def samples2Distributions(samples, field, test_cases=None): … … 270 304 271 305 306 def bootstrap3(estimator, db, probe_type, unusual_case, subseries_size, num_trials): 307 ret_val = [] 308 for t in range(num_trials): 309 ret_val.append(estimator(subseries(db, probe_type, unusual_case, subseries_size))) 310 311 return ret_val 312 313 272 314 # Returns the test case name that clearly has higher RTT; otherwise, returns None 273 315 def boxTest(params, test_cases, samples): … … 329 371 # Returns 1 if unusual_case is unusual in the expected direction 330 372 # 0 otherwise 331 def midhingeTest(params, unusual_case,greater, samples):332 diffs = list(samples2MeanDiffs(samples, 'packet_rtt', unusual_case))373 def midhingeTest(params, greater, samples): 374 diffs = [s['unusual_case']-s['other_cases'] for s in samples] 333 375 334 376 mh = midhinge(diffs, params['distance'])
Note: See TracChangeset
for help on using the changeset viewer.