Я надеюсь включить элементы в уравнение из любого списка значений словаря. Уравнение для расчета гомофилии.
Справочная информация:
Гомофилия: вероятность того, что различные характеристики будут совместно использоваться в социальной сети. Например, вероятность того, что люди из выборочной популяции имеют общий цвет глаз.
Вот как может работать уравнение в этом примере:
(частота голубых глаз / суммарная частота) ^ 2 + (частота карие глаз / суммарная частота) ^ 2
Имейте в виду, это должно сработать, даже если у вас более двух характеристик (зеленый, ореховый, серый). Но я стараюсь, чтобы было легко проверить результат.
Так что, если бы у нас были эти данные в виде словаря:
EYES = {'Kevin':'brown', 'Frank':'blue', 'Alex':'blue', 'Tracey':'brown', 'Milo':'blue'}
Сначала я вычисляю частоту значений в словаре, например:
def frequency(EYES):
Eyes_freq_dict = Counter(EYES.values())
return Eyes_freq_dict
Counter({'blue': 3, 'brown': 2})
Теперь у меня есть второй словарь частот, с которыми можно работать:
Counter({'blue': 3, 'brown': 2})
Но так как словари не упорядочены, я должен поместить значения в формат, в котором я могу выполнять математику.
Я думаю, что нужно , чтобы быть списком? Пожалуйста, поправьте меня, если я ошибаюсь:
Eyes_freq_dict = frequency(EYES)
EYESlist = []
for v in Eyes_freq_dict.values():
EYESlist.append(v)
Затем я получаю значения самостоятельно в виде списка:
EYESlist
[3, 2]
Камень преткновения:
Я новичок в математике с Python, поэтому теперь я волнуюсь, что мог зайти в тупик. Возможно ли мне включить эти компоненты в приведенное выше уравнение?
Желаемое уравнение в этом случае будет:
(EYESlist [0] / sum (EYESlist)) ^ 2 + (EYESlist [1]) / sum (EYESlist)) ^ 2
Или по-английски:
** 3/5 в квадрате + 2/5 в квадрате = 0,52 **
Проблема теперь в следующем: как перебрать, во-первых, этот список. А затем ЛЮБОЙ список (любой длины), чтобы получить правильный результат.
Если маршрут, по которому я иду, неудачный, пожалуйста, будь добр, но дай мне знать! Я был бы счастлив, если бы есть более элегантный способ решения этой проблемы, но я надеюсь, что это интересно исследовать.
Просто пытаясь набрать формулу и протестировать ее на языке питона, я запутался, потому что получаю сообщение об ошибке:
sum(((EYESlist[0]/ sum(EYESlist))**2)((EYESlist[1])/ sum(EYESlist))**2)
#TypeError: 'float' object is not callable
Я надеюсь, что кто-нибудь может указать мне правильное направление! Я хотел бы продолжить с REST моей домашней работы (у меня есть пять других проблем, которые нужно решить).
Что я, вероятно, сделаю, если не смогу решить это быстро, перейду к другим вопросам и затем вернусь к этому. Это интересный вызов для меня.
Лучший,
A