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)
|