zoukankan      html  css  js  c++  java
  • 复杂网络的可视化分析基础教学

      本篇博客讲的是python中复杂网络分析工具network的关于网络中的

      1、节点和边

      2、节点的度

      3、聚集系数

      4、最短距离

      首先导入一些相关的包:

      import networkx as nx

      import numpy as np # 数值计算

      import scipy as sp # 科学计算

      import matplotlib.pyplot as plt # 绘图

      下面先以美国空手道俱乐部的例子进行讲解:

      空手道俱乐部网络是复杂网络分析中常用的一个例子网络,在分析节点中心性和社团结构等问题时都会被使用。因此networkx中也自带空手道俱乐部网。

      g = nx.karate_club_graph() # 美国空手道俱乐部

      nx.draw(g)

      plt.show()

      可以对上述的网络进行参数修改等操作,代码如下:

      # 可选布局

      fig,ax = plt.subplots(figsize=(8,6))

      layout = [nx.shell_layout,

      nx.circular_layout,

      nx.fruchterman_reingold_layout,

      nx.circular_layout,

      nx.kamada_kawai_layout,

      nx.spring_layout]

      pos = layout[5](g) # 根据布局方式生成每个节点的位置坐标

      NodeId = list(g.nodes())

      node_size = [g.degree(i)**1.2*90 for i in NodeId]

      options = {

      'node_size': node_size,

      'line_color': 'grey',

      'linewidths': 0.1,

      'width': 0.4,

      'node_color': node_size,

      'font_color': 'w' # 字体颜色

      }

      nx.draw(g, pos=pos, ax=ax, with_labels=True, **options)

      plt.show()

      节点和边

      # 节点的数量

      N = g.number_of_nodes() # len(g.nodes())

      # 网络中边的数量

      L = g.number_of_edges() # len(g.edges())

      节点的度

      计算网络中所有节点的度,并绘制其度的统计图

      # 节点的度

      G.degree() # 返回所有节点的度

      G.degree(1) # 返回特定节点的度

      度分布图的代码如下:

      # 度分布图

      degs = dict(nx.degree(g))

      print('degree of each node:', degs)

      print('average degree:', np.mean(list(degs.values())))

      # 度分布统计分布图

      plt.hist(degs.values(), bins=range(N))

      plt.xlabel('degree', fontsize=14)

      plt.ylabel('frequency', fontsize=14)

      plt.title('degree distribution', fontsize=14)

      最短距离郑州人流医院哪家好 http://mobile.zhongyuan120.com/

      节点间的最短距离dij表示从节点i最少走多少距离可以到节点j。

      下面是一些基本的函数

      # 返回特定节点间的最短距离

      # nx.shortest_path_length(G,source=1,target=2)

      # 返回特定节点与其他所有节点的最短距离

      # nx.shortest_path_length(G,source=1)

      # 返回所有节点间的最短距离

      # nx.shortest_path_length(G)

      # 两个节点间的最短距离

      d12 = nx.shortest_path_length(G,source=2,target=19)

      print('SPL between 2 and 9:',d12)

      # 节点间的平均最短距离

      avg_d = nx.average_shortest_path_length(G)

      print('average SPL:',avg_d)

      最短距离度分布图代码如下:

      avg_d = nx.average_shortest_path_length(G)

      # 最短距离分布

      pair_d = nx.shortest_path_length(G) # 任意两个节点间的距离

      dd = np.array([[nx.shortest_path_length(G,i,j) for j in G if j!=i] for i in G]).reshape(-1)

      print(np.mean(dd))

      bins = np.arange(-0.5,max(dd)+1.5,1.0)

      plt.hist(dd,bins=bins)

      plt.plot([avg_d,avg_d],[0,1000],'r--',lw=3)

      plt.ylim(0.650)

      plt.xlabel('d')

      plt.ylabel('frequency')

      plt.show()

      集聚系数

      公式基本上都能找到,我这里就不放了

      # 集聚系数

      # nx.clustering(G) # 返回所有节点的集聚系数

      # nx.clustering(G,1) # 返回特定节点的集聚系数

      聚集系数 统计分布图

      cc = dict(nx.clustering(g))

      print('clustering coefficient of each node:', cc)

      print('average clustering coefficient:',np.mean(list(cc.values())))

      # 统计分布图

      plt.figure(figsize=(9,5))

      plt.subplot(1,2,1)

      plt.hist(cc.values(), bins=10)

      plt.xlabel('clustering coefficennt')

      plt.ylabel('frequency')

      plt.title('clustering coefficent distribution')

      # 散点图

      plt.subplot(1,2,2)

      plt.scatter([degs[i] for i in g], [cc[i] for i in g], c='g')

      plt.xlabel('k') # 度数

      plt.ylabel('C(k)') # 集聚系数

  • 相关阅读:
    windows系统桌面美化
    Jenkins 显示语言-英文切换中文
    Jenkins 任务定时
    Jenkins 结合 ANT 发送测试报告
    ANT 的使用
    虚拟机与主机之间文件传输
    【译】使用WebDriver采样器将JMeter与Selenium集成
    Newman基本使用
    autoIt中文手册
    selenium控制超链接在当前标签页中打开或重新打开一个标签页
  • 原文地址:https://www.cnblogs.com/djw12333/p/12752821.html
Copyright © 2011-2022 走看看