垦利网站定制,开发商延期交房可以退房吗?,做游戏和做网站哪个难,沧州网站建设定制价格实验十五#xff1a;社会科学问题研究的计算实践
1.实验目标及要求
#xff08;1#xff09;掌握网络视角 #xff08;2#xff09;掌握社会网络基础内容 #xff08;3#xff09;掌握友谊悖论
2.实验主要内容
随机生成一次符合社会网络特征的网络#xff0c;通过计…实验十五社会科学问题研究的计算实践
1.实验目标及要求
1掌握网络视角 2掌握社会网络基础内容 3掌握友谊悖论
2.实验主要内容
随机生成一次符合社会网络特征的网络通过计算其中友谊悖论现象出现的占比考察友谊悖论是否算得上一个规律
3.实验前进行一轮测试验证代码准确度
以n10r4p0.5为基础测试一轮的数据
[[0 0 1 0 0 0 1 1 1 1][0 0 1 0 0 0 1 0 0 0][1 1 0 0 1 1 1 0 0 1][0 0 0 0 1 1 0 0 0 1][0 0 1 1 0 1 1 0 0 0][0 0 1 1 1 0 0 0 0 1][1 1 1 0 1 0 0 1 0 0][1 0 0 0 0 0 1 0 1 0][1 0 0 0 0 0 0 1 0 1][1 0 1 1 0 1 0 0 1 0]]
5 4.4
2 5.5
6 4.166666666666667
3 4.333333333333333
4 4.5
4 4.5
5 4.0
3 4.333333333333333
3 4.333333333333333
5 4.2满足的区间 0.6 保存到数组的索引值 6 友谊悖论数组 [0, 0, 0, 0, 0, 0, 1, 0, 0, 0] 友谊悖论字典 {[0,0.1): 0, [0.1,0.2): 0, [0.2,0.3): 0, [0.3,0.4): 0, [0.4,0.5): 0, [0.5,0.6): 0, [0.6,0.7): 1, [0.7,0.8): 0, [0.8,0.9): 0, [0.9,1.0]: 0}
4.实验代码及其输出结果
代码部分:
import random
import networkx as nx
import numpy as np# 统计友谊悖论表
stats_dit{[0,0.1):0,[0.1,0.2):0,[0.2,0.3):0,[0.3,0.4):0,[0.4,0.5):0,[0.5,0.6):0,[0.6,0.7):0,[0.7,0.8):0,[0.8,0.9):0,[0.9,1.0]:0}
stats_list[0,0,0,0,0,0,0,0,0,0]
# 进行100次测试
for data in range(100):# 随机生成[50~1000]个节点每个节点有[4~10]个邻居结点边的 随机化重连的概率为(0~1)的图nrandom.randint(50,1000)if n%21:n1rrandom.randint(4,10)prandom.random()ws nx.watts_strogatz_graph(n, r, p)np.set_printoptions(thresholdnp.inf)# 图转邻接矩阵a nx.to_numpy_matrix(ws)anp.array(a).astype(int64)# 按顺序保存当前结点的度new_deg[]for i in range(n):new_deg.append(a[i].sum())# 统计符合友谊悖论的结点数friendship0# 找出符合悖论的结点放到合适的区间中for i in range(n):# 保存当前节点所在行的数据new_row_deg []# 保存当前结点的所有相邻节点的度neigh_deg[]for j in range(n):new_row_deg.append(a[i][j])# 遍历当前行数据找到1的位置证明是当前结点的相邻节点for k in range(n):# 将相邻节点的度保存if new_row_deg[k]1:neigh_deg.append(new_deg[k])# 计算并保存相邻结点的平均度neigh_deg_numnp.array(neigh_deg).sum()/len(neigh_deg)# 当前结点度小于相邻结点平均度则 friendship1if new_deg[i]neigh_deg_num:friendship1# 确定满足友谊悖论的区间stats_rangefriendship/n# 计算在数组中对应的位置statsint(stats_range*10%10)stats_list[stats]1# 保存字典的键stats_dit_keys[]for i in stats_dit:stats_dit_keys.append(i)# 将数组数据保存到字典中for i in range(10):stats_dit[stats_dit_keys[i]]stats_list[i]
# 输出统计表数据
print(统计表数据,stats_dit)
输出结果
统计表数据 {[0,0.1): 0, [0.1,0.2): 1, [0.2,0.3): 1, [0.3,0.4): 2, [0.4,0.5): 4, [0.5,0.6): 71, [0.6,0.7): 21, [0.7,0.8): 0, [0.8,0.9): 0, [0.9,1.0]: 0}5.结果验证和心得体会
根据实验结果可知在100次友谊悖论结果验证中友谊悖论现象出现占比在0.5以上的有92次可以得到这个友谊悖论说法算得上是一个规律。经过此次实验感受到了调用python库的方便之处直接使用networkx模块传入结点数结点度数结点边的随机化重连概率直接可以生成一个关系图再使用networkx模块的内置函数将关系图转变成邻接矩阵很是方便快捷。对于求邻接矩阵平均度的问题我是想先求出每个结点的的度存在一个列表中。找每一行中等于1的结点就为当前结点的相邻节点去存结点度的列表中找每个相邻结点对应的度求和算出平均度数。再将当前结点度和平均度进行比较如果当前结点度小于相邻节点平均度则该结点符合友谊悖论则加1最后用符合友谊悖论的结点数除以当前关系网的总结点数就为该关系网内结点的友谊悖论的占比。这就是我对于此次实验的思路不知道是否有错误的地方代码应该也能进一步优化后续会找找可以优化的地方。此次实验也让我了解到了关于网络视角的概念网络就是实体及其实体之间的关系可以应用到现实生活的很多地方也了解了友谊悖论理论看来是一个普遍存在的理论了但占比大多数也是在该关系网的0.5~0.7之间。