以一带一路国家对于丝绸商品的进出口贸易情况作为示例,按照初步探索、中心性分析、凝聚子群分析的思路进行分析和演示
import networkx as nx
import matplotlib.pyplot as plt
import numpy as np
# 定义函数从文件中自动导入节点、边和权重
def createGraph(filename, w_index) :
G = nx.DiGraph()
for line in open(filename) :
strlist = line.split()
n1 = strlist[0]
n2 = strlist[1]
weight = float(strlist[w_index])
G.add_weighted_edges_from([(n1, n2, weight)])
return G
#构建网络
G=createGraph('onebeltoneroad.txt',2)
#节点数量
print(G.number_of_nodes())
#边数量
print(G.number_of_edges())
#计算图的密度
print(nx.density(G))
#度数排名前10的节点
d=nx.degree(G)#计算每个节点的度数
d1=sorted(d,key=lambda x: x[1],reverse=True)#按度数大小排序
d2=d1[0:10]#查看前10个元素
print(d2)
#度数排序图
list1=[]
list2=[]
for i in range(len(d2)):
list1.append(d2[i][0])
list2.append(d2[i][1])
plt.xticks(np.arange(len(list1)), list1,fontsize=7,fontname='Times New Roman')
plt.yticks(fontsize=15,fontname='Times New Roman')
plt.ylabel('度', fontsize =15)
plt.xlabel('国家', fontsize =15)
plt.title('度数排序图', fontsize =25)
plt.bar(np.arange(len(list1)),list2,width=0.5)
plt.show()
#入度排名前10的国家
dc1=sorted(nx.in_degree_centrality(G).items(),key=lambda x: x[1],reverse=True)
print(dc1[0:10])
#出度排名前10的国家
dc2=sorted(nx.out_degree_centrality(G).items(),key=lambda x: x[1],reverse=True)
print(dc2[0:10])
#中介中心度排名前10的国家
bc1=sorted(nx.betweenness_centrality(G).items(),key=lambda x: x[1],reverse=True)
print(bc1[0:10])
# 将网络图导出为gexf格式文件
nx.write_gexf(G,'onebeltoneroad.gexf')
#移除网络中的自环
G.remove_edges_from(nx.selfloop_edges(G))
#得到k核度字典
d1=nx.core_number(G)
#按k核度排序
sd1=sorted(d1.items(),key=lambda x:x[1],reverse=True)
print(sd1)
#返回26核子图
kc1=nx.k_core(G,k=26)
print(list(kc1.nodes))
nx.draw(kc1,with_labels=True,font_size=5,node_size=200)
plt.show()