社会网络分析四 networkx包详解
- 新开一个坑,记录一下networkx用过的一些函数
- 详细见帮助文档:英文(https://networkx.org/documentation/stable/index.html),中文翻译版(https://www.wenjiangs.com/docs/networkx-25,公式显示不行,机翻,速读可以用,更推荐原版)
1. 基本功能
2. 算法
按照 图特征、点特征、边特征的整体思路,部分根据 networkx 原生分类
2.1 图特征
-
平均聚类系数
- clustering(G[, nodes, weight]) Compute the clustering coefficient for nodes.
- average_clustering(G[, nodes, weight, …]) Compute the average clustering coefficient for the graph G.
-
平均最短路径
- average_shortest_path_length (G[, weight, method]) Returns the average shortest path length.
-
层级属性
- flow_hierarchy(G[, weight]) Returns the flow hierarchy of a directed network.
-
互惠属性
- reciprocity(G[, nodes]) Compute the reciprocity in a directed graph.
- overall_reciprocity(G) Compute the reciprocity for the whole graph.
-
社区识别
- Louvain Community Detection
-
图相似性
- Similarity
2.2 中心度
https://networkx.org/documentation/stable/reference/algorithms/centrality.html
- 中心度快写烂了,但是实际上感觉还是大有可为——
- 简单的就是社科常用的点特征——度中心度、桥接中心度、接近中心度、特征向量中心度,一般是度量类似于“影响力 Impact/Influence”、“社会资本 Social Capital”这类的construct;
- 二阶难度是,同样作为某一个construct的度量,有一类新的研究方向,我称之为“度测度开发的边缘创新”,即根据场景的特征+新的算法方向+管理学理论,对centrality(或者centralization)的数学公式进行更新、优化、重构,是IS-DesignScience的套路,并且融入一些GNN/GCN/GAN的做节点特征工程的思路,加上管理学包装能出好论文
- 三阶难度其实偏复杂科学&物理学,直接从数学公式上思考New Graph Structure的Centrality,比如说超图怎么做中心度,边转点如何做中心度等,属于目前不想思考的方向
(具体整理之后补,列一个提纲)
-
意义包括:数学测度,代码调用,现实意义,理论对应
-
nx.degree_centrality(G) 度中心度
- 姐妹版:in_degree_centrality,out_degree_centrality
-
nx.eigenvector_centrality(G) 特征向量中心度
- eigenvector_centrality_numpy
- katz_centrality, katz_centrality_numpy
-
nx.closeness_centrality(G) 接近中心度
- incremental_closeness_centrality
-
betweenness_centrality 中介中心度
- betweenness_centrality_subset
- edge_betweenness_centrality,betweenness_centrality_subset
- communicability_betweenness_centrality
-
- information_centrality 信息中心度
- current_flow_closeness_centrality
- current_flow_betweenness_centrality,edge_current_flow_betweenness_centrality,approximate_current_flow_betweenness_centrality,current_flow_betweenness_centrality_subset,edge_current_flow_betweenness_centrality_subset
- information_centrality 信息中心度
-
Group Centrality
- group_betweenness_centrality
- group_closeness_centrality
- group_degree_centrality,group_in_degree_centrality,group_out_degree_centrality
- prominent_group
-
load_centrality
- edge_load_centrality
-
Subgraph
- subgraph_centrality
- subgraph_centrality_exp
- estrada_index
-
harmonic_centrality
-
dispersion
-
Reaching
- local_reaching_centrality
- global_reaching_centrality
-
percolation_centrality
-
second_order_centrality(G)
-
Trophic
- trophic_levels
- trophic_differences
- trophic_incoherence_parameter
-
VoteRank
- voterank
-
Laplacian
- laplacian_centrality
1 节点中心度/重要性
Centrality(中心性):确定网络中节点的重要性。这可用于识别社交网络中有影响力的人或识别网络中潜在的攻击目标。
- 中心度(Centrality):衡量节点重要程度
- 游走(walk):可以多次经过同一个节点的路径,根据所考虑的游走类型和统计它们的方式,中心度度量也会各有不同。
(1)度中心度(Degree Centrality)
- 度中心度:终止于节点 i 的、长度为 1 的 游走数量,这能够衡量传入和传出关系,可用于识别社交网络中最有影响力的人。
- 公式: C ( X i ) = d i C(X_i)=d_i C(Xi)=di(与权重无关)
c_degree = nx.degree_centrality(G_karate)
c_degree = list(c_degree.values())
(2)特征向量中心度(Eigenvector Centrality)
- 特征向量中心度:终止于节点 i 的、长度为无穷的 游走数量,这能让有很好连接相邻节点的节点有更高的重要度。
- 公式: C ( X i ) = 1 λ ∑ j A i j C ( X j ) C(X_i)=\frac{1}{\lambda}\sum_{j}A_{ij}C(X_j) C(Xi)=λ1∑jAijC(Xj),where λ \lambda λ the largest eigenvalue of A A A(与权重无关)
c_eigenvector = nx.eigenvector_centrality(G_karate)
c_eigenvector = list(c_eigenvector.values())
(3)接近度中心度(Closeness Centrality)
- 接近度中心度:反比于到其它节点的最短路径长度的总和。检测的是可以在图中有效传播信息的节点,这可用于识别假新闻账户或恐怖分子,以便隔离能向图中其它部分传播信息的个体。
- 公式: C ( X i ) = 1 ∑ j ≠ i d ( i , j ) C(X_i)=\frac{1}{\sum_{j\ne i}d(i,j)} C(Xi)=∑j=id(i,j)1(可设置权重,与‘距离’/‘成本’/‘差异性’等,不用直接使用频次)
c_closeness = nx.closeness_centrality(G_karate)
c_closeness = list(c_closeness.values())
(4)中间中心度(Betweenness Centrality)
- 中间中心度:检测的是节点在图中的信息流上所具有的影响量,可用于发现用作从图的一部分到另一部分的桥的节点,比如用在电信网络的数据包传递处理器或假新闻传播分析中,衡量的是一个节点用作两个节点之间的桥的次数。
- 公式:
C
(
X
i
)
=
∑
j
≠
i
,
i
≠
k
σ
j
k
(
i
)
σ
j
k
C(X_i)=\sum_{j\ne i, i\ne k} \frac{\sigma_{jk}(i)}{\sigma_{jk}}
C(Xi)=∑j=i,i=kσjkσjk(i)(可设置权重,与‘距离’/‘成本’/‘差异性’等,不用直接使用频次)
- σ j k \sigma_{jk} σjk:j 和 k 之间的最短路径的数量
- σ j k ( i ) \sigma_{jk}(i) σjk(i):j 和 k 之间的经过 i 的最短路径的数量
- 公式:
C
(
X
i
)
=
∑
j
≠
i
,
i
≠
k
σ
j
k
(
i
)
σ
j
k
C(X_i)=\sum_{j\ne i, i\ne k} \frac{\sigma_{jk}(i)}{\sigma_{jk}}
C(Xi)=∑j=i,i=kσjkσjk(i)(可设置权重,与‘距离’/‘成本’/‘差异性’等,不用直接使用频次)
(5)PageRank 算法
-
PageRank 是根据所连接的相邻节点,然后再根据它们各自的相邻节点估计当前节点的重要性
- 计算方法1:通过在相邻节点上迭代地分配节点的秩(原本基于度)
- 计算方法2:通过随机遍历图并统计每次游走期间到达每个节点的频率
-
用途:
- 谷歌的搜索引擎的网页权重评估
- 也能够用于检测任何网络中的高影响力节点,比如可用 在社交网络上进行推荐。
-
Neo4J 对 PageRank 算法的总结
- PageRank 通常是在有向图上计算,但也可通过将有向图中的每条边转换成两条边而在无向图上执行。
-
案例
nx.pagerank(G_karate, alpha=0.9) # alpha 是阻尼参数(默认为 0.85)
''' 返回一个排名列表:
{0: 0.09923208031303203,
1: 0.0543403155825792,
2: 0.05919704684187155,
3: 0.036612460562853694,
'''