中心性分析
# 中心性分析
提示
组件库提供了多种图中节点数据的中心性指标计算算法,用于对图中节点的重要性按照不同的业务场景进行映射,达到辅助研判分析的作用,帮助客户能够从图中大量节点中识别出相对比较重要的节点,从而推进研判分析策略。
中心性算法能够帮助我们识别最重要的节点,帮助我们了解组动态,例如可信度、可访问性、事物传播的速度以及组与组之间的连接。尽管这些算法中有许多是为社会网络分析而发明的,但它们已经在许多行业和领域中得到了应用。
# 中心性算法类型
算法类型 | 算法名称 | 使用场景说明 |
---|---|---|
degree | 度中心性 | 度衡量一个节点重要性的主要指标,重要的节点就是拥有许多连接的节点。你的社会关系越多,你的影响力就越强。可以简单理解为一个节点的访问机会的大小。例如,在一个社交网络中,一个拥有更多 degree 的人(节点)更容易与人发生直接接触,也更容易获得流感。 |
out-degree | 出度中心性 | 出度是该节点指向其他节点的关联数,出度通常被解释为合群。 |
in-degree | 入度中心性 | 入度是指向该节点的关联数的计数,入度通常被解释为一种受欢迎的形式。 |
betweennes | 中介中心性 | 中介中心性量化了一个节点充当其他两个节点之间最短路径的桥梁的次数。如果一个成员位于其他成员的多条最短路径上,那么该成员就是核心成员,就具有较大的中介中心性。很多时候,一个系统最重要的 “齿轮” 不是那些状态最好的,而是一些看似不起眼的 “媒介”,它们掌握着资源或者信息的流动性。 |
closeness | 紧密中心性 | 接近中心性用于研究组织网络,其中具有高度亲密中心性的个人处于有利地位,可以控制和获取组织内的重要信息和资源,接近中心性高的节点一般扮演的是“八婆”的角色。他们不一定是名人,但是乐于在不同的人群之间传递消息。 |
pageRank | PageRank | PageRank的核心思想是“引用者越多,被引用者就越重要”。也就是说,一个网页如果被很多其他网页所引用,就代表这个网页相对来说是很重要的,这个重要性就可以通过一个叫做PageRank的值来衡量。 |
# 如何使用图的中心性分析?
组件库提供了统一的中心性指标计算接口 centrality()
, 返回中心性指标计算对象,通过该对象获取上述中心性类型对应的指标结算结果。
let centrality = graphVis.centrality(); //获取中心性计算对象
var result = centrality.degree('both'); //获取度中心性指标
1
2
2
# 中心性分析指标的应用
// 初始化客户端对象
let graphVis = new GraphVis({
container:document.getElementById('divId'), //画布层
licenseKey:'licensekey' //授权license
});
var centrality = graphVis.centrality(); //中心性计算客户端
var centralityType = 'degree';
//节点的中心性指标计算结果
var centralityResult = null;
switch(centralityType){
case 'degree':
centralityResult = centrality.degree('both');//图的度中心性指标
break;
case 'out-degree':
centralityResult = centrality.degree('out');//图的出度中心性指标
break;
case 'in-degree':
centralityResult = centrality.degree('in');//图的入度中心性指标
break;
case 'betweennes':
centralityResult = centrality.betweennes();//图中节点的中介中心性指标
break;
case 'closeness':
centralityResult = centrality.closeness();//图中节点的紧密中心性指标
break;
case 'pageRank':
centralityResult = centrality.pageRank();//节点的pageRank指标
break;
default:
break;
}
var minValue=Infinity,maxValue=-Infinity;
for(var nodeId in centralityResult){
minValue = Math.min(centralityResult[nodeId],minValue);
maxValue = Math.max(centralityResult[nodeId],maxValue);
}
var domain = [minValue,maxValue];//中心性指标的最大值、最小值
var nodeSizeRange = [0.5,2]; //节点缩放范围大小定义
//设置节点的缩放比例大小
graphVis.nodes.forEach(node => {
node.scale = graphVis.numScale(nodeSizeRange, domain, centralityResult[node.id]); //给节点设定缩放系数
});
graphVis.refreshView(); //刷新可视化视图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48