コード例 #1
0
    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
コード例 #2
0
ファイル: SerialEpisode.py プロジェクト: hucome/MDSMiner
    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
コード例 #3
0
ファイル: Tsbatcher.py プロジェクト: wsgan001/MDSMiner
    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([])
コード例 #4
0
    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." 
コード例 #5
0
ファイル: Tsbatcher.py プロジェクト: hucome/MDSMiner
 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([]) 
コード例 #6
0
ファイル: SerialEpisode.py プロジェクト: hucome/MDSMiner
    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) 
    
    
コード例 #7
0
ファイル: Tsbatcher.py プロジェクト: hucome/MDSMiner
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
コード例 #8
0
ファイル: Tsbatcher.py プロジェクト: wsgan001/MDSMiner
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
コード例 #9
0
    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)