7-4_centrality_network

中心性分析

  • 发布日期:2019-11-12
  • 难度:一般
  • 类别:社会网络分析
  • 标签:社会网络分析、中心性、点度中心度、中介中心度、接近中心度

1. 问题描述

社会网络的中心性分析

2. 程序实现

In [1]:
import networkx as nx
import matplotlib.pyplot as plt

#无向图的中心性分析

#构建网络图
G=nx.Graph()
G.add_nodes_from([1,2,3,4,5])
G.add_edges_from([(1,2),(1,3),(2,3),(3,4),(4,5)])
#绘制网络图
nx.draw(G,with_labels=True,font_size=20,node_size=2000,pos=nx.kamada_kawai_layout(G)) 
plt.show()
In [2]:
#计算中心性指标
print(nx.degree_centrality(G))#点度中心度
print(nx.closeness_centrality(G))#接近中心度
print(nx.betweenness_centrality(G))#中介中心度
{1: 0.5, 2: 0.5, 3: 0.75, 4: 0.5, 5: 0.25}
{1: 0.5714285714285714, 2: 0.5714285714285714, 3: 0.8, 4: 0.6666666666666666, 5: 0.4444444444444444}
{1: 0.0, 2: 0.0, 3: 0.6666666666666666, 4: 0.5, 5: 0.0}
In [4]:
#有向图的中心性分析

#构建有向图网络
G_di = nx.DiGraph()
G_di.add_nodes_from([1,2,3,4,5])
G_di.add_edges_from([(1,2),(1,3),(2,3),(3,4),(4,5)])
#绘制网络图
nx.draw(G_di,with_labels=True,font_size=20,node_size=2000,pos=nx.kamada_kawai_layout(G_di)) 
plt.show()
In [5]:
#有向图的绝对点度中心度

print(G_di.in_degree(1))  #点1的入度
print(G_di.out_degree(1))  #点1的出度
#通过列表形式显示点1、2、3、4、5的入度
print(list(G_di.in_degree([1,2,3,4,5])))  
#通过列表形式显示点1、2、3、4、5的出度
print(list(G_di.out_degree([1,2,3,4,5])))  
0
2
[(1, 0), (2, 1), (3, 2), (4, 1), (5, 1)]
[(1, 2), (2, 1), (3, 1), (4, 1), (5, 0)]
In [5]:
print(G.number_of_nodes()) #查看一共有多少节点
print(G.number_of_edges()) #查看一共有多少边
5
5
In [6]:
#有向图的相对点度中心度
print(nx.in_degree_centrality(G_di))
print(nx.out_degree_centrality(G_di))
{1: 0.0, 2: 0.25, 3: 0.5, 4: 0.25, 5: 0.25}
{1: 0.5, 2: 0.25, 3: 0.25, 4: 0.25, 5: 0.0}
In [7]:
#有向图的接近中心度
print(nx.closeness_centrality(G_di))
#有向图的中介中心度
print(nx.betweenness_centrality(G_di))
{1: 0.0, 2: 0.25, 3: 0.5, 4: 0.44999999999999996, 5: 0.4444444444444444}
{1: 0.0, 2: 0.0, 3: 0.3333333333333333, 4: 0.25, 5: 0.0}