Mercurial Hosting > traffic-intelligence
comparison python/indicators.py @ 285:5957aa1d69e1
Integrating Mohamed's changes
Changed the indicator interface to access values, so that the generic LCSS implementation can be used
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Sat, 26 Jan 2013 19:02:25 -0500 |
parents | abbd4bc13dac |
children | fa95796a76b3 |
comparison
equal
deleted
inserted
replaced
284:f2cf16ad798f | 285:5957aa1d69e1 |
---|---|
36 | 36 |
37 def empty(self): | 37 def empty(self): |
38 return len(self.values) == 0 | 38 return len(self.values) == 0 |
39 | 39 |
40 def __getitem__(self, i): | 40 def __getitem__(self, i): |
41 'Returns ith value' | |
42 sortedKeys = sorted(self.values.keys()) | |
43 if 0<=i<len(sortedKeys): | |
44 return self.values[sortedKeys[i]] | |
45 else: | |
46 return None | |
47 | |
48 def valueAtInstant(self, i): | |
41 if i in self.values.keys(): | 49 if i in self.values.keys(): |
42 return self.values[i] | 50 return self.values[i] |
43 else: | 51 else: |
44 return None | 52 return None |
53 | |
54 def __len__(self): | |
55 return len(self.values) | |
45 | 56 |
46 def __iter__(self): | 57 def __iter__(self): |
47 self.iterInstantNum = 0 # index in the interval or keys of the dict | 58 self.iterInstantNum = 0 # index in the interval or keys of the dict |
48 return self | 59 return self |
49 | 60 |
51 if self.iterInstantNum >= len(self.values):#(self.timeInterval and self.iterInstantNum>=self.timeInterval.length())\ | 62 if self.iterInstantNum >= len(self.values):#(self.timeInterval and self.iterInstantNum>=self.timeInterval.length())\ |
52 # or (self.iterInstantNum >= self.values) | 63 # or (self.iterInstantNum >= self.values) |
53 raise StopIteration | 64 raise StopIteration |
54 else: | 65 else: |
55 self.iterInstantNum += 1 | 66 self.iterInstantNum += 1 |
56 return self.values[self.values.keys()[self.iterInstantNum-1]] | 67 return self.__getitem__(self.iterInstantNum-1) |
57 | 68 |
58 def getTimeInterval(self): | 69 def getTimeInterval(self): |
59 return self.timeInterval | 70 return self.timeInterval |
60 | 71 |
61 def getValues(self): | 72 def getValues(self): |
81 time = sorted(self.values.keys()) | 92 time = sorted(self.values.keys()) |
82 plot([x/xfactor for x in time], [self.values[i] for i in time], options+marker, **kwargs) | 93 plot([x/xfactor for x in time], [self.values[i] for i in time], options+marker, **kwargs) |
83 if self.maxValue: | 94 if self.maxValue: |
84 ylim(ymax = self.maxValue) | 95 ylim(ymax = self.maxValue) |
85 | 96 |
97 @staticmethod | |
98 def computeDLCSS(indicator1, indicator2, threshold, delta = float('inf'), method= 'min'): | |
99 ''' compute the distance between two indicators using LCSS | |
100 two common methods are used: min or mean of the indicators length''' | |
101 # l1= TemporalIndicator1.valueSorted | |
102 # l2= TemporalIndicator2.valueSorted | |
103 # if method = 'min': | |
104 # DLCSS= 1- (LCSS(l1,l2, threshold, delta, distance))/min(len(l1),len(l2))) | |
105 # if method = 'mean': | |
106 # average= len(l1)+len(l2))/2 | |
107 # DLCSS= 1- ((LCSS(l1,l2, threshold, delta, distance))/average) | |
108 # return DLCSS | |
109 return 0 | |
110 | |
86 class SeverityIndicator(TemporalIndicator): | 111 class SeverityIndicator(TemporalIndicator): |
87 '''Class for severity indicators | 112 '''Class for severity indicators |
88 field mostSevereIsMax is True | 113 field mostSevereIsMax is True |
89 if the most severe value taken by the indicator is the maximum''' | 114 if the most severe value taken by the indicator is the maximum''' |
90 | 115 |
91 def __init__(self, name, values, timeInterval=None, mostSevereIsMax=True, ignoredValue = None, maxValue = None): | 116 def __init__(self, name, values, timeInterval=None, mostSevereIsMax=True, ignoredValue = None, maxValue = None): |
92 TemporalIndicator.__init__(self, name, values, timeInterval, maxValue) | 117 TemporalIndicator.__init__(self, name, values, timeInterval, maxValue) |
93 self.mostSevereIsMax = mostSevereIsMax | 118 self.mostSevereIsMax = mostSevereIsMax |
94 self.ignoredValue = ignoredValue | 119 self.ignoredValue = ignoredValue |
95 | 120 |
96 def getMostSevereValue(self, minNInstants=1): | 121 def getMostSevereValue(self, minNInstants=1): # TODO use scoreatpercentile |
97 from matplotlib.mlab import find | 122 from matplotlib.mlab import find |
98 from numpy.core.multiarray import array | 123 from numpy.core.multiarray import array |
99 from numpy.core.fromnumeric import mean | 124 from numpy.core.fromnumeric import mean |
100 values = array(self.values.values()) | 125 values = array(self.values.values()) |
101 if self.ignoredValue: | 126 if self.ignoredValue: |