aboutsummaryrefslogtreecommitdiff
path: root/Assignment 5/ex52.py
blob: e2d53a1bc5e66b980bb6e2e3b533addc5919bd64 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# -*- coding: utf-8 -*-
"""
Created on Sat Dec 12 12:20:48 2015

@author: camil
"""

import sys
sys.path.insert(0, './packages')

from run_apriori import *

def load_movie_names():
    movies = {}
    with open('data/u.item') as f:
        for movie in f:
            data = movie.split('|')
            movies[str(data[0])] = data[1]
    return movies
    
def print_rule_nice(rule, movies):
    rule = rule.split('[')
    sets = rule[0].split(' <- ')
    lhs = [movies[i] for i in sets[0].split(' ')]
    rhs = [movies[i] for i in sets[1].split(' ')]
    print('[' + rule[1] + ':\n    Con: ' + ', '.join(lhs) + '\n    Ant: ' + ', '.join(rhs))

def ex522(rules, movies):
    for rule in rules:
        print_rule_nice(rule, movies)
        
def ex523(sets, movies):
    usable_sets = []
    for s in sets:
        data = s.split('[')
        items = [int(d) for d in data[0].split(' ')]
        support = float(data[1][5:-1])
        usable_sets.append((items, support))
        
    usable_sets.sort(key=lambda x: x[1], reverse=True)
    
    for i in range(4):
        print(', '.join([movies[str(x)] for x in usable_sets[i][0]]) + 
                ' (support: ' + str(usable_sets[i][1]) + ')')
                
    print(filter(lambda x: len(x[0]) > 3, usable_sets))
    
if __name__ == '__main__':
    sets, rules = run_apriori('data/MovieLensData.txt', 30, 80, 1000)
    movies = load_movie_names()
    
    ex522(rules, movies)
    ex523(sets, movies)