Skip to content

Commit dd62adf

Browse files
committed
Percentual proximity scoring algorithm added
1 parent 886da13 commit dd62adf

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

scalg.py

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
2+
def score(source_data : list, weights : list, *args) -> list:
3+
4+
'''
5+
int list - weights
6+
possible values - 0 / 1
7+
0 if lower values have higher weight in the data set
8+
1 if higher values have higher weight in the data set
9+
==========
10+
Optional arguments:
11+
str - "score_lists"
12+
get a list with all the scores for each piece of data
13+
14+
str - "scores"
15+
get only the final scores for each data set
16+
'''
17+
18+
# getting data
19+
data_lists = []
20+
for item in source_data:
21+
for i in range(len(item)):
22+
try:
23+
data_lists[i].append(float(item[i]))
24+
except IndexError:
25+
data_lists.append([])
26+
data_lists[i].append(float(item[i]))
27+
28+
score_lists = []
29+
# calculating price score
30+
for dlist, weight in zip(data_lists, weights):
31+
mind = min(dlist)
32+
maxd = max(dlist)
33+
34+
score = []
35+
if weight == 0:
36+
for item in dlist:
37+
try:
38+
score.append(1 - ((item - mind) / (maxd - mind)))
39+
except ZeroDivisionError:
40+
score.append(1)
41+
42+
elif weight == 1:
43+
for item in dlist:
44+
try:
45+
score.append((item - mind) / (maxd - mind))
46+
except ZeroDivisionError:
47+
score.append(0)
48+
49+
else:
50+
raise ValueError("Invalid weight of %f provided" % (weight))
51+
52+
score_lists.append(score)
53+
54+
# return score lists
55+
if "score_lists" in args:
56+
return score_lists
57+
58+
# initialize final scores
59+
final_scores = [0 for i in range(len(score_lists[0]))]
60+
61+
# generate final scores
62+
for i, slist in enumerate(score_lists):
63+
for j, ele in enumerate(slist):
64+
final_scores[j] = final_scores[j] + ele
65+
66+
# return only scores
67+
if "scores" in args:
68+
return final_scores
69+
70+
# append scores to source data
71+
for i, ele in enumerate(final_scores):
72+
source_data[i].append(ele)
73+
74+
return source_data

0 commit comments

Comments
 (0)