图基本介绍
参考:
https://www.bilibili.com/video/BV1HZ4y1B7hj?p=2&spm_id_from=pageDriver&vd_source=d64db78c8c1f9c3401720510fccc42a8
1、什么是图?
2、图的表示?
邻接矩阵以及特征矩阵
3、图的性质
-
度 degree
节点连接的边
-
子图 subgraph
-
连通图,连通分量
对于一个无向图,如果任意的节点i能够通过一些边到达节点j ,则称之为连通图
-
有向图连通性
-
最短路径,图直径
-
度中心性
度中心性 = 1 n − 1 ( n 为节点个数 ) 度中心性= {1 \over n-1}(n为节点个数) 度中心性=n−11(n为节点个数) -
特征向量中心性 Eigenvector Centrality
A ∗ x = λ ∗ x A*x = \lambda*x A∗x=λ∗x -
中介中心性 Betweenness Centrality
B e t w e e n n e s s = 经过该节点的最短路径 其余两两节点的最短路径 Betweenness={经过该节点的最短路径 \over 其余两两节点的最短路径} Betweenness=其余两两节点的最短路径经过该节点的最短路径 -
连接中心性 Closeness
C l o s e n e s s = n − 1 节点到其他节点最短路径之和 Closeness={n-1 \over 节点到其他节点最短路径之和} Closeness=节点到其他节点最短路径之和n−1 -
PageRank(节点排序,一种网页排序算法)
-
HITS(节点排序,一种网页排序算法)
4、代码实现
pip install networkx
import numpy as np
import pandas as pd
import networkx as nx
edges = pd.DataFrame() # 边
edges['sources'] = [1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5] # 起始点
edges['target'] = [2, 4, 5, 3, 1, 2, 5, 1, 5, 1, 3, 4] # 目标点
edges['weights'] = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] # 边的权重
# 构建图
G = nx.from_pandas_edgelist(edges, source='sources', target='target', edge_attr='weights')
# degree
print(nx.degree(G))
# 连通分量 边
print(list(nx.connected_components(G)))
# 图直径
print(nx.diameter(G))
# 中心行
print(nx.degree_centrality(G))
# 特征向量中心性
print(nx.eigenvector_centrality(G))
# betweenness
print(nx.betweenness_centrality(G))
#cLoseness
print(nx.closeness_centrality(G))