graph - 分析 RDF 图 : average number of certain relation

标签 graph rdf sparql

我是 SPARQL 的新手。

我正在尝试找到一种方法来对 RDF 图进行一般分析,例如,某个主题的特定关系的平均数。 所以如果我们有数据

[Alice         likes     Money]
[Bob           has       Money]
[Bob           likes     Diving] 
[Bob           likes     Skiing]

每个节点的平均“赞”数是多少(此处:1.5)。

我的第一个尝试是简单地编写一个脚本来迭代所有不同的对象并查询每个对象的点赞关系计数。

有没有办法直接在 SPARQL 中执行此操作?

最佳答案

是的,您可以使用 GROUP BY 和聚合来处理此类事情。参见 Aggregates在规范中对此进行概述。

如果你想获得每个节点的点赞数,你可以这样做:

PREFIX : <http://example.org/ns#>

SELECT ?node (COUNT(*) AS ?likes)
WHERE
{
  ?s :likes ?node
}
GROUP BY ?node

在这里,我们按 ?node 分组,并执行 COUNT(*) ,它简单地计算组中解决方案的数量。这为我们提供了单个查询中每个不同 ?node 值的点赞数。

如果我们想找到每个节点的平均点赞数,我们也可以使用聚合来做到这一点:

PREFIX : <http://example.org/ns#>

SELECT 
 (COUNT(*) AS ?likeCount) 
 (COUNT(DISTINCT ?node) AS ?nodeCount) 
 (?likeCount / ?nodeCount AS ?avgLikesPerNode)
WHERE
{
  ?s :likes ?node .
}

在这里,我们再次使用 COUNT(*) 来获取喜欢的总数,然后我们使用 COUNT(DISTINCT ?node) 来计算 的不同值code>?node 然后我们可以简单地将我们的 ?likeCount 除以我们的 ?nodeCount 得到每个节点的平均点赞数。

关于graph - 分析 RDF 图 : average number of certain relation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33102213/

相关文章:

ios - 使用 iOS Swift 创建折线图

javascript - 根据选择输入更改 d3 中的数据

rdf - 如何从原始数据(CSV)创建本体?

SPARQL 如何从 xsd :date 获取整数年

sparql - Jena Fuseki 和 Blazegraph 对于字符串文字的 'type strictness' 的行为有所不同

ios - 如何绘制水平条形图而不显示轴

algorithm - 匹配层次不精确图

rdf - SPARQL 选择 RDF :ID

rdf - 我可以为 rdf :List members? 指定范围吗

rdf - 选择和 RDF/SPARQL