33 lines
641 B
Python
33 lines
641 B
Python
|
import numpy
|
||
|
|
||
|
def rank(x):
|
||
|
y = x.sort()
|
||
|
print(y)
|
||
|
res = []
|
||
|
for i in x:
|
||
|
res.append(y.index(x[i]) + 1)
|
||
|
return res
|
||
|
|
||
|
def spearman(a, b):
|
||
|
if len(a) != len(b):
|
||
|
print('Both datasets must be the same length!')
|
||
|
return undefined
|
||
|
|
||
|
n = len(a)
|
||
|
|
||
|
# rank set a
|
||
|
aranks = sorted(range(n), reverse=True, key=a.__getitem__)
|
||
|
print(aranks)
|
||
|
|
||
|
# rank set b
|
||
|
branks = rank(b)
|
||
|
|
||
|
# work out the difference between ranks
|
||
|
d = aranks - branks
|
||
|
d = d**2
|
||
|
d = numpy.sum(d)
|
||
|
|
||
|
# plug the values into the formula
|
||
|
return 1 - ((6*d) / (n**3 - n))
|
||
|
|
||
|
print(spearman([1,2,3,5,4], [5,4,3,2,1]))
|