Python Soc网络分析:通过使用函数迭代列表来计算机会网络

问题描述

我希望将任何字典值列表中的项插入公式。这个等式就是同形计算。

背景:

同质性:在一个社交网络中共享不同特征的概率。例如,样本人群中拥有相同眼睛颜色的人的概率。

在该示例中,公式可能是这样工作的:

(蓝眼睛频次/总频)^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)
然后,我会以列表的形式自己获取这些值: EYES列表 [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

我希望有人能为我指明正确的方向!我想继续做剩下的家庭作业(我还有五道题要做)。

如果我不能快速解决这个问题,我可能会做的是转移到其他问题上,然后再回到这个问题上。这对我来说是一个有趣的挑战。

最佳 A


解决方案

根据您的解释,问题非常清楚,而且基本上已经完成。

使用列表是准确的并且易于处理,尽管有一种更有效的方法。

我们可以将frequency()给出的计数器对象转换为显式列表 使用

EYEScounter = frequency(EYES)
EYESlist = list(EYEScounter.values())

因为我们需要对列表的每个值进行迭代以计算机会。

def chance_homophily(EYESlist):
    chance_homophily = 0
    for color_count in EYESlist:
        chance_homophily += (color_count/sum(EYESlist))**2
    return chance_homophily

调用带有值列表的函数将直接返回chance_homophily,而不考虑您使用的眼睛颜色的数量。

print(chance_homophily(EYESlist))

输出:

0.52                    

相关文章