Python-Soc网络分析:通过迭代列表,使用函数计算“机会网络同源性”

2024-06-26 01:44:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望从字典值的任何列表中插入一个等式。这个方程是用来计算同源性的。在

背景:

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

在这个例子中,这个等式是如何工作的:

(蓝眼睛频率/总和频率)^2+(棕色眼睛频率/总和频率)^2

记住,即使你有两个以上的特征(绿色、淡褐色、灰色),这也必须有效。但是,我会保持简单,以便检查结果。在

因此,如果我们有字典形式的数据:

EYES = {'Kevin':'brown', 'Frank':'blue', 'Alex':'blue', 'Tracey':'brown', 'Milo':'blue'}

首先,我计算字典中值的频率,如下所示:

^{pr2}$

现在我有了第二个单独的频率字典来处理:

^{3}$

但是因为字典是无序的,我必须把这些值转换成一种可以用来计算的格式。在

我认为这个需要作为一个列表?如果我错了,请纠正我:

Eyes_freq_dict = frequency(EYES)
EYESlist = []
for v in Eyes_freq_dict.values():
    EYESlist.append(v)

然后我自己得到这些值,作为一个列表: 眼科医生 [3,2]

绊脚石:

我刚开始用Python做数学,所以我现在担心我可能会走到死胡同。我真的可以把这些成分代入上面的方程吗?在

在这种情况下,所需的等式为:

(EYESlist[0]/sum(EYESlist))^2+(EYESlist[1])/sum(EYESlist))^2

或者在英语中,它的意思是:

**3/5平方+2/5平方=0.52**

现在的问题是:如何迭代,首先,这个列表。然后是任何列表(任何长度)以获得正确的结果。在

如果我走这条路,请让我知道!如果有更优雅的方法来解决这个问题,我会很高兴,但我希望这是一个有趣的探索。在

我只是想用Python的方式输入公式并进行测试,但我很困惑,因为我收到了一条错误消息:

 sum(((EYESlist[0]/ sum(EYESlist))**2)((EYESlist[1])/ sum(EYESlist))**2)
#TypeError: 'float' object is not callable

我希望有人能给我指出正确的方向!我想继续做剩下的作业(我还有五个问题要做)。在

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

最好的, A


Tags: 列表字典blue特征概率频率眼睛sum
1条回答
网友
1楼 · 发布于 2024-06-26 01:44:19

根据你的解释,这个问题很清楚,差不多已经解决了。在

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

我们可以将frequency()给出的Counter对象显式地转换为list 使用

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

因为我们需要迭代列表中的每个值来计算同伦概率。在

^{pr2}$

使用值列表调用函数将直接返回chance_homophily,而不管您使用多少种眼睛颜色。在

print(chance_homophily(EYESlist))

输出:

0.52                    

相关问题 更多 >