Анализ сети Python Soc: вычисление «случайного гомофилии сети» путем перебора списка с использованием функции - PullRequest
0 голосов
/ 15 января 2019

Я надеюсь включить элементы в уравнение из любого списка значений словаря. Уравнение для расчета гомофилии.

Справочная информация:

Гомофилия: вероятность того, что различные характеристики будут совместно использоваться в социальной сети. Например, вероятность того, что люди из выборочной популяции имеют общий цвет глаз.

Вот как может работать уравнение в этом примере:

(частота голубых глаз / суммарная частота) ^ 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...