分析RDF图:某种关系的平均数
Analyzing RDF Graph: average number of certain relation
我是 SPARQL 的新手。
我正在尝试找到一种方法来对 RDF 图进行一般分析,这意味着例如某个主题的特定关系的平均数。
所以如果我们有数据
[Alice likes Money]
[Bob has Money]
[Bob likes Diving]
[Bob likes Skiing]
每个节点 "likes" 的平均数量是多少,(此处: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)
来计算 ?node
的不同值,然后我们可以简单地除以我们的 ?likeCount
通过我们的 ?nodeCount
给我们每个节点的平均喜欢。
我是 SPARQL 的新手。
我正在尝试找到一种方法来对 RDF 图进行一般分析,这意味着例如某个主题的特定关系的平均数。 所以如果我们有数据
[Alice likes Money]
[Bob has Money]
[Bob likes Diving]
[Bob likes Skiing]
每个节点 "likes" 的平均数量是多少,(此处: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)
来计算 ?node
的不同值,然后我们可以简单地除以我们的 ?likeCount
通过我们的 ?nodeCount
给我们每个节点的平均喜欢。