-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathanalyse.py
More file actions
112 lines (75 loc) · 2.54 KB
/
analyse.py
File metadata and controls
112 lines (75 loc) · 2.54 KB
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
TOTAL_DECKS_QTY = 778
def load_deck_as_dict(number):
with open('processed_decks/processed_deck_'+str(number),'r') as d:
cont = d.read()
cont = cont.split('\n')
card_names = [' '.join(c.split(' ')[1:]) for c in cont[1:]]
card_numbers = [int(c.split(' ')[0]) for c in cont[1:]]
return {card_names[i] : card_numbers[i] for i in range(len(card_names)) }
def has_card(deck, card):
return card in deck.keys()
def qty(deck, card):
try:
return deck[card]
except:
return 0
def get_all_decks(all_decks=[]):
if all_decks == []:
all_decks = [load_deck_as_dict(i) for i in range(1,TOTAL_DECKS_QTY)]
return all_decks
def card_frequency(card):
return 1.0*len(decks_that_have_card(card))/TOTAL_DECKS_QTY
def combined_frequency(card1,card2,all_decks=[]):
return 1.0*qty_decks_have_cards(card1,card2,all_decks)/TOTAL_DECKS_QTY
def decks_that_have_card(card,all_decks=[]):
return [d for d in get_all_decks(all_decks) if has_card(d,card)]
def qty_decks_have_cards(card1,card2,all_decks=[]):
tot = 0
decks = decks_that_have_card(card1,all_decks)
for d in decks:
if has_card(d,card2):
tot+=1
return tot
def decks_that_have_cards(card1,card2,all_decks=[]):
return [d for d in decks_that_have_card(card1,all_decks) if has_card(d,card2) ]
def get_all_cards():
keys = [d.keys() for d in get_all_decks()]
cards = {}
for k in keys:
for j in k:
cards[j]=1
return cards.keys()
def probability_card1_given_card2(card1,card2,freq,all_decks=[]):
try:
fr = freq[card1]
except:
freq[card1] = card_frequency(card1)
return 1.0*combined_frequency(card1,card2,all_decks)/freq[card1]
def generate_all_probs():
probs = []
all_decks = get_all_decks()
cards = get_all_cards()
freq = {}
count = 0
for i in cards:
count += 1
for j in cards:
if i!=j:
probs.append([i,j,probability_card1_given_card2(i,j,freq,all_decks)])
print(count)
return probs
def generate_all_probabilities(card_name):
probs = []
freq = {}
all_decks = get_all_decks()
cards = get_all_cards()
for i in cards:
if i!=card_name:
probs.append([i,card_name,probability_card1_given_card2(i,card_name,freq,all_decks)])
return probs
all_probs = generate_all_probs()
with open('final_results','w') as final:
results = ''
for a,b,c in all_probs:
results+= a+'---'+b+'---'+str(c)+'\n'
final.write(results)