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
相关文章