コード例 #1
0
def gen_trace(trace, deviant):
    startTime = datetime.datetime.now(datetime.timezone.utc)

    currentTime = startTime
    t = xes.Trace()
    for i, event in enumerate(trace):
        if (i == len(trace) - 1):
            if deviant:
                currentTime = startTime + datetime.timedelta(minutes=150)
            else:
                currentTime = startTime + datetime.timedelta(minutes=10)

        e = xes.Event()
        e.attributes = [
            xes.Attribute(type="date",
                          key="time:timestamp",
                          value=currentTime.astimezone().isoformat()),
            xes.Attribute(type="string",
                          key="concept:name",
                          value=event["concept:name"]),
            xes.Attribute(type="string",
                          key="org:resource",
                          value=event["org:resource"]),
            xes.Attribute(type="string",
                          key="lifecycle:transition",
                          value=event["lifecycle:transition"])
        ]
        t.add_event(e)

    return t
コード例 #2
0
def create_xes_trace(trace_dict):
    xes_trace = xes.Trace()


    ## Add trace metadata
    trace_name = trace_dict["name"]
    deviant = trace_dict["deviant"]

    xes_trace.add_attribute(xes.Attribute(type="string", key="concept:name", value=trace_name))
    xes_trace.add_attribute(xes.Attribute(type="int", key="Label", value=str(1) if deviant else str(0)))

    ## Add events
    events = trace_dict["events"]
    for event in events:
        event_timestamp = event["timestamp"]
        event_name = event["concept:name"]
        event_resource = event["org:resource"]
        event_lifecycle = event["lifecycle:transition"]


        xes_event = xes.Event()
        xes_event.attributes = [
            xes.Attribute(type="date",   key="time:timestamp", value=event_timestamp),
            xes.Attribute(type="string", key="concept:name", value=event_name),
            xes.Attribute(type="string", key="org:resource", value=event_resource),
            xes.Attribute(type="string", key="lifecycle:transition", value=event_lifecycle)
        ]
        xes_trace.add_event(xes_event)
    return xes_trace
コード例 #3
0
 def __init__(self, vk, news_feed, ontology, event_log, community):
     threading.Thread.__init__(self)
     self.community = community
     self.vk = vk
     self.news_feed = news_feed
     self.ontology = ontology
     self.event_log = event_log
     self.owner_id = "-" + str(self.community.g_id)
     self.trace = xes.Trace()
コード例 #4
0
 def __init__(self, vk, news_feed, ontology, event_log, person):
     threading.Thread.__init__(self)
     self.vk = vk
     self.news_feed = news_feed
     self.event_log = event_log
     self.ontology = ontology
     self.person = person
     self.owner_id = person.u_id
     self.user_online = False
     self.trace = xes.Trace()
コード例 #5
0
    def run(self):
        print("start mining events for user %s" % self.person.u_id)

        time_now = 0
        post_idx = 0
        posts = []

        while True:
            # Check user likes and reposts
            if self.user_online and time_now % time_to_check_likes == 0:
                liked_posts = self.vk.get_liked_posts(self.person)

                for liked_post in liked_posts:
                    self.trace.add_event(self.event_log.event_post_liked(self.person.u_id, liked_post))
                    self.person.posts_liked.append(liked_post)
                    self.ontology.post_liked(self.person.u_id, liked_post)

            # Check user status
            if time_now % time_to_check_online == 0:
                is_online = self.vk.is_user_online(self.person)
                if not self.user_online and is_online:
                    print("user %s online" % self.person.u_id)
                    self.trace = xes.Trace()
                    self.trace.add_event(self.event_log.event_online(self.person.u_id))
                    self.user_online = True
                elif self.user_online and not is_online:
                    print("user %s offline" % self.person.u_id)
                    self.trace.add_event(self.event_log.event_offline(self.person.u_id))
                    self.event_log.add_trace(self.trace)
                    self.user_online = False
                    time_now = 0

            # Load user news feed
            if self.user_online and time_now % time_to_update_user_news == 0:
                time.sleep(10)
                posts = self.news_feed.get_user_news(self.person)
                post_idx = 0

            # Check user see new post
            if self.user_online and time_now % time_to_see_post == 0:
                if post_idx < len(posts):
                    self.trace.add_event(self.event_log.event_post_seen(self.person.u_id, posts[post_idx]))
                    self.person.posts_seen.append(posts[post_idx])
                    self.ontology.post_viewed(self.person.u_id, posts[post_idx])
                    post_idx += 1

            # Load or update news from person
            if self.user_online and time_now % time_to_update_news == 0:
                self.load_news_feed()

            # time tick
            time_now += time_tick
            time.sleep(time_tick)
コード例 #6
0
def main():
    for arg in sys.argv:
        print(arg)
    if len(sys.argv) < 6:
        print("Incorrect number of arguments: " + str(len(sys.argv)))
        usage()
        return 0
    try:
        inputPath = sys.argv[1]
        resourceLabel = sys.argv[2].split("=")[1].strip()
        activityLabel = sys.argv[3].split("=")[1].strip()
        traceLabel = sys.argv[4].split("=")[1].strip()
        outputPath = sys.argv[5]
        #print(resourceLabel,inputPath,activityLabel,traceLabel,outputPath)
        open(inputPath, "r").close()
        traces = BuildTraces(inputPath, resourceLabel, activityLabel,
                             traceLabel)
        log = xes.Log()
        #add the trace to the xes log, just like in the xes developer's github example
        for traceId in traces.keys():
            t = xes.Trace()
            t.attributes = [
                xes.Attribute(type="string", key="concept:name", value=traceId)
            ]
            #add the events to the trace
            for event in traces[traceId]:
                e = xes.Event()
                e.attributes = [
                    xes.Attribute(type="string",
                                  key="concept:name",
                                  value=event[1]),
                    xes.Attribute(type="string",
                                  key="Activity",
                                  value=event[1]),
                    xes.Attribute(type="string",
                                  key="org:resource",
                                  value=event[0]),
                    xes.Attribute(type="string", key="Actor", value=event[0])
                ]
                t.add_event(e)
            #add the trace
            log.add_trace(t)
        log.classifiers = [
            xes.Classifier(name="org:resource", keys="org:resource"),
            xes.Classifier(name="concept:name", keys="concept:name")
        ]
        #write the log
        open(outputPath, "w+").write(str(log))
    except IOError:
        print("Input file not found: " + sys.argv[1])
コード例 #7
0
def generate_XES(events=None, log_path='log.xes'):
    # Borrow from the XES example at https://github.com/maxsumrall/xes
    log = xes.Log()

    global action_log
    if events is None:
        events = copy(action_log)

    def makeEvent(logged_event):
        event = xes.Event()

        event.attributes = [
            xes.Attribute(type="string",
                          key="concept:name",
                          value=logged_event[1]),
            xes.Attribute(type="string",
                          key="org:resource",
                          value=logged_event[0])
        ]

        if len(logged_event) == 4:
            event.attributes.append(
                xes.Attribute(type="string",
                              key="concept:required_privileges_for_action",
                              value=logged_event[2]))
            event.attributes.append(
                xes.Attribute(type="string",
                              key="concept:actor_class",
                              value=logged_event[3]))

        return event

    for ev_index in range(len(events)):
        event_set = events[ev_index]
        trace = xes.Trace()
        trace.add_attribute(
            xes.Attribute(type="int", key="trace_id", value=str(ev_index + 1)))
        [
            trace.add_event(makeEvent(logged_event))
            for logged_event in event_set
        ]
        log.add_trace(trace)

    log.classifiers = [
        xes.Classifier(name="org:resource", keys="org:resource"),
        xes.Classifier(name="concept:name", keys="concept:name")
    ]

    with open(log_path, 'w') as log_file:
        log_file.write(str(log))
コード例 #8
0
ファイル: SynData2Xes.py プロジェクト: wsgan001/PMTools
def BuildXesLog(traces):
    log = xes.Log()

    i = 0
    for trace in traces:
        #the name of the trace is just the trace number
        traceName = str(trace[0])
        #add the anomaly status of the trace; this likely won't be used by any ProM or process-discovery tools, but is worth preserving
        isAnomalous = str(trace[1])
        #build the trace info
        t = xes.Trace()
        traceNameAttr = xes.Attribute(type="string",
                                      key="concept:name",
                                      value=traceName)
        traceIsAnomalousAttr = xes.Attribute(type="string",
                                             key="concept:isAnomalous",
                                             value=isAnomalous)
        #store both the trace name and the anomaly-status in the trace attributes
        t.attributes = [traceNameAttr, traceIsAnomalousAttr]
        #add the events to the trace; the event sequence is just an ordered sequence of characters with no other info
        for eventName in trace[2]:
            e = xes.Event()
            e.attributes = [
                xes.Attribute(type="string",
                              key="concept:name",
                              value=eventName),
                xes.Attribute(type="string", key="Activity", value=eventName)
                #xes.Attribute(type="string", key="Activity", value=eventName)
            ]
            t.add_event(e)
        #add the trace
        log.add_trace(t)
        #print("here: "+str(i)+" of "+str(len(traces)))
        i += 1

    #add the classifiers
    log.classifiers = [
        #xes.Classifier(name="org:resource",keys="org:resource"),
        #xes.Classifier(name="concept:name",keys="concept:name")
        #xes.Classifier(name="concept:traceName",keys="concept:traceName"),
        #xes.Classifier(name="concept:isAnomalous",keys="concept:isAnomalous")
        xes.Classifier(name="Activity", keys="Activity"),
        xes.Classifier(name="concept:name", keys="concept:name")
    ]

    return log
コード例 #9
0
    def run(self):
        print("start mining events for community %s" % self.community.g_id)

        time_now = 0
        post_idx = 0
        posts = []
        posts_seen = {}

        while True:
            # Load or update news from community
            if time_now % time_to_update_news == 0:
                self.load_news_feed()

            # Update group event trace
            if time_now % time_to_update_group_trace == 0:
                self.event_log.add_trace(self.trace)
                self.trace = xes.Trace()

                time_now = 0

            # time tick
            time_now += time_tick
            time.sleep(time_tick)
コード例 #10
0
ファイル: g2xes.py プロジェクト: wsgan001/PMTools
def WriteXes(traces, outputPath):
    log = xes.Log()
    #print("TRACES: "+str(traces))
    #add the trace to the xes log, just like in the xes developer's github example
    for trace in traces:
        t = xes.Trace()
        t.attributes = [
            xes.Attribute(type="string", key="concept:name", value=trace[1])
        ]
        #add the events to the trace
        for event in trace[2]:
            e = xes.Event()
            e.attributes = [
                xes.Attribute(type="string",
                              key="concept:name",
                              value=event["concept:name"]),
                xes.Attribute(type="string",
                              key="Activity",
                              value=event["concept:name"]),
                xes.Attribute(type="string",
                              key="org:resource",
                              value=event["org:resource"]),
                xes.Attribute(type="string",
                              key="Actor",
                              value=event["org:resource"])
            ]
            t.add_event(e)
        #add the trace
        log.add_trace(t)
    log.classifiers = [
        xes.Classifier(name="org:resource", keys="org:resource"),
        xes.Classifier(name="concept:name", keys="concept:name")
    ]
    #write the log
    of = open(outputPath, "w+")
    of.write(str(log))
    of.close()
コード例 #11
0
def gen_xes_log(events_lists, deviant):
    traces = [[{
        "concept:name": e,
        "org:resource": "actor"
    } for e in events_list] for events_list, _ in events_lists]

    startTime = datetime.datetime.now()

    log = xes.Log()
    for trace in traces:
        currentTime = startTime
        t = xes.Trace()
        for i, event in enumerate(trace):
            if event["concept:name"] == deviant:
                currentTime += datetime.timedelta(minutes=60)
            else:
                currentTime += datetime.timedelta(minutes=5)

            e = xes.Event()
            e.attributes = [
                xes.Attribute(type="date",
                              key="time:timestamp",
                              value=currentTime.isoformat()),
                xes.Attribute(type="string",
                              key="concept:name",
                              value=event["concept:name"]),
                xes.Attribute(type="string",
                              key="org:resource",
                              value=event["org:resource"]),
                xes.Attribute(type="string",
                              key="lifecycle:transition",
                              value=event["lifecycle:transition"])
            ]
            t.add_event(e)
        log.add_trace(t)

    open("example.xes", "w").write(str(log))