gStore1.2版本新增了七个高级函数,我们第2期将继续介绍的高级函数为:整体/局部集聚系数(clusterCoeff)、鲁汶算法(louvain)、K跳计数(kHopCount)/K跳邻居(kHopNeighbor)三类高级函数。
1 局部/整体集聚系数(clusteringCoeff)
1.1 局部集聚系数
查询结点 u 的局部集聚系数,即所有与它相连的结点之间所连的边的数量(即实际形成的以 u 为顶点的三角形数目),除以这些结点之间可以连出的最大边数(即最大可能形成的以 u 为顶点的三角形数目)。
clusterCoeff(u, directed, pred_set)
-
参数
u
: 变量或结点 IRIdirected
:布尔值,为真表示有向,为假表示无向(图中所有边视为双向) 。将图视为有向时,仅计数 cycle 类型三角形(详见三角形计数的介绍)pred_set
:考虑的谓词集合(若设置为空{}
,则表示允许出现数据中的所有谓词) -
返回值
返回值为结点 u 的局部集聚系数,对应的值为双精度浮点数(形式详见以下例子)。
{ "paths":[ {"src":"<IRI>","result":0.123} ] }
-
示例(数据集详见【4 示例数据集】)
下面的查询为局部集聚系数,构成它的边上关系为
喜欢
和关注
:SELECT (clusterCoeff(<Eve>,false,{<喜欢>,<关注>}) AS ?y) WHERE{}
结果如下
{ "paths":[ {"src":"<Eve>","result":0.333333} ] }
1.2 整体集聚系数
查询图的整体集聚系数。
clusterCoeff(directed, pred_set)
-
参数
directed
:布尔值,为真表示有向,为假表示无向(图中所有边视为双向) 。将图视为有向时,仅计数 cycle 类型三角形(详见三角形计数的介绍)pred_set
:考虑的谓词集合(若设置为空{}
,则表示允许出现数据中的所有谓词) -
返回值
返回值为图的整体集聚系数,对应的值为双精度浮点数。
-
示例(数据集详见【4 示例数据集】)
返回值为结点 u 的整体集聚系数,对应的值为双精度浮点数(形式详见以下例子)。
SELECT (clusterCoeff(false, {<喜欢>,<关注>}) AS ?y) WHERE{}
结果如下
{ "paths":[0.272727] }
2 鲁汶算法(louvain)
基于标签传播查询图中各结点的聚类情况,可用于社区发现等多种应用。
louvain(directed, pred_set, maxIter, increase)
-
参数
directed
: 布尔值,为真表示有向,为假表示无向(图中所有边视为双向)pred_set
:考虑的谓词集合(若设置为空{}
,则表示允许出现数据中的所有谓词)maxIter
: 最大迭代次数,大于等于1的整数increase
: 模块度增益阈值(0~1) -
返回值
返回值为以下形式,count为划分的社区数量,details为划分的各社区信息,包括社区编号communityId、成员数量menberNum
{ "count": 3, "details": [ { "communityId": "2", "menberNum": 5}, { "communityId": "4", "menberNum": 5}, { "communityId": "5", "menberNum": 4} ] }
-
示例(数据集详见【4 示例数据集】)
下面的查询在无向图(图中所有边视为双向)中的各结点的聚类情况,边上的关系可以是喜欢或关注,最大迭代次数为1,模块度增益阈值为1查询语句为:
SELECT (louvain(false, {<喜欢>, <关注>}, maxIter=1,increase=0.01) AS ?x) WHERE{}
结果如下
{ "paths":[ { "count":2, "details":[ {"communityId":"5", "menberNum":3}, {"communityId":"6", "menberNum":3} ] } ] }
3 K跳计数(kHopCount)/K跳邻居(kHopNeighbor)
3.1 K跳计数(kHopCount)
查询从结点 u 开始,统计其k层可所访问到的结点个数。
kHopCount(u, directed, k, pred_set)
-
参数
u
: 变量或结点 IRIdirected
:布尔值,为真表示有向,为假表示无向(图中所有边视为双向)k
:跳数(仅统计此跳数可达的节点数)pred_set
:考虑的谓词集合(若设置为空{}
,则表示允许出现数据中的所有谓词) -
返回值
返回值为以下形式,其中 src 为 u 对应的 IRI ;depth 为所处层数/高度(等于参数k);count 为所处层数访问到的结点总数,类型为整型。
{ "paths":[ { "src": "<IRI>", "depth": 3, "count": 1} ] }
-
示例(数据集详见【4 示例数据集】)
下面的查询返回图中的K跳计数,构成它的有向边由喜欢,关注关系3跳内的计数信息:
SELECT (kHopCount(<Alice>,true,3,{<喜欢>,<关注>}) AS ?y) WHERE{}
结果如下
{ "paths":[ {"src":"<Alice>","depth":3, "count":1} ] }
3.2 K跳邻居(kHopNeighbor)
查询从结点 u 开始,其k层可所访问到的结点。
kHopNeighbor(u, directed, k, pred_set, ret_num)
-
参数
u
: 变量或结点 IRI,表示源结点directed
:布尔值,为真表示有向,为假表示无向(图中所有边视为双向)k
:跳数(仅统计此跳数可达的节点数)pred_set
:考虑的谓词集合(若设置为空{}
,则表示允许出现数据中的所有谓词)ret_num
:整数,选填,默认为100,表示最多返回ret_num
个结点 IRI (若总结点数不足ret_num
个,则返回所有结点 IRI ) -
返回值
返回值为以下形式,其中 src 为 u 对应的 IRI ;depth 为所处层数/高度(等于参数k);dst为所处层数访问到的结点列表。
{ "paths":[ { "src": "<SRC_IRI>", "depth": 1, "dst": ["<DST_IRI>"] } ] }
-
示例(数据集详见【4 示例数据集】)
下面的查询返回图中的K跳邻居,构成它的有向边由喜欢,关注关系3跳内的邻居信息:
SELECT (kHopNeighbor(<Francis>,true,3,{<喜欢>,<关注>},100) AS ?y) WHERE{}
结果如下
{ "paths":[ { "src":"<Francis>", "depth":3, "dst":["<Eve>","<Alice>"] } ] }
4 示例数据集
<Alice> <关注> <Bob> .
<Alice> <喜欢> <Bob> .
<Alice> <不喜欢> <Eve> .
<Bob> <关注> <Alice> .
<Bob> <喜欢> <Eve> .
<Carol> <关注> <Bob> .
<Carol> <喜欢> <Bob> .
<Carol> <不喜欢> <Francis> .
<Dave> <关注> <Alice> .
<Dave> <关注> <Eve> .
<Dave> <不喜欢> <Francis> .
<Eve> <喜欢> <Carol> .
<Francis> <喜欢> <Carol> .
<Francis> <不喜欢> <Dave> .
<Francis> <不喜欢> <Eve> .
虚拟网络社交图