Mercurial > hg > nsaunier > 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: |
