def extractSubEps(self, prefix): ''' extract sub episodes of this episode recursively. ''' sub_epsset = EpisodeSet([]) if prefix.length == 0: for i in range(self.length): pfx = [self.events[i]] pep = SerialEpisode(pfx) # prefix episode #print pep.repr sub_epsset.add(pep) #sub_eps[pep.repr] = sub_eps[pep.repr]+1 if sub_eps.has_key(pep.repr) else 1 sep = SerialEpisode( self.events[i + 1:self.length]) # suffix episodes sub_epsset.merge(sep.extractSubEps(pep)) else: for i in range(self.length): pfx = copy.deepcopy(prefix.events) pfx.extend([self.events[i]]) pep = SerialEpisode(pfx) # prefix episode #print pep.repr sub_epsset.add(pep) #sub_eps[pep.repr] = sub_eps[pep.repr]+1 if sub_eps.has_key(pep.repr) else 1 sep = SerialEpisode( self.events[i + 1:self.length]) # suffix episodes sub_epsset.merge(sep.extractSubEps(pep)) return sub_epsset
def extractSubEps(self,prefix): ''' extract sub episodes of this episode recursively. ''' sub_epsset = EpisodeSet([]) if prefix.length == 0: for i in range(self.length): pfx = [ self.events[i] ] pep = SerialEpisode(pfx) # prefix episode #print pep.repr sub_epsset.add(pep) #sub_eps[pep.repr] = sub_eps[pep.repr]+1 if sub_eps.has_key(pep.repr) else 1 sep = SerialEpisode(self.events[i+1:self.length]) # suffix episodes sub_epsset.merge(sep.extractSubEps(pep)) else: for i in range(self.length): pfx = copy.deepcopy(prefix.events) pfx.extend([ self.events[i] ]) pep = SerialEpisode(pfx) # prefix episode #print pep.repr sub_epsset.add(pep) #sub_eps[pep.repr] = sub_eps[pep.repr]+1 if sub_eps.has_key(pep.repr) else 1 sep = SerialEpisode(self.events[i+1:self.length]) # suffix episodes sub_epsset.merge(sep.extractSubEps(pep)) return sub_epsset
def __init__(self, interval, window): """ Constructor """ # Calling the super super(Tsbatcher, self).__init__() # Storing values self.length = 0 self.interval = interval self.starttime = 0 self.endtime = self.starttime self.window = window self.winIndex = -1 self.epsset = EpisodeSet([])
def run(self): """ Read the data in window, get episodes and their statistics information into an episode set. """ global streamers,miners,conds,windows,win_epssets,nwinm epsset = EpisodeSet() while True: if conds[self.name].acquire(): if self.name in windows.keys() and epsset.length == 0: #start = time.time() tsbatcher = Tsbatcher(self.mtp,windows[self.name]) epsset = tsbatcher.episodeStatistic() #end = time.time() #logging.critical('Time spent mining: %f seconds' % (end - start)) del windows[self.name] print "\tMiner "+self.name+":"+"window is done." conds[self.name].notify() elif not streamers[self.name].is_alive(): conds[self.name].release() break conds[self.name].release() else: conds[self.name].wait() if mutex.acquire(): if epsset.length != 0 and self.name not in win_epssets.keys(): win_epssets[self.name] = copy.deepcopy(epsset) #win_epssets[self.name].__show__() epsset = EpisodeSet() nwinm[self.name] += 1 mutex.release() time.sleep(1) print "\tMiner "+self.name+":"+"is over."
e6 = Event("A,2") e7 = Event("C,3") e8 = Event("B,4") e9 = Event("C,4") e10 = Event("D,4") el1 = [e1,e2,e3,e4] el2 = [e3,e4,e5] el3 = [e2,e6,e7] el4 = [e6,e7,e8,e8] print el1 print el2 print el3 print el4 eps1 = SerialEpisode(el1) eps2 = SerialEpisode(el2) eps3 = SerialEpisode(el3) eps4 = SerialEpisode(el4) epss1 = EpisodeSet([eps1,eps2]) epss2 = EpisodeSet([eps1,eps4]) epss1.__show__() epss2.__show__() print epss1.commonRatio(epss2)
class Tsbatcher(list): def __init__(self, interval, window): """ Constructor """ # Calling the super super(Tsbatcher, self).__init__() # Storing values self.length = 0 self.interval = interval self.starttime = 0 self.endtime = self.starttime self.window = window self.winIndex = -1 self.epsset = EpisodeSet([]) ###################################################################### # Generate Episodes ###################################################################### def episodeStatistic(self): ''' Generate episode set in current Window with this time span batch. ''' while len(self.window) + self.winIndex >= 0: self.move() seq = [ e for e in self ] #print seq serialepisode = SerialEpisode(seq) self.epsset.merge(serialepisode.subeps()) return self.epsset def extractEpisodes(self,prefix,sequence): ''' Generate episodes in current time span batch. ''' if len(prefix) == 0: for i in range(len(sequence)): pfx = [ sequence[i] ] print pfx tsq = copy.deepcopy(sequence[i+1:len(sequence)]) self.extractEpisodes(pfx,tsq) else: for i in range(len(sequence)): pfx = copy.deepcopy(prefix) pfx.extend([ sequence[i] ]) print pfx tsq = copy.deepcopy(sequence[i+1:len(sequence)]) self.extractEpisodes(pfx,tsq) ###################################################################### # Management ###################################################################### def move(self): """ Move the batch along the window. """ out = None if len(self) > 0: out = self[-1] del self[-1] if len(self) == 0: self.starttime += 1 else: self.starttime = self[-1].time #event = Event("X,0") while len(self.window) + self.winIndex >= 0: event = self.window[self.winIndex] if len(self) == 0: self.insert(0, event) self.starttime = event.time self.endtime = event.time self.winIndex -= 1 else: if event.time - self.starttime <= self.interval: self.endtime = event.time self.insert(0,event) self.winIndex -= 1 else: break #print "batch:"+str(self) def filled(self): """ Returns whether the window is full (i.e. contains length elements). """ return len(self) == self.length ###################################################################### # Frequency ###################################################################### def getCount(self, event): """ Returns the count of the given event in this window. """ # Attempt 2: Still too slow count = 0 for mEvent in self: if event.__st__(mEvent): count += 1 return count # Attempt 1: Too slow #return reduce((lambda x, y: x+y), # map((lambda i: itemset <= i), self)) ###################################################################### # Getters ###################################################################### def getStreamEventTypes(self): return self.streamEventTypes
class Tsbatcher(list): def __init__(self, interval, window): """ Constructor """ # Calling the super super(Tsbatcher, self).__init__() # Storing values self.length = 0 self.interval = interval self.starttime = 0 self.endtime = self.starttime self.window = window self.winIndex = -1 self.epsset = EpisodeSet([]) ###################################################################### # Generate Episodes ###################################################################### def episodeStatistic(self): ''' Generate episode set in current Window with this time span batch. ''' while len(self.window) + self.winIndex >= 0: self.move() seq = [e for e in self] #print seq serialepisode = SerialEpisode(seq) self.epsset.merge(serialepisode.subeps()) return self.epsset def extractEpisodes(self, prefix, sequence): ''' Generate episodes in current time span batch. ''' if len(prefix) == 0: for i in range(len(sequence)): pfx = [sequence[i]] print pfx tsq = copy.deepcopy(sequence[i + 1:len(sequence)]) self.extractEpisodes(pfx, tsq) else: for i in range(len(sequence)): pfx = copy.deepcopy(prefix) pfx.extend([sequence[i]]) print pfx tsq = copy.deepcopy(sequence[i + 1:len(sequence)]) self.extractEpisodes(pfx, tsq) ###################################################################### # Management ###################################################################### def move(self): """ Move the batch along the window. """ out = None if len(self) > 0: out = self[-1] del self[-1] if len(self) == 0: self.starttime += 1 else: self.starttime = self[-1].time #event = Event("X,0") while len(self.window) + self.winIndex >= 0: event = self.window[self.winIndex] if len(self) == 0: self.insert(0, event) self.starttime = event.time self.endtime = event.time self.winIndex -= 1 else: if event.time - self.starttime <= self.interval: self.endtime = event.time self.insert(0, event) self.winIndex -= 1 else: break #print "batch:"+str(self) def filled(self): """ Returns whether the window is full (i.e. contains length elements). """ return len(self) == self.length ###################################################################### # Frequency ###################################################################### def getCount(self, event): """ Returns the count of the given event in this window. """ # Attempt 2: Still too slow count = 0 for mEvent in self: if event.__st__(mEvent): count += 1 return count # Attempt 1: Too slow #return reduce((lambda x, y: x+y), # map((lambda i: itemset <= i), self)) ###################################################################### # Getters ###################################################################### def getStreamEventTypes(self): return self.streamEventTypes
e5 = Event("A,5") e6 = Event("A,2") e7 = Event("C,3") e8 = Event("B,4") e9 = Event("C,4") e10 = Event("D,4") el1 = [e1, e2, e3, e4] el2 = [e3, e4, e5] el3 = [e2, e6, e7] el4 = [e6, e7, e8, e8] print el1 print el2 print el3 print el4 eps1 = SerialEpisode(el1) eps2 = SerialEpisode(el2) eps3 = SerialEpisode(el3) eps4 = SerialEpisode(el4) epss1 = EpisodeSet([eps1, eps2]) epss2 = EpisodeSet([eps1, eps4]) epss1.__show__() epss2.__show__() print epss1.commonRatio(epss2)