我是 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/