Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from math import sqrt
- values = {
- 'Guido van Rossum': {'python': 5.0, 'php': 1.2, 'ruby': 4.0, 'perl': 2.8},
- 'Larry Wall': {'python': 5.0, 'php': 1.2, 'ruby': 4.0, 'perl': 5.0},
- }
- def pearsons_correlation_coefficient(values, obj1, obj2):
- """
- Коэффициент корреляции Пирсона
- диапазон значений результата от -1 до 1
- """
- if isinstance(values, dict) and values.has_key(obj1) and values.has_key(obj2):
- signs = [] # признаки оценки
- # отбор признаков, присутствующих у обоих
- for key, value in values[obj1].items():
- if key in values[obj2]:
- signs.append(key)
- # если признаков нет, вернуть 0
- if not signs: return 0
- # количество признаков
- n = len(signs)
- # сумма знач.всех признаков
- sum1 = sum([values[obj1][s] for s in signs])
- sum2 = sum([values[obj2][s] for s in signs])
- # сумма квадратов знач.всех признаков
- sum1Sq = sum([pow(values[obj1][s],2) for s in signs])
- sum2Sq = sum([pow(values[obj2][s],2) for s in signs])
- # сумма произведений знач.всех признаков
- pSum = sum([values[obj1][s]*values[obj2][s] for s in signs])
- # Коэффициент Пирсона
- num = pSum-(sum1*sum2/n)
- den = sqrt((sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n))
- if den == 0: return 0
- r = num/den
- return r
- else:
- raise ValueError
- print pearsons_correlation_coefficient(values, 'Guido van Rossum', 'Larry Wall')
- # 0.79850420561
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement