Exemple #1
0
	def check_anamoly_and_update_network(self, user_id, purchase):
		"""
		Gets friends with in the degree, checks anomaly and write to flagged_purchases.json
		if purchase is anomaly.
		Adds current purchase to user's purchases
		Args:
		    user_id:
		    purchase:

		Returns:
		    is_anomaly, mean, std

		"""
		if user_id in self.network:
			friend_list = self.get_friends_within_degree(user_id)
			#self.logger.info('Friend list for user %s: %s', user_id, friend_list)

			T = self.network[user_id].get_num_tracked()
			is_anomaly, mean, std = self.check_anomaly(friend_list, purchase, T)

			#self.logger.info("current purchase: %s", purchase)
			#self.logger.info('is_anomaly = %r mean = %f std = %f', is_anomaly, mean, std)


			# Build the flagged purchase json object and write to flagged_purchases.json
			flagged_purchase = OrderedDict()
			if is_anomaly:
				flagged_purchase['event_type'] = 'purchase'
				flagged_purchase['timestamp'] = purchase[1]
				flagged_purchase['id'] = user_id
				flagged_purchase['amount'] = "{0:.2f}".format(purchase[2])
				flagged_purchase['mean'] = "{0:.2f}".format(mean)
				flagged_purchase['sd'] = "{0:.2f}".format(std)

				json_string = json.dumps(flagged_purchase)
				#with open('.' + self.output_log, 'a') as f:
				with open(self.output_log, 'a+') as f:
					f.write(json_string)
					f.write('\n')

			#self.logger.info("Add current purchase %s for user %s", purchase, user_id)

			# Add the current purchase to the user's purchase list
			user = self.network[user_id]
			user.add_purchase(purchase)
			return is_anomaly, mean, std
		else:
			#self.logger.info("user: %s not in network.", user_id)
			user = User(user_id, self.num_tracked)
			# add his purchase
			user.add_purchase(purchase)
			# add user to network
			self.add_user(user)
			return None, None, None
Exemple #2
0
def process_batch_input(batch_input_file, output_log, logger):
    global index

    #with open('.' + batch_input_file, 'r') as f:
    with open(batch_input_file, 'r') as f:
        for idx, line in enumerate(f.readlines()):
            #logger.info('File %s: Processing line numer: %d', batch_input_file, idx)
            line.rstrip()
            json_line = json.loads(line)
            if 'D' in json_line:
                degree = json_line['D']
                num_tracked = json_line['T']
                #logger.info('Degree of network = %s number of tracked purchases = %s', degree, num_tracked)
                social_network = SocialNetwork(output_log, degree, num_tracked)
            elif json_line['event_type'] == 'purchase':
                timestamp = json_line['timestamp']
                purchase_amount = float(json_line['amount'])
                purchase = (-1 * index, timestamp, purchase_amount)
                user_id = json_line['id']

                if not user_id in social_network.network:
                    # create user
                    user = User(user_id, num_tracked)
                    # add his purchase
                    user.add_purchase(purchase)
                    # add user to network
                    social_network.add_user(user)
                else:
                    user = social_network.network[user_id]
                    user.add_purchase(purchase)
            elif json_line['event_type'] in ['befriend', 'unfriend']:
                user1_id = json_line['id1']
                user2_id = json_line['id2']
                timestamp = json_line['timestamp']
                event_type = json_line['event_type']

                if event_type == 'befriend':
                    social_network.add_friend(user1_id, user2_id)
                elif event_type == 'unfriend':
                    social_network.remove_friend(user1_id, user2_id)
            index += 1
    return social_network